xctf_easyphp
类型:PHP代码审计
1.审查传值#
2.观看分析条件#
从上往下看:
1.if(isset($a) && intval($a) > 6000000 && strlen($a) <= 3)
2.if(isset($b) && '8b184b' === substr(md5($b),-6,6))
3.$c=(array)json_decode(@$_GET['c'])
4.if(is_array($c) && !is_numeric(@$c["m"]) && $c["m"] > 2022)
5.if(is_array(@$c["n"]) && count($c["n"]) == 2 && is_array($c["n"][0]))
6.$d = array_search("DGGJ", $c["n"]);
7.$d === false?die("no..."):NULL;
8.foreach($c["n"] as $key=>$val){
$val==="DGGJ"?die("no......"):NULL;
}
9.if($key1 && $key2)
分析:
-
要求传入a值,并且a的整数值要大于6000000,还要a的长度小于等于3
通过php的弱比较可以想到输入a=1e9,e代表科学计数法。
-
要求传入b值,并且b值的md5哈希值的后6位为8b184b
通过使用python写个码来实现暴力破解,最终值为53724
import hashlib def find_collision(test): counter = 0 # 暴力破解 while True: message = str(counter) md5 = hashlib.md5(message.encode()).hexdigest() # 获取后6位为8b184b的MD5加密码 if md5[-6:] == test: return message else: print("error") counter += 1 # 代入测试 test = '8b184b' message = find_collision(test) print("Message:", message) print("MD5(Message):", hashlib.md5(message.encode()).hexdigest())
-
传入json格式的c值,并将其转化为PHP数组变量
json格式的字符串: {"a":"php","b":"mysql","c":3} //其中可以理解a为键,php为值
-
要求数组c中m的值不可以是纯数字,且需要大于2022
-
要求数组的n具有两个元素,并且第一个元素还是数组
-
通过6和7判断出,6知道数组n中需要有”DGGJ“的值,7知道数组n中不可以有“DGGJ”的值
array_search()函数 结果:如果找不到DGGJ就返回FALSE,找到返回key 分析:该函数使用的是弱比较,知道字符串开头的字符串==0,所以"DGGJ"==0 成立
综上所述:
payload:?a=1e9&b=53724&c={"m":"1e4c","n":[[1],0]}
作者:NTrack
出处:https://www.cnblogs.com/ntrack/p/17426518.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!