文章目录
温故而知新,访问 官网,下载最新版本 1.5.8。
概述8个目录文件
目录文件中,.github、extra、thirdparty 三个目录先不看,lib目录在审计源码时才看,有4个目录当作重点仔细看看。
1.doc目录,主要包含软件说明文档。
2.plugins插件库,例如:在使用sqlmap连接数据库的时候需要用到其中的一些不同数据库的python连接类,以及各种数据库的信息和数据库通用事项等
3.tamper脚本,包含了64个绕过脚本,例如:编码绕过,注释绕过等等
4.data 这个目前在老版本的sqlmap中是没有的,在目前最新版本的1.4.5.28中存在 ,其实也没有变什么就是把原来的部分文件夹移动到了这个data文件夹里面,目前data文件夹里面有如下文件夹:
html, procs, shell, txt, udf, xml
html 里面有个index.html文件,打开是关于sqlmap的各种选项
procs 包含了mssqlserver、 mysql、oracle和postgresql的触发程序,存放了一些SQL语句,主要涉及DNS带外传输数据的一些数据库命令
shell 注入成功时使用的 4 种shell,这些shell是经过加密的
txt 包含一些字典,例如:用户浏览器代理,表,列,和关键字等
udf UDF提权用的dll或者so文件,包含了用户自己自定义的攻击Payload
xml 包含了多种数据库的注入检测载荷、旗标信息以及其他信息。
另外4个目录 | 说明 |
---|---|
.github | 代码管理目录 |
lib | 封装方法,包含了sqlmap的多种连接库 |
extra | 额外功能,例如发出声响(beep)、运行cmd、安全执行、shellcode等 |
thirdparty | 第三方的插件,例如优化、保持连接、颜色等。 |
详细说明4个重点目录
软件说明doc
最好看的是软件说明,其次才是软件架构和执行流程。doc文档有两个有意思的文档,分别是软件说明和第三方插件说明,这次看看软件说明书。
文件 | 说明 |
---|---|
doc/translations/README-zh-CN.md | 软件说明书 |
doc/THIRD-PARTY.md | 第三方插件说明 |
软件说明给出了项目的 Wiki地址,打开 Wiki 在右侧菜单栏可以看到有 13 页相关项目说明。简单翻了一下,用表格列出个人觉得值得仔细阅读的网页。
序号 | 说明 |
---|---|
one | 作者推特 |
two | 软件参数详细说明 |
three | 演示截图 |
图示如下
流程图代码
graph LR
D(软件说明目录_doc)
D1(README-zh-CN.md)
D2(THIRD-PARTY.md)
D-->|软件说明书|D1
D-->|第三方插件说明书|D2
D11(推特)
D12(参数全解)
D13(演示截图)
D1-->D11
D1-->D12
D1-->D13
插件库plugins
只有两个文件,分别是数据库信息大全 dbms 和 通用设置和操作 generic。
作者分别给 27
个数据库软件定制了连接、语法、文件系统等 6 个文件,放置在 dbms
目录。
各数据库统一有 6 个文件,以 dbms/mysql 目录为例,对比着 generic 通用文件和其它数据库目录文件,看看具体数据库 mysql 的文件。(发现作者还为SQLMap编写了异常处理文件,给人一种很全面的感觉)
流程图代码
graph LR
E11(mysql)
E111(connector.py)
E112(enumeration.py)
E113(filesystem.py)
E114(fingerprint.py)
E115(syntax.py)
E116(takeover.py)
E11-->|引用通用连接对象和特定连接|E111
E11-->|引用通用枚举对象并pass/枚举banner信息|E112
E11-->|使用5种读写文件方法|E113
E11-->|指纹和版本识别|E114
E11-->|特定功能性语法|E115
E11-->|OS 控制|E116
generic 除了有数据库插件 6 个文件的通用文件以外,还有 6 个有效文件。
generic其它文件 | 说明 / all for plugins |
---|---|
custom.py | 执行sql语句和sql-shell |
databases.py | fetch database、table、statement |
entries.py | 定义枚举项 |
misc.py | 定义混杂的功能 for plugins |
search.py | 查找功能 for plugins |
users.py | 获取当前数据库用户、口令哈希、用户权限等 |
第一弹先到这儿。
绕过脚本tamper
目前最新版有 64 个绕过脚本,打开 0eunion.py 文件,有注释有代码。
def tamper(payload, **kwargs):
"""
Replaces instances of <int> UNION with <int>e0UNION
Requirement:
* MySQL
* MsSQL
Notes:
* Reference: https://media.blackhat.com/us-13/US-13-Salgado-SQLi-Optimization-and-Obfuscation-Techniques-Slides.pdf
>>> tamper('1 UNION ALL SELECT')
'1e0UNION ALL SELECT'
"""
return re.sub(r"(?i)(\d+)\s+(UNION )", r"\g<1>e0\g<2>", payload) if payload else payload
列表格进行说明:
事项 | 说明 |
---|---|
必备条件 | 数据库MySQL、MsSQL |
替换内容 | <int> UNION --> <init>e0UNION |
举例 1 UNION ALL SELECT | 替换后 1e0UNION ALL SELECT |
正则替换函数 | re.sub(pattern, repl, string) |
查看第二个文件 apostrophemask.py ,注释都很详细
事项 | 说明 |
---|---|
替换内容 | 单引号’ -> unicode编码 %EF%BC%87 |
正则替换函数 | payload.replace(’’’, “%EF%BC%87”) |
举例 1 AND ‘1’='1 | 替换后 1 AND %EF%BC%871%EF%BC%87=%EF%BC%871 |
查看第三个文件 apostrophenullencode.py ,把单引号 '
替换成 非法双unicode格式 %00%27
,可以绕过吗有待测试,非法双unicode 又是什么?
绕过脚本这一块,对于 字符变换
和 正则绕过
学习来说是一块宝藏,可以提供很多用例参考,字符集绕过这块大多是相通的。
在SQLMap软件里,调用 tamper 的格式是 --tamper=xx.py, xx.py
,想要熟练掌握就要熟悉这 64 个脚本,留坑,数据分析时熟悉。
data数据目录
数据目录有 6 个文件夹,其中 html 文件夹里只有 index.html 显示的是 SQLMap Web端的 Demo,猜测作者可能想为 SQLMap 添加 Web端交互使用模式。(仅个人猜想)
前面有提及 data 目录,有6个文件夹:html, procs, shell, txt, udf, xml。
- html 里面有个index.html文件,打开是关于sqlmap的各种选项
- procs 包含了mssqlserver、
mysql、oracle和postgresql的触发程序,存放了一些SQL语句,主要涉及DNS带外传输数据的一些数据库命令 - shell 注入成功时使用的 4 种shell,这些shell是经过加密的
- txt 包含一些字典,例如:用户浏览器代理,表,列,和关键字等
- udf UDF提权用的dll或者so文件,包含了用户自己自定义的攻击Payload
- xml 包含了多种数据库的注入检测载荷、旗标信息以及其他信息。
在软件开发过程中,数据源 / 输入流 的重要性不言而喻,data目录内容具体到详细的数据,说是最重要的目录也不为过。但该目录又过于繁杂,计划随着项目的深入了解再进行后续补充。留坑。
使用说明
Usage: python sqlmap.py [options]
参数比较庞杂,建议先可以先从从基础用法开始看,然后看 演示截图 。
查看软件信息 和 General
查看软件信息 | 参数 |
---|---|
-h / --help | 基础用法 |
-hh | 高级用法 |
–version | 版本 |
-v verbose | 运行信息详细程度 / 冗长:0-6 (default 1) |
参数中有对 Output verbosity / 参数冗长
进行说明,用于设置输出信息的详细程度,软件设置 7 个详细等级。
首先了解软件的输出信息,从 0 级开始依次叠加,使用示例 -v 3
。
- Python Tracebacks(Python错误信息和回跟踪)、error(软件错误)、关键消息
- information(信息)、警告消息
- 调试消息
- payload
- HTTP请求头
- HTTP响应头
- HTTP响应内容
General | 举例 |
---|
基础用法 -h
1.Target
Target | 举例 |
---|---|
-u URL / --url=URL | -u http://www.site.com/vuln.php?id=1 |
-g Googledork | 把 Googledork 的结果当作目标,如 -g inurl:review.php?id= |
参考 探索Google Hacking技巧,Google Dork,也称为Google Dorking或Google hacking。
关于 GoogleDork 的一些语句,参考 Google dorks sql insection:谷歌傻瓜式SQL注入,诚实地讲,通过这种方式,SQL注入的测试站点太不缺了,有机会可以收集一下 GoogleDork 。
2.Request
参考 sqlmap +外部代理池绕过IP拦截 , SQLMAP的洋葱模式代理
Request | 举例 |
---|---|
--data=DATA | Post请求,e.g. id=1 |
--cookie=COOKIE | Cookie 请求头 |
--random-agent | User-Agent 请求头 |
--proxy=Proxy | e.g. --proxy = http://127.0.0.1:5320 |
--tor | Tor匿名网络,解决访问频率控制问题,--tor --tor-type=“SOCKS5” |
--check-tor | 检查 tor 使用是否正常 |
3.Injection指定测试
Injection | 举例 |
---|---|
-p testParameter | 指定测试参数 |
--dbms=DBMS | 指定目标数据库软件,--dbms mysql 5.0 |
4.Detection自定义检测程度
参考 Sqlmap常见命令
根据注入点划分测试等级:lv2:cookie; lv3:user-agent,refere; lv5:host。
根据注入语句划分测试风险:risk 2:基于事件的测试;risk 3:or语句的测试;risk 4:update的测试。
Detection | 举例 |
---|---|
--level=Level | 测试等级1-5, default 1 |
--risk=Risk | 1-3, default 1 |
5.Techniques注入技术
参考 sqlmap简单用法
Techniques | 举例 |
---|---|
–technique=TECH… | 指定注入技术,default “BEUSTQ” |
B : 基于Boolean的盲注(Boolean based blind)
Q : 内联查询(Inline queries)
T : 基于时间的盲注(time based blind)
U : 基于联合查询(Union query based)
E : 基于错误(error based)
S : 栈查询(stack queries)(又称堆叠注入)
内联查询比较少见,留个坑位,软件测试时看看 payload。
6.Enumeration枚举数据库管理系统信息、结构、数据
数据库系统事项
检索 | 参数 |
---|---|
检索所有事项 | -a, --all |
检索DBMS banner | -b, --banner |
检索数据库系统当前用户 | --current-user |
检索当前数据库名称 | --current-db |
枚举 | 参数 |
---|---|
枚举口令哈希 | --passwords |
枚举表 | --tables |
枚举列 | --columns |
枚举数据库对象集合 | --schema |
下载 | 参数 |
---|---|
下载数据库的表项 | --dump |
下载所有数据库的表项 | --dump-all |
检索 库 / 表 / 列 | 参数 |
---|---|
指定数据库 | -D DB |
指定表 | -T Table |
指定列 | -C Column |
7.Operating system access
不是太明白,留坑
Operating system access | 举例 |
---|---|
--os-shell | Prompt for an interactive operating system shell |
--os-pwn | Prompt for an OOB shell, Meterpreter or VNC |
8.Miscellaneous杂项
Miscellaneous | 举例 |
---|---|
--wizard | 面对初学者的简单向导页面 |
留坑
review 填坑 | 说明 |
---|---|
tamper目录 | 整体把握 / 熟悉 64 个替换脚本 |
data目录 | 数据分析时填坑 |
Techniques注入技术 | 内联注入比较少见,留坑 |
Operating system access | 操作系统shell |
advanced use | 进阶使用 |