强网杯学习

比赛时出去爬(liu)山(han)了,借着服务器还没关赶紧玩一玩,学习一波新姿势~

web签到

这题主要考察php的弱类型,要求变量原值不同但 md5 或 sha1 相同。
PHP转换的规则的是:若字符串以数字开头,则取开头数字作为转换结果,若无则输出0。

  • 1、==判断
if($_POST['param1']!=$_POST['param2'] && md5($_POST['param1'])==md5($_POST['param2'])){
                            die("success!");
                        }

240610708 和 QNKCDZO md5 值类型相似,但并不相同,在”==” 相等操作符的运算下,结果返回了 true。只需要找到md5值为0exxx(xxx全为数字,共30位),(4个都可以通过的值:240610708、QNKCDZO、aabg7XSs、aabC9RqS),在“==”相等操作符的运算下,结果都返回true。

  • 2、===判断
if($_POST['param1']!==$_POST['param2'] && md5($_POST['param1'])===md5($_POST['param2'])){
                            die("success!");
                        }

Md5 和 sha1 对一个数组进行加密将返回 NULL;而 NULL===NULL 返回 true,所以可绕过判断。

因此第二步输入param1[]=QNKCDZO¶m2[]=240610708

  • 3、构造碰撞
if((string)$_POST['param1']!==(string)$_POST['param2'] && md5($_POST['param1'])===md5($_POST['param2'])){
                    die("success!);}

这里限定了string的类型,无法使用php黑魔法绕过,用fastcoll_v1.0.0.5_MD5伪造碰撞工具生成两个md5一样的文件上传。

官方给的writeup通过md5的生日攻击,构造了如下payload:param1=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3Bu%93%D8Igm%A0%D1U%5D%83%60%FB%07%FE%A2¶m2=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB%07%FE%A2

Three hit

这道题考查的是Mysql的二次注入,同时注意mysql中的特殊库information_schema的表的含义。

强网杯学习_第1张图片
image.png

题目注册时对age做了数字限制,想到 is_numeric函数十六进制绕过

环境关了,哭唧唧.......留坑待补。

你可能感兴趣的:(强网杯学习)