逗号绕过以及二次注入
我们打开页面,发现只有一个登录页面,尝试进行sql闭合测试,发现失败,所以用dirsearch扫描目录,发现有
1 | register.php、index.php以及login.php |
所以猜测可能是二次注入,即在register.php页面注册,写入sql语句,程序会将它写入存入数据库中,然后在login.php页面登录时会从数据库中刚刚写入的sql语句,并进行读取,然后回显,所以我们可以测试一下,在register.php页面构造
1 | username:0'and '1 |
然后在login.php页面登录后,发现有回显0,所以证明是二次注入,然后经过测试,发现information_schema被过滤,而且逗号也被过滤,所以我们可以使用
1 | 0'+ascii(substr(database() from 1 for 1))+'0; |
来绕过逗号,其中+在sql语言中是运算符,而from 1 for 1,意思是在字符串中的第一个位置取出一个字符出来,相当于
1 | ascii(substr(database(),1,1)) |
而对于information_schema的过滤,我们可以猜测flag在flag表中,所以我们可以构造
1 | 0'+ascii(substr((select * from flag) from 1 for 1))+'0; |
来读取flag,所以exp
1 | import requests |