目录
[[GDOUCTF 2023]受不了一点](#[GDOUCTF 2023]受不了一点)
[[UUCTF 2022 新生赛]ez_upload](#[UUCTF 2022 新生赛]ez_upload)
[GDOUCTF 2023]受不了一点
1、题目
2、知识点
php代码审计、数组绕过、弱比较绕过
3、思路
打开题目,出现代码,我们进行代码审计
1、
这一段代码的意思是:POST方式上传一个gdou参数和ctf参数,且两个值不能相同,md5加密后的 值和类型要相同(也就是强比较===)
绕过方式:使用数组绕过,因为数组进行md5加密后的值为null(空)
payload:gdou[]=1&ctf[]=2
2、意思是:上传一个cookie的值为 j0k3r ,然后GET方式上传aaa参数和bbb参数,且aaa和bbb等于114514,但它们的值又不能相同
绕过方式:1、可以使用hackbar进行设置cookie,也可以BP抓包后进行修改cookie,
2、因为aaa和bbb的值是弱比较(也是就==),弱比较的意思简单来说就是只比较数值,不比较类型,也就是说 1==1a ,结果是true,但是1==a1,结果是false,假如字符串前面有数字,则转化后以前面的数值为准。
payload:?aaa=114514&bbb=114514a
设置cookie=j0k3r
3、意思是:如果GET或者POST方式没有上传flag的值或者上传flag参数的值为'flag',则返回上面两个字符串,重点是foreach()函数,这是一个遍历循环的函数,使用foreach函数遍历_POST和_GET数组,$$key用于创建与数组键名相同的变量,变量值为数组的值,'key'是数组的键,'value'是键所对应的值,上面的代码要我们上传flag参数,但是又作了限制,它的值不能为flag,传flag会调用die()函数,这里我们就得利用foreach函数,但是只有flag='flag',echo $flag才会回显flag的值
可以使用POST方式或者GET方式上传,foreach只遍历数组,_POST\[\]和_GET[]就是两个数组
例:1=flag
执行:$_GET as $key => $value
1=flag
这样1这个参数的值就是flag
之后,我们再传入flag变量,值为1(flag=1),但是1所对应的值是flag,这样就变成了flag=flag,也就绕过了flag==='flag'
payload:1=flag&flag=1
总的payload:
得到flag:NSSCTF{16e322cf-d8d2-4c6d-a37d-df03867edb65}
[UUCTF 2022 新生赛]ez_upload
1、题目
2、知识点
文件上传,apache解析漏洞
3、思路
打开题目,我们需要上传一个文件
先上传一个正常的文件
告诉我们上传的路径
接着上传一个php文件
做了限制,这里我们抓包,看看大小写这些可不可以绕过
结果不行,看到响应包的数据
这里的apache版本是2.4.10,apache存在一个解析漏洞,影响范围:2.4.0~2.4.29版本
简单来说就是apache可以解析文件后缀名后的多个点,例如xxx.jpg.php.png
会根据Content-Type的类型进行比对,从右到左
所以我们可以利用这一个漏洞,详细原理参考:文件解析漏洞------Apache文件解析漏洞_apache解析漏洞-CSDN博客
上传成功,我们访问一下页面
phpinfo()代码正常执行,说明一句话木马的代码也可以执行,使用中国菜刀进行连接
得到flag:NSSCTF{This_is_start_web_D0g}
这篇文章就先写到这里了,哪里不懂的或者哪里不足的欢迎指出