背景
sqlmap作为一个老牌的成熟的SQL漏洞扫描工具,在SQL注入自动化检测领域独占一壁江山。而现在的SQL注入检测往往是通过被动扫描检出,再通过sqlmap或者手工注入的方式进行进一步的漏洞确认和利用。在这种情形下,我们就需要开发一款应用于被动扫描场景下的SQL注入检测工具。而Yakit作为一个综合渗透测试平台,提供了用户友好型的API接口,可以很方便的实现SQL漏洞检测功能,和SQL注入启发式检测所需的核心功能。
sqlmap中一些概念的介绍
在sqlmap中有一个很重要的概念就是页面相似度,这个页面相似度基于python中自带的difflib
模块
sqlmap 主要使用其SequenceMatcher
这个类。以下是关于这个类的简单介绍:
This is a flexible class for comparing pairs of sequences of any type, so long as the sequence elements are hashable. The basic algorithm predates, and is a little fancier than, an algorithm published in the late 1980’s by Ratcliff and Obershelp under the hyperbolic name “gestalt pattern matching.” The idea is to find the longest contiguous matching subsequence that contains no “junk” elements (the Ratcliff and Obershelp algorithm doesn’t address junk). The same idea is then applied recursively to the pieces of the sequences to the left and to the right of the matching subsequence. This does not yield minimal edit sequences, but does tend to yield matches that “look right” to people.
简单来说这个类使用了 Ratcliff 和 Obershelp 提供的算法,匹配最长相同的字符串,设定无关字符(junk)。在实际使用中,他们应用最多的方法应该就是ratio()
。
根据文档中的描述,这个方法返回两段文本的相似度,相似度的算法如下:我们假设两段文本分别为text1
与text2
,他们相同的部分长度总共为M
,这两段文本长度之和为T
,那么这两段文本的相似度定义为2.0 * M / T
,这个相似度的值在 0 到 1.0 之间。
PageRatio 的小例子
我们通过上面的介绍,知道了对于abcdefg
和abce123
我们计算的结果应该是2.0 * 4 / 14
所以计算结果应该是:
WAF检测
在sqlmap中存在WAF检测,简单来说就是在请求中携带一些可能被WAF拦截的敏感字符。以下为sqlmap中检测目标主机潜在WAF的payload。
" AND 1=1 UNION ALL SELECT 1,NULL,'<script>alert(\"XSS\")</script>',table_name FROM information_schema.tables WHERE 2>1--/**/; EXEC xp_cmdshell('cat ../../../etc/passwd')#"
如果目标主机存在WAF,那返回的HTTP状态码和响应体和正常请求的响应状态码和响应体就会不同,结合PageRatio进行分析就能比较容易的判断目标主机是否存在WAF。这里WAF检测的主要目的是提示渗透测试人员谨慎使用payload。
转型分析
在实际的SQL注入测试和web开发中,经常遇到强制转型,在从请求中收到请求参数后往往会对其执行intval()或是类似的函数,也就是说对于开发者来说这个参数是被当成一个int来使用的,当我们尝试对该参数进行SQL注入时,显然输入的会是字符串,因此后端收到请求参数后在尝试对其进行类型转换的过程中就会报错。而这也意味着这个参数我们无法注入。参考sqlmap的注入流程图
通过将参数转型前置放在实际注入漏洞检测前可以省去无用的请求数,因为在检测到参数转型后就没必要继续接下来的检测了。
什么是启发式检测
相信用过sqlmap的读者都注意到sqlmap在扫描时会提示heuristic (basic) test shows that GET parameter 'xxx' might (not) be injectable
提示启发式检测表明某个参数似乎无法注入。那么这个所谓的启发式检测的原理是什么呢。我们在刚学SQL注入的时候,都会先学习去先去寻找闭合SQL语句的符号,再通过闭合外的内容形成逃逸,从而执行我们输入的SQL语句。而这个启发式检测就是寻找SQL语句闭合方式的过程,它会根据参数类型,例如数字型和字符串型,采取不同的闭合方式尝试,例如对于数字型参数采用无闭合的方式,对于字符串采取常见的单引号闭合去检测。在sqlmap中有一个常量
HEURISTIC_CHECK_ALPHABET = [`"`, `'`, `)`, `(`, `,`, `.`]
这个常量存储的就是常见的闭合符号。通过这种办法去猜测SQL语句的闭合边界,配合一定的Bool表达式,构成所谓的positive和negative请求,也就是语句条件为真和假的情况,如果positive请求和原请求的相似度一致,而negative和positive相似度不一致,那么很大概率这个参数就是存在注入的。这里之所以强调很大概率是因为,尽管对于两种条件的相似度不一致,我们现在还没有足够证据去实锤这个点就是存在SQL注入。表现在sqlmap中就是上文提示中的might (not) be injectable
。
进一步确认是否存在注入过程中的优化
检测顺序优化
进一步确认就是去检测各种常见的SQL注入类型,诸如时间盲注(Time-Based Blind),有回显的报错注入(In-Band Error Based),有回显和无回显的联合注入(Inband/Outband Union)。在上一步我们通过启发式检测确认了闭合方式,现在在实际检测时我们要考虑检测的先后顺序,在这里可以做一个短路处理,比如我们首先检测报错注入,如果存在报错注入,那么后面的注入就可以通过报错注入的信息获取对应的SQL数据库类型,从而减少总请求数量。
检测方式优化
同时,我们要明确一点就是能不用sleep检测就不要用sleep进行检测,sleep检测在遇到性能较差的单线程服务器时可能会造成意想不到的阻塞和性能问题,同时在一些orm或者SQL框架中会对查询时间进行限制,一旦查询超时就会提前返回,从而导致漏检的问题出现。
所以我们尽可能要采用正则去匹配返回内容中的信息去匹配,这样不仅可以提高效率,也能保证结果精确性,同时在目标无回显的情况下保留sleep检测方法作为备用方案。
联合注入类型的检测
联合注入在常见的SQL注入类型中属于比较复杂的类型,在开发插件中借鉴了sqlmap中的做法,首先尝试使用order by进行检测,同时采用二分法进行检测。
在二分法无法检测,或者目标完全无回显的情况下,采用遍历法检测,即从lowerCount
到upperCount
这个区间,构造Payload 为UNION SELECT (NULL,) * [COUNT]
的请求,这些请求的对应 RATIO(与模版页面相似度)会汇总存储在ratios
中,同时items
中存储列数 和 ratio
形成的tuple
,经过一系列的算法,尽可能寻找出与众不同(正确猜到列数)的页面。
这里插件为了避免过于复杂,采取了UNION SELECT sleep(x)
的方法进行最后的辅助检测。也就是说对于UNION注入,我们首先尝试运用ORDER BY
进行检测,在其失效的情况下利用ratio去找最与众不同的页面,去判定行数,如果ratio还不起作用,便使用时间盲注的方式进行辅助检测。
使用演示
-
首先启动MITM劫持
-
勾选左侧插件以加载插件
-
将模式修改为被动日志界面,这样才能看到MITM插件的扫描输出,浏览器刷新,重新访问存在漏洞的靶场页面,可以看到输出信息
-
查看上方的风险与漏洞
可以看到检测到了时间盲注和联合注入
插件测试结果
pentesterlab的SQL靶场一共有9关,具体的测试报告如下
靶场案例 | 是否检测出漏洞 | 漏洞类型 | 说明 |
example1 | ✔️ | 字符型单引号边界闭合,时间盲注,联合注入 | 无 |
example2 | ✔️ | 字符型单引号边界闭合,时间盲注,联合注入 | 无 |
exmaple3 | ✔️ | 字符型单引号边界闭合,时间盲注,联合注入 | 无 |
example4 | ✔️ | 数字型无边界闭合,时间盲注,联合注入 | 无 |
example5 | ✔️ | 数字型无边界闭合,时间盲注,联合注入 | 无 |
example6 | ✔️ | 数字型无边界闭合 | WAF规则为必须以数字结尾,此处需要手工进一步测试 |
example7 | ✔️ | 数字型无边界闭合,时间盲注,联合注入 | 无 |
example8 | ❌ | 未检出 | 使用了` back tick作为闭合符 |
example9 | ✔️ | ORDER BY无边界闭合 |
题外话
初入计算机行业的人或者大学计算机相关专业毕业生,很多因缺少实战经验,就业处处碰壁。下面我们来看两组数据:
- 2023届全国高校毕业生预计达到1158万人,就业形势严峻;
- 国家网络安全宣传周公布的数据显示,到2027年我国网络安全人员缺口将达327万。
一方面是每年应届毕业生就业形势严峻,一方面是网络安全人才百万缺口。
6月9日,麦可思研究2023年版就业蓝皮书(包括《2023年中国本科生就业报告》《2023年中国高职生就业报告》)正式发布。
2022届大学毕业生月收入较高的前10个专业
本科计算机类、高职自动化类专业月收入较高。2022届本科计算机类、高职自动化类专业月收入分别为6863元、5339元。其中,本科计算机类专业起薪与2021届基本持平,高职自动化类月收入增长明显,2022届反超铁道运输类专业(5295元)排在第一位。
具体看专业,2022届本科月收入较高的专业是信息安全(7579元)。对比2018届,电子科学与技术、自动化等与人工智能相关的本科专业表现不俗,较五年前起薪涨幅均达到了19%。数据科学与大数据技术虽是近年新增专业但表现亮眼,已跻身2022届本科毕业生毕业半年后月收入较高专业前三。五年前唯一进入本科高薪榜前10的人文社科类专业——法语已退出前10之列。
“没有网络安全就没有国家安全”。当前,网络安全已被提升到国家战略的高度,成为影响国家安全、社会稳定至关重要的因素之一。
网络安全行业特点
1、就业薪资非常高,涨薪快 2021年猎聘网发布网络安全行业就业薪资行业最高人均33.77万!
2、人才缺口大,就业机会多
2019年9月18日《中华人民共和国中央人民政府》官方网站发表:我国网络空间安全人才 需求140万人,而全国各大学校每年培养的人员不到1.5W人。猎聘网《2021年上半年网络安全报告》预测2027年网安人才需求300W,现在从事网络安全行业的从业人员只有10W人。
行业发展空间大,岗位非常多
网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…
职业增值潜力大
网络安全专业具有很强的技术特性,尤其是掌握工作中的核心网络架构、安全技术,在职业发展上具有不可替代的竞争优势。
随着个人能力的不断提升,所从事工作的职业价值也会随着自身经验的丰富以及项目运作的成熟,升值空间一路看涨,这也是为什么受大家欢迎的主要原因。
从某种程度来讲,在网络安全领域,跟医生职业一样,越老越吃香,因为技术愈加成熟,自然工作会受到重视,升职加薪则是水到渠成之事。
黑客&网络安全如何学习
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
1.学习路线图
攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。
(都打包成一块的了,不能一一展开,总共300多集)
因篇幅有限,仅展示部分资料,需要保存下方图片,微信扫码即可前往获取
3.技术文档和电子书
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。
因篇幅有限,仅展示部分资料,需要保存下方图片,微信扫码即可前往获取
4.工具包、面试题和源码
“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。
还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。
因篇幅有限,仅展示部分资料,需要保存下方图片,微信扫码即可前往获取
最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。
这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。
参考解析:深信服官网、奇安信官网、Freebuf、csdn等
内容特点:条理清晰,含图像化表示更加易懂。
内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…
因篇幅有限,仅展示部分资料,需要保存下方图片,微信扫码即可前往获取