目录 一、 第一步二、 第二步三、第三步四、第四步 README 一、 第一步 分析这道题,是要求使判断条件符合,然后输出flag 第一个if语句是不能直接给data赋值Welcome
README
分析这道题,是要求使判断条件符合,然后输出flag
第一个if语句是不能直接给data赋值Welcome to CTF的,否则会这样无反应:
查了下才知道这是因为有file_get_contents()函数在搞鬼
file_get_contents() 函数把整个文件读入一个字符串中。
所以这里要写成?data=data://text/plain,Welcome to CTF
我试了下?data=data://text/html,Welcome to CTF
也可以
知识点:
text/html的意思是将文件的content-type设置为text/html的形式,浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理。
text/plain的意思是将文件设置为纯文本的形式,浏览器在获取到这种文件时并不会对其进行处理。
这里就是绕过第一层判断了,开始下一层
第二层判断是if(md5($_GET['key1']) === md5($_GET['key2']) && $_GET['key1'] !== $_GET['key2'])
,就是要key1的md5与key2的md5数值和格式完全一致,同时key1不等于 key2或它们类型不相同
这里对初学者的我来说还是有点挑战性的,我先用md5碰撞脚本跑,但是跑不出结果,网上搜索了下才知道
0e绕过只能绕过弱类型比较(==),不能绕过强类型比较( ===)
md5不能加密数组,传入数组会报错,但会继续执行并且返回结果为null,
因此数组绕过不只可以绕过弱类型比较,还可以绕过强类型比较(===)
然后构造链接?data=data://text/plain,Welcome to CTF&key1[0]=123&key2[0]=345
这里就是绕过了第二层判断
if(!is_numeric($_POST['num']) && intval($_POST['num']) == 2077)
可以看出第三层判断是要用post方法输入num,使得num不是数字,且整数部分为2077
这样就可以直接上hackbar,post :num=2077abc
is_numeric() 函数用于检测变量是否为数字或数字字符串。
intval() 函数用于获取变量的整数值。
最后一层是eval()函数,这个函数的作用是返回传入字符串的表达式的结果。也就是说,将字符串当成有效的表达式来求值并返回计算结果。然而,这个题目里面的eval()就有点坑……
eval("#".$_GET['cmd']);
中,.
把#
和$_GET[cmd]
拼接起来了,即把后面的语句注释掉……
因为想到#是单行注释,我试试换行
查了下url表,发现换行url编码是%0a,构造代码cmd=%0a PHPinfo();
测试查看php信息,要记得代码后面记得加;
结束语句!
以上查找phpinfo(),但是并没有flag,那么我就用linux系统命令来一级一级地查文件
构造system('ls')
查看当前文件夹,没有flag,不碍事
继续system('ls ../')
查看父目录,还是没有
继续system('ls ../../')
还是没有flag,耐心继续找
system(‘ls …/…/…/’)再上一级目录……
终于再这个目录找到了它(flag)
构造system('cat ../../../flag')
命令查看flag
最终还是得到了flag{766210aa-f32f-4bde-a5ee-051244a8a5fd}
参考文章:
https://blog.csdn.net/weixin_42416812/article/details/90897040
Https://blog.csdn.net/wangyuxiang946/article/details/119845182
https://blog.csdn.net/weixin_46329243/article/details/113405669
来源地址:https://blog.csdn.net/wanderer__/article/details/127844996
--结束END--
本文标题: 【Web方向】 PHP代码审计 CTF题目wp1
本文链接: https://lsjlt.com/news/408920.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0