目录
1. 前言
2. 简单分析sqlmap的time-based注入
3. 深入分析一下源码
4. 闭合
5. 判断是否延时
5.1 方法一
5.2 方法二
首页 运维 安全 如何实现sqlmap time-based inject的分析

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

May 12, 2023 pm 12:10 PM
sqlmap time-based

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的分析的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Sqlmap自动化注入的示例分析 Sqlmap自动化注入的示例分析 May 13, 2023 pm 03:31 PM

使用sqlmap对dvwa进行自动化注入设置dvwa级别为low打开dvwa的SQLInjection(SQLInjection(Blind)),打开浏览器调试,输入userid并submit,查看拦截到的请求。可以看到是一条GET请求,url“http://192.168.1.222:8089/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#”我们直接放到salmap测试一下,使用-u命令-u"http://192.168.1.22

关于sqlmap的问题怎么分析 关于sqlmap的问题怎么分析 May 27, 2023 pm 01:07 PM

0x00概述近日在利用sqlmap注入测试时遇到一个奇怪的现象,高版本sqlmap无法检测出注入,但是低版本的可以测出注入,并且能跑出数据不是误报,经过对比测试和查看sqlmap源码,发现两个小坑。0x01情景重现注入点形式:json……”whereparams”:[{“name”:”keyWord”,”value”:”test”}]}可注入参数:valuesqlmap命令:pythonsqlmap.py-rsqlpk.txt–flush-session-vvsqlmapv1.2.11无法注入s

如何分析SQLMap和SQLi注入防御 如何分析SQLMap和SQLi注入防御 May 11, 2023 pm 06:37 PM

第一部分:Sqlmap使用1.1sqlmap介绍1.前边说了一些sql注入的基础语句,但是手工注入很麻烦,我们可以借助sqlmap这个强大的sql注入工具,进行数据的获取.2.sqlmap介绍(1)#sqlmap是一种开源的渗透测试工具,可以自动检测和利用SQL注入漏洞以及接入该数据库的服务器。它拥有非常强大的检测引擎、具有多种特性的渗透测试器、通过数据库指纹提取访问底层文件系统并通过外带连接执行命令。官方网站:sqlmap.org(2)#支持的数据库:MySQL,Oracle,PostgreS

SQLMAP的洋葱模式代理是怎样的 SQLMAP的洋葱模式代理是怎样的 May 26, 2023 am 09:56 AM

由于要对外网的网站进行渗透测试,但是大部分网站都有访问频率控制,一旦超过这个频率就直接禁IP。尤其是SQLMAP跑的时候,更是一片“姨妈红”,还没跑完SQLMAP就直接报错退出。于是就开始研究SQLMAP的代理模式,SQLMAP有两种代理模式,一种是普通代理(HTTP代理),一种是洋葱代理。我原本想写一下普通代理的应用,但是百度看到这篇文章已经够详细了,就不再说废话。Sqlmap扩展—外部IP代理池实现还是重点谈谈洋葱代理,一开始直接使用洋葱去做注入时候,没有报“姨妈红”,后来随着渗透的网站的增

如何实现sqlmap time-based inject的分析 如何实现sqlmap time-based inject的分析 May 12, 2023 pm 12:10 PM

1.前言sql注入如何检测的?我的回答是:在甲方做安全,sql注入检测还是比较好做的。1)报错注入检测。2)别做bool的报错注入,误报比较高。3)做基于time-based的时间注入,联系运维做上慢日志db记录,监控sleep,benchmark的关键字监控,可以在sleep的时间小数点上加上扫描任务的id号,方便定位。(p.s.这种方法能找到99%的sql注入了)因此,在做基于time-based的时间注入时,我把时间误差限制的非常苛刻。但是,@chengable在乙方做安全相关工作,基于t

sqlmap _dns注入配置方法是什么 sqlmap _dns注入配置方法是什么 May 12, 2023 pm 12:25 PM

网上针对sqlmap进行dns注入的相关文章太少,只是简单介绍了下--dns-domain参数,相关的实战文章要么就写的模糊或者一笔带过,搞的云里雾里(主要是菜,关键还没大佬带)。然后自己参考网上的方法自己重新搞了一遍。需要准备的东西,sqlmap、windows盲注一个、两个域名、一台外网服务器。某次搞事情的时候碰到一个时间盲注,碰巧是台windows的,想起dns注入的方法。在开始前我准备先用sqlmap的--sql-shell命令进行dns注入payload的测试先到burpsuite中的

sqlmap处理sign加密的思路 sqlmap处理sign加密的思路 May 14, 2023 am 11:52 AM

我对公司的APP进行测试的时候发现,我们是将所有的参数内容加上一个32位字符最后在进行MD5加密。由于APP处理的流程首先是验证sign是不是正确,如果验签失败,根本就进不去数据库,为了要使用SQLMAP对其进行测试,于是就写了一个代理数据的脚本,在拦截到数据包之后,对其参数内容和32字符进行加密替换。注:该脚本适用于公司内部系统,因为能够知道加密的流程;或者能够拿到前端JS的加密方式。首先我使用Django写了一个程序来模拟公司的系统,流程是获取POST的id和token,并加上自定义加密的字

如何使用sqlmapGetshell 如何使用sqlmapGetshell May 13, 2023 pm 06:25 PM

sqlmap读取与写入文件–file-read:从后端的数据库管理系统文件系统读取文件–file-write:编辑后端的数据库管理系统文件系统上的本地文件(从本地写入)–file-dest:后端的数据库管理系统写入文件的绝对路径(写入目标路径)可以用以上几个命令对SQL注入后的系统文件进行读写,但是前提条件是需要有可读可写的权限并且为dba权限,否则无法成功进行读写操作。以DVWA为例,在kali下搭建DVWA进行读取与写入文件操作。读取文件:查看了PHPinfo里的相关信息,使用-file-r

See all articles