如何实现sqlmap time-based inject的分析

1. 前言

sql注入如何检测的?

我的回答是:在甲方做安全,sql注入检测还是比较好做的。

1) 报错注入检测。

2) 别做bool的报错注入,误报比较高。

3) 做基于time-based的时间注入,联系运维做上慢日志db记录,监控sleep,benchmark的关键字监控,可以在sleep的时间小数点上加上扫描任务的id号,方便定位。(p.s. 这种方法能找到99%的sql注入了)

因此,在做基于time-based的时间注入时,我把时间误差限制的非常苛刻。但是,@chengable在乙方做安全相关工作,基于time-based的时间注入一般是做不了的。据了解,他主要是先过滤存在注入点的情况,再加上sqlmapapi.py检测。早之前我也用sqlmap做过检测,遇到的问题就是误报多、扫描时间久,然后尝试了sqlmapapi.py,问题还是扫描时间过久,而且它不支持json格式的注入(详情)。但是,sqlmap的时间注入还是比较准的,如果不想用sqlmapapi.py怎么办?这里就把sqlmap的time-based注入的逻辑搬出来。

2. 简单分析sqlmap的time-based注入

吐槽一下:sqlmap的代码不规范、难看、量又大。之前有大佬推荐我阅读sqlmap源码,学习一波,现在想想还好我放弃的早。

所以,偷懒不想看源码加上–technique=T -v 3 就先看看sqlmap检测payload。

如何实现sqlmap time-based inject的分析

如何实现sqlmap time-based inject的分析

如何实现sqlmap time-based inject的分析

貌似偷懒还找到了一些门道,从截图中可以看到:

首先,sqlmap塞入了sleep的注入payload:

先是塞入了 sleep(5),发现执行了之后;又塞入sleep(0),最后又塞入sleep(5)。

然后猜测一下,大概的检查思路就是先sleep(5),秒延时成功的话,再sleep(0)。如果没有发现延时现象,继续sleep(5),此时如果再次延时成功,就出现认为可能有注入的提醒:

如何实现sqlmap time-based inject的分析

最后,很巧妙的是,sqlmap为了防止出现误报使用了if 的判断条件来排除误报,从上图可以看到sqlmap分别让等式成立测试两次,又让等式不成立测试两次,根据秒延时情况来判断误报。

3. 深入分析一下源码

回归源码看看:根据前面的一些关键字,我们直接到代码里面去看看。比如搜索之前出现*appears to be* 看到名列前茅步的代码:

sqlmap/lib/controller/checks.py:

如何实现sqlmap time-based inject的分析

这里发现,和前面猜测的八九不离十。

再找一下payload在哪里,特别是if条件的payload,还是用关键字查询,发现在这里:

sqlmap/xml/payloads/time_blind.xml:

如何实现sqlmap time-based inject的分析

可以看到每个if条件的payload都在vector这个字段中。

4. 闭合

闭合注入点前面的字符是能否注入的关键。

观察到 tools/sqlmap/xml/boundaries.xml,所以,我们还需要参考这里面的多种闭合情况:

如何实现sqlmap time-based inject的分析

5. 判断是否延时

5.1 方法一

参考之前awvs的注入,我想到一个比较容易理解的检测方法。取6次无注入payload正常测试的消耗时间,计算平均值为原生请求时间(ori_time)。

当注入时间为sleep(5),将当前时间减去ori_time,作为sleep_time。如果sleep_time小于4,认为延时没有发生。(这里考虑到ori_time 受到网络影响导致变大,所以把阀值调到了四秒)

当注入时间为sleep(0),将当前时间减去ori_time,作为sleep_time。如果sleep_time大于2,说明延时有误报。

5.2 方法二

再看一下sqlmap的代码,人家用了一个我搞不懂的数学问题(详情)

跟进:Request.queryPage —>wasLastResponseDelayed 就可以看到逻辑为:取30次的无注入payload正常测试的消耗时间,将他们放到kb.responseTimes中。计算30次的标准差为deviation,根据deviation计算出一个最慢的响应时间为lowerStdLimit:

如何实现sqlmap time-based inject的分析

它的值为30次的平均值加上TIME_STDEV_COEFF*标准差(deviation),至于TIME_STDEV_COEFF,设置为7可以使得判断的准确度在99.9999999997440%。

最后判断当前这次请求的消耗时间是不是大于lowerStdLimit,大于说明延时发生,小于说明没有(另外,当lowerStdLimit小于0.5秒时候,lowerStdLimit取0.5秒)。

感性告诉我该选方法一,理性告诉我该选方法二。我还是选择方法二,测了一下这个注入点(详情)。很稳定的扫描出了注入漏洞。

关于sqlmap time-based inject 分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

文章标题:如何实现sqlmap time-based inject的分析,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/28377

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云认证作者
上一篇 2022年9月21日 下午10:58
下一篇 2022年9月21日 下午11:00

相关推荐

  • 怎么使用Python处理KNN分类算法

    KNN分类算法的介绍 KNN分类算法(K-Nearest-Neighbors Classification),又叫K近邻算法,是一个概念极其简单,而分类效果又很优异的分类算法。 他的核心思想就是,要确定测试样本属于哪一类,就寻找所有训练样本中与该测试样本“距离”最近的前K个样本,然后看这K个样本大部…

    2022年9月8日
    48200
  • php如何对数组逆向排序且不保留键名

    实现步骤:1、利用array_reverse()函数对数组进行逆向排序,语法“array_reverse(原数组)”,会返回一个逆向数组;2、使用array_values()函数重置逆向数组的键名,语法“array_values(逆向数组)”,被返回的数组将使用数值键,从0开始且以1递增。 本教程操…

    2022年9月18日
    42300
  • word如何替换文字

    word替换文字的方法: 1、首先打开你的word文档,然后准备开始将里面的词汇进行替换。 2、然后点击“编辑”菜单,选择“查找”选项。 3、此时会出现“查找和替换”对话框,选择“查找”选项卡, 在“查找内容”的输入框中输入你要替换的词,这里举例“华为”。 4、然后勾选“突出显示所有在该范围找到的项…

    2022年9月20日
    1.2K00
  • Redis变慢的原因是什么及怎么排查

    原因1:实例内存达到上限 排查思路 如果你的 Redis 实例设置了内存上限 maxmemory,那么也有可能导致 Redis 变慢。 当我们把 Redis 当做纯缓存使用时,通常会给这个实例设置一个内存上限 maxmemory,然后设置一个数据淘汰策略。而当实例的内存达到了 maxmemory 后…

    2022年9月10日
    81800
  • windows浩辰cad看图王可以画图吗

    浩辰cad看图王可以画图吗 答:浩辰cad看图王有简单的画图功能。 1、浩辰cad看图王主要还是用来看图的,无法用它代替autocad来画图。 2、不过其中有一些简单的画图功能。 3、在绘图工具下,可以在图纸中添加直线、文字、圆形、矩形等图形。 4、还可以添加线性、对齐、角度、坐标、直径、半径等数据…

    2022年9月21日
    50500
  • windows丢包率高如何解决

    解决方法: 1、有些情况是因为线路故障导致的,这种情况需要和线路的供应商来进行解决。 2、对于设备方面来说,很多都是设置不当和网络接口的光纤收发器故障导致的。 3、还有就是网络的问题,比如病毒和网线的连接距离太长导致的网络故障, 还有操作系统的问题,比如网卡问题和网络运营线路问题,可以尝试使用pin…

    2022年8月29日
    1.2K00
  • vlookup函数老是出错#n/a如何解决

    解决方法 1、首先打开要引用的数据表,然后把要查找的对象拷贝到这个表中,位置自己根据需要放置就可以了。 2、把光标定位在K2栏,在这里输入公式,有时记不熟的,可以在上面菜单栏里去找。 3、在公式里点击查找与应用右边的下拉箭头,找到最下边的vlookup函数点击。 4、这时出现函数参数对话框,在这里可…

    2022年9月21日
    66100
  • 路由器wps有哪些优缺点

    路由器wps是“Wi-Fi安全防护设置”的意思;wps是“Wi-Fi Protected Setup”的简称,是由“Wi-Fi”联盟所推出的全新“Wi-Fi”安全防护设定标准,用于简化“Wi-Fi”无线的安全设置和网络管理,支持个人识别码模式和按钮模式。 本教程操作环境:windows10系统、DE…

    2022年9月6日
    78900
  • 如何进行APT41多漏洞网络攻击的分析

    漏洞利用 CVE-2019-19781 (Citrix Application Delivery Controller [ADC]) 2020年1月20日开始,APT41使用IP地址66.42.98 [.] 220尝试利用漏洞CVE-2019-19781(于2019年12月17日发布)。 时间线: …

    2022年9月15日
    56400
  • JavaScript怎么取消请求

    取消 XMLHttpRequest 请求 当请求已经发送了,可以使用 XMLHttpRequest.abort() 方法取消发送,代码示例如下: const xhr = new XMLHttpRequest();xhr.open(‘GET’, ‘<http://127.0.0.1:30…

    2022年9月15日
    65100
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部