SQL 注入中的“盲注”是什么?

一、不是所有的注入点都会直接回显注入结果

通常来讲,如果注入点是出现在查询、搜索等语句中,那么注入拿到的数据很可能直接从接口就返回了,这就好比你问张三:“你叫什么名字?”,张三回答:“在下就是知名《刑法》实践者张三同志”。

但是很多时候,注入点是不会直接回显你所注入的语句查询到的结果的,比如说你在一个用来删除数据的接口里成功注入语句,但这毕竟是删除语句,因此它不会返回任何查询的结果。

那么,这种情况下,怎样才能把查询的结果带出来呢?这就需要“盲注”了。

二、盲注的一般思路

在需要盲注的场景下,直接返回已经是不可能的了,但是我们还可以采用别的方法来拿到结果。

1. DNSlog 盲注

DNSlog 的玩法是非常“骚气”的,因为在网络应用中, DNS 查询是一个很常见的行为,甚至有些防火墙都会对其网开一面,因此在绝大部分渗透场景都是可以用 DNS 往外“夹带私货”的,比如 XSS、解析漏洞等等。

部分 SQL 注入点也支持 DNSlog 外带查询结果,具体详见这一片锦囊:https://ke.yijincc.com/wechat/info/detail?id=76 

2. 时间盲注

假如有一群“理想”的美女,你拿到了她们的微信,然后你挨个给她们发消息,以测试她们对你的印象如何。那么一种假设就是:如果对方对你有意思的话,就会秒回信息——看到没有,即便她们回复的都是同样的信息“好的”,但是从时间长短你也可以推测其他信息。

当然,女生的心情比较难猜,而且人家可能正好玩手机、心情好所以秒回,也有可能是正在考试所以隔半天才回复,这些都是“不理想”的情形,会极大地影响我们的判断,所以上面所假设的才是“理想”的美女。

而数据库就不一样了,它永远是理想的,如果没出问题的话它们是“有求必应”的——因此我们可以构造大量表达式,每一个表达式只确定一个因素,通过简单的二分法就可以拿到精确的信息。

3. 报错盲注

作为一种程序,数据库理应在出错的时候提供详尽的错误报告,来帮助程序员定位到具体的问题,如果程序员没有将这些错误信息隐藏起来,而是任其暴露在了用户的眼前,那么用户就有可能从中推测出数据库的其他信息。

最常见的一种,当你查询一个不存在的表名字的时候,数据库可能会告诉你:数据库“用户表”中不存在名为“学生”的表。虽然查询是失败的,但是我们得知了一个信息——当前数据库的名字是“用户表”。

除了这种数据库主动暴露的内容之外,像 updatexml、 floor、extractvalue 等函数,如果善加利用,就可以利用报错注入场景获得更多更详尽的信息。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值