CG-CTF
https://cgctf.nuptsast.com/challenges#Web
续上~
第十六题:bypass again
代码分析:
当a不等于b,且a和b的md5值相同时,才会返回flag值。
思路①:同第二题的思路,因为是==比较,只判断值是否相等,不判断类型是否相同。在PHP语言中,如果数据类型不同先转换为相同的类型再进行比较,而PHP在处理哈希字符串时,会把0E(或0e)开头的哈希值解释为0。所以如果两个值通过md5后值都以0E(或0e)开头,其值就会相等;
构造a=s878926199a,b=s155964671a;
取得flag(干杯~);
思路②:同第十五题思路,PHP中md5()函数并不能处理数组数据类型,在遇到数组的时候会返回NULL,其值就会相等。(且这种方法在===比较中也可以适用;
取得flag(干杯~);
思路③:MD5本质上是使用哈希算法的一种散列函数,一个MD5理论上是可能对应多个原文的,原理是MD5是有限多个的,而原文是无限多个的;
此处举个不准确但可以辅助理解的例子:
1+7=8,但是只拿到8并不能推出1+7,但是我们可以构造2+6,2*4等使其最终的值相等。
那么我们只要找到两个MD5值相同的原文(MD5散列碰撞),这道题就能解决了。
第十七题:变量覆盖
变量覆盖学习:
本题查看source.php;
只需要使$pass和$password_123的值相同即可,用burp抓包添加password_123参数;
取得flag(干杯~);
第十八题:PHP是世界上最好的语言
题目消失,去网上找到原题:
代码分析:id的值与hackerDJ不同,而URL解码后的id与hackerDJ相同;
思路:对hackerDJ进行两次URL加密即可;
第十九题:伪装者
分析:源代码啥也没有,只能在本地登录,说明对IP做了限制,那么尝试在HTTP头部中进行修改头部信息以达到伪装成本地登录;
思路①:增加X-Forwarded-For请求头部,其格式为:X-Forwarded-For: client, proxy1, proxy2;
然而好像没有达成目的,可能后端验证的不是这个头部;
思路②:client-ip;
取得flag(干杯~);
第二十题:Header
题目消失,上网找了一下原题;
咳咳,评价刁钻;
第二十一题:上传绕过
点击Submit;
提示仅支持上传jpg,gif,png后缀的文件;
尝试上传test.jpg文件;
提示必须上传成后缀名为php的文件;
上传php文件;
用burp拦包;
思路:如果我们上传php文件,第一步就会报错,那么我们需要判断它是如何识别后缀的,可以从返回的包中看到,是根据./uploads目录下的basename来进行识别的,可以尝试进行截断;
首先在/uploads/后面增加1.php;
发现basename处变为1.phptest.jpg;尝试用00截断,在1.php后面增加一个空格,然后在Hex下将20改为00;
取得flag(干杯~);
未完待续~