Web 漏洞挖掘实战
王昊天
螣龙安科 CEO 兼创始人
14867 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
结束语 (2讲)
Web 漏洞挖掘实战
15
15
1.0x
00:00/00:00
登录|注册

17|自动化注入神器(四):sqlmap的核心功能解析

你好,我是王昊天。
在上节课中,我们重点学习了 sqlmap 中一个非常重要的算法——页面相似度算法。相信你对页面相似度这个概念会有更加清晰的认知,不但知道它是什么含义,而且知道它是如何计算出来的。解决了这个大难点之后,我在上节课的结尾提出了一个空连接检测功能,有了它,sqlmap 就可以大大提高执行效率。完成了检测,sqlmap 就进入到实际的 SQL 注入测试阶段了。
在 SQL 注入测试阶段,系统首先会检测有哪些注入点,然后对这些注入点逐一发送合适的 payload,检测注入是否成功。如果注入成功,那么系统会将注入点存储下来,最后对它们进行输出。
这节课,我们就来正式学习 sqlmap 的 SQL 注入测试过程。

注入点检测

在 SQL 正式注入测试之前,sqlmap 会对每个目标的参数进行过滤。将那些非动态的,不存在注入可能的参数剔除掉,留下可能的注入点。这样 sqlmap 仅需要对这些可能的注入点进行正式的注入测试即可。

动态参数检测

我们首先来看 sqlmap 是如何检测动态参数的。这部分代码依旧在 start 函数中,紧接着空连接检测出现。
# sqlmap首先对所有可用于注入测试的参数进行简单的优先级排序。
parameters = list(conf.parameters.keys())
# 定义测试列表的顺序。(从后到前)
orderList = (PLACE.CUSTOM_POST, PLACE.CUSTOM_HEADER, PLACE.URI, PLACE.POST, PLACE.GET)
# 对测试参数排好序之后,系统开始对参数进行过滤操作。
proceed = True
for place in parameters:
skip = # ...
if skip:
continue
if place not in conf.paramDict:
continue
paramDict = conf.paramDict[place]
paramType = conf.method if conf.method not in (None, HTTPMETHOD.GET, HTTPMETHOD.POST) else place
# ...
for parameter, value in paramDict.items():
if not proceed:
break
# 经过过滤,将该参数加入到测试过的参数中,防止重复测试。
kb.testedParams.add(paramKey)
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

SQL注入是一种常见的网络攻击方式,而sqlmap作为一款自动化注入测试工具,具有强大的功能。本文深入解析了sqlmap的核心功能,包括注入点检测、payload构造和注入测试过程。在注入点检测中,sqlmap通过动态参数检测和启发式注入测试来筛选可注入的参数,提高了运行效率。在注入测试过程中,sqlmap根据目标数据库类型和用户配置选择合适的测试用例,并进行布尔注入、报错注入、时延注入和联合注入等测试。通过对页面相似度的判断,sqlmap能够准确判断注入结果。总之,本文通过对sqlmap源代码的深入分析,帮助读者全面了解了sqlmap的原理和功能,对于想要深入了解SQL注入测试的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Web 漏洞挖掘实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • leslie
    应当会是在算法效率和资源使用方面,python被人诟病最多的就是资源消耗。
    2022-01-27
    1
  • ifelse
    2023-03-15归属地:浙江
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部