sqlmap是web狗永远也绕不过去的神器,为了能自由的使用sqlmap,阅读源码还是有必要的…
基本配置
sqlmap在启动前,首先是基本的配置
1 | paths.SQLMAP_ROOT_PATH = modulePath() |
设置了和路径有关的配置参数,banner则是输出了sqlmap的信息
1 | sqlmap/0.9 - automatic SQL injection and database takeover tool |
参数解析
紧接着是对参数的解析
1 | cmdLineOptions.update(cmdLineParser().__dict__) |
跟着cmdLineParser我们进入了
1 | from lib.parse.cmdline import cmdLineParser |
/lib/parse/cmdline
必选参数
1 | # Target options |
从–help上看到是这样的
1 | Target: |
- -d direct 直连数据库的方式
- -u url 目标url
- -l list 从Burp or WebScarab获取的代理log
- -r 加载从文件获取的http request
- -g 目标url在Process Google dork的结果
- -c 加载ini文件设置
request参数
1 | # Request options |
从–help中看是这样的
1 | Request: |
- –data 很好理解,就是post的时候的数据
- –cookie 请求的时候所带的cookie
- –cookie-urlencode url编码的cookie注入
- –drop-set-cookie 忽略返回头中的set-cookie
- –user-agent=AGENT http头中,关于ua的设置
- –random-agent 更简单的方式,随机使用ua
- –referer=REFERER http头中,关于referer的设置
- –headers=HEADERS 额外的http请求头,要求换行符分割
- –auth-type=ATYPE http authentication的类型(Basic, Digest 和 NTLM)
- –auth-cred=ACRED 如果是账号密码的形式(name:password)
- –auth-cert=ACERT 如果是公私钥的方式,则要求(key_file,cert_file)
- –proxy=PROXY 使用http的代理来连接目标url
- –proxy-cred=PCRED 如果是待用户验证的代理,你需要加上账号密码(name:password)
- –ignore-proxy 忽略系统默认的http代理
- –delay=DELAY 每次请求的延迟,单位为秒
- –timeout=TIMEOUT 请求超时的判定,默认为30
- –retries=RETRIES 请求超时的重试次数,默认为3次
- –scope=SCOPE 从提供的代理日志过滤目标
- –safe-url=SAFURL 经常访问用来测试的url地址
- –safe-freq=SAFREQ 2个访问者的安全链接
性能参数
1 | # Optimization options |
从–help中看是这样的
1 | Optimization: |
- -o 打开所有优化开关
- –predict-output 预测常用的查询输出
- –keep-alive 使用一个持续的http连接
- –null-connection 检索页面长度没有实际的HTTP响应页面
- –threads=THREADS 最大的http连接线程数
注入参数
1 | # Injection options |
从–help中看是这样的
1 | Injection: |
这个参数是用来配置自定义的注入payload和可以篡改的脚本
- -p TESTPARAMETER 可测试的参数
- –dbms=DBMS 后端数据库的的值(?)
- –os=OS 后端数据库的操作系统
- –prefix=PREFIX 注入payload的前缀字符串
- –suffix=SUFFIX 注入payload的后缀字符串
- –tamper=TAMPER 使用给定的脚本篡改注入数据
盲注参数
1 | # Detection options |
从–help中看,是这样的
1 | Detection: |
这部分的参数是在盲注的方式下,指定如何解析页面和比较页面的
- –level 要进行测试的等级,默认为1
- –risk 要进行测试的风险级别,默认为1
- –string 字符串匹配时查询是有效的
- –regexp 正则匹配时查询是有效的
- –text-only 页面只基于文本进行比较
技术参数
1 | # Techniques options |
在–help中
1 | Techniques: |
这部分参数负责调整注入测试时的技术
- –technique=TECH sql注入技术,默认为beust
- –time-sec=TIMESEC 数据库返回延迟,默认为5(应该是时间盲注时候的配置)
- –union-cols=UCOLS 联合查询是的列数
- –union-char=UCHAR 字符用于爆破的列数(union注入的列数测试?)
指纹选项
1 | # Fingerprint options |
1 | Fingerprint: |
这个参数只有一个选项,是指明数据库版本的指纹(还是bool型…没懂)
枚举选项
应该说也叫目标选项,是一些关于注入的选项,比较核心
1 | # Enumeration options |
在–help中是
1 | Enumeration: |
这些选项涉及到sqlmap攻击的数据库目标,还可以执行自己的语句,可以说是sqlmap中最重要的一些参数了。
- -b, –banner 获取数据库的版本信息
- –current-user 获取数据库的用户名
- –current-db 获取数据库名字(当前)
- –is-dba 查看是否是数据库管理员
- –users 列出数据库所有用户
- –passwords 列出数据库所有用户hash
- –privileges 列出所有用户的权限
- –roles 列出所有用户的角色
- –dbs 列出所有数据库
- –tables 列出所有表
- –columns 列出所有列
- –dump -T “” -D “” -C “” #列出指定数据库的表的字段的数据(–dump -T users -D master -C surname)
- –dump-all 列出所有表的数据
- –search 查询列、表、库名
- -D 指定数据库名
- -T 指定表名
- -C 指定列名
- -U 指定用户名
- –exclude-sysdbs 列举表是排除的数据库
- –start=LIMITSTART 第一次查询输出的条目
- –stop=LIMITSTOP 最后一次查询输出的条目
- –first=FIRSTCHAR 第一个查询输出的字符
- –last=LASTCHAR 最后一个查询输出的字符
- –sql-query=QUERY 执行指定的sql语句
- –sql-shell 执行指定的sql命令
爆破参数
1 | # User-defined function options |
在–help中是这样的
1 | Brute force: |
这部分主要是选择是否使用爆破
没啥好说的,分别针对表和列
自定义函数参数
1 | # User-defined function options |
–help
1 | User-defined function injection: |
这部分主要是负责自定义函数,你可以通过编译mysql注入你想要的函数,也可以PostgreSQL在windows上共享库、dll,或者在linux上共享对象
- –udf-inject 注入传统的用户自定义函数
- –shared-lib=SHLIB 本地共享的库
文件系统配置
1 | # File system options |
–help
1 | File system access: |
这些参数用来配置后端数据库管理的文件系统
- –file-read 读文件
- –file-write 写文件
- –file-dest 绝对路径写文件
操作系统参数
1 | # Takeover options |
–help
1 | Operating system access: |
这部分的参数主要是用于对数据库后端的操作系统的惭怍
- –os-cmd=OSCMD 执行一个操作系统的shell
- –os-shell 提供一个交互式的shell
- –os-pwn 提供一个shell, meterpreter or VNC
- –os-smbrelay 提供一个an OOB shell, meterpreter or VNC
- –os-bof 使用一个缓冲区溢出
- –priv-esc 数据库进程提权
- –msf-path=MSFPATH 本地Metasploit的安装路径
- –tmp-path=TMPPATH 远程临时文件目录的绝对路径
windows注册表参数
1 | # Windows registry options |
–help
1 | Windows registry access: |
这个参数主要是用来针对后端数据库操作系统的windows注册表
- –reg-read 读注册表的键值
- –reg-add 添加注册表的键值
- –reg-del 删除注册表的键值
- –reg-key=REGKEY windows注册表的键
- –reg-value=REGVAL windows注册表的键值
- –reg-data=REGDATA windows注册表的键值数据
- –reg-type=REGTYPE windows注册表的键值类型
一般工作参数
1 | # General options |
–help
1 | General: |
这部分选项是用来设置某些一般的工作参数。
- -t TRAFFICFILE 记录所有的http流量到一个文本文件
- -s SESSIONFILE 保存和恢复所有的数据到一个session文件
- –flush-session 对于当前的目标刷新已有的session
- –fresh-queries 忽略查询结果中已有的结果
- –eta 预计每个输出的显示时间
- –update 更新sqlmap
- –save 保存配置文件的ini文件
- –batch 使用默认的行为
杂项配置
1 | # Miscellaneous options |
–help
1 | Miscellaneous: |
这里剩下的是一些杂项配置
- –beep 当发现注入时弹窗出来
- –check-payload IDS检测注入payload
- –cleanup 清理sqlmap特定的UDF和表
- –forms 解析和测试你的目标url
- –gpage=GOOGLEPAGE 使用Google dork指定结果页数
- –page-rank 显示google dork的排名结果
- –parse-errors 从页面解析数据库的错误信息
- –replicate 复制数据到sqlite3
- –tor 使用默认的代理地址
- –wizard 为新手配置简单的页面
初始化
1 | try: |
从这里开始就是正式开始解析sqlmap的参数,执行相应的函数了