[NCTF2019]SQLi(regexp&%00截断)
我们先对题目进行扫描,发现扫出来个robots.txt
我们进行访问
出现黑名单和得到flag的条件,我们要获得admin账号的密码
我们可以注意到没有对\
进行过滤,空格过滤可以替换为`/**/,末尾多出的 ‘ 可以用%00截断,所以我们可以构造如下payload来使查询为真
1 | username=\&passwd=||/**/1;%00 |
注意:我们不能总结在登录框里面敲%00,那样会导致%00被转义而失去作用,所以我们抓包进行改写
但是查询成功会跳转到welcome.php界面,那玩意就是个404页面,所以我们还是要获取admin的密码
我们可以用以下payload写脚本(注意是正则匹配,所以需要限定字符串开头,否则在字符串中找到也会算为真):
1 | username=\&passwd=||/**/passwd%09regexp"^y";%00 |
脚本
1 | import requests |
原理
1 | 页面上回显的sql语句 |
得到密码
1 | you_will_never_know7788990 |
由于我们只要密码等于admin的密码,用户名不做要求,我们直接随便写个用户名,再吧密码写上去就得到flag了