靶场介绍
青岑 Web 入门靶场对新手友好,涵盖多种常见 Web 安全漏洞类型。建议通过源码分析、抓包修改及 Payload 构造等方式进行练习。
1. Basic
解题思路: 先看源码和抓包,再找注入点和逻辑问题,最后构造 payload 拿 flag。
- Basic: 直接 F12 查看源码获取 flag。
- BASIC_1: 前端被封禁,查看源码获取 flag。
- basic_2: 抓取提交包,发现
is_admin始终为 0,修改参数后获取 flag。 - basic_3: 查看源码,将 JS 代码放入控制台运行得到密码,进而获取 flag。
- basic_4: 查看源码中的数组
_0,将其转换为字符串得到邀请码QCCTF_VIP_2026。 - basic_5: 积分计算在前端,加密函数全局可见。可直接调用页面加密函数伪造 1000 积分发送给后端,或使用自动脚本批量答题领取奖励。
import requests
import json
import base64
def get_flag():
TARGET_URL = "http://docker.qingcen.net:38964/claim"
payload = {"score": 1000}
json_str = json.dumps(payload, separators=(',', ':'))
encrypted_bytes = base64.b64encode(json_str.encode('utf-8'))
encrypted_data = encrypted_bytes.decode('utf-8')
headers = {'Content-Type': 'application/json'}
data = {"data": encrypted_data}
try:
response = requests.post(TARGET_URL, headers=headers, json=data)
res_json = response.json()
if "data" in res_json:
dec_bytes = base64.b64decode(res_json["data"])
dec_str = dec_bytes.decode('utf-8')
result = json.loads(dec_str)
if "flag" in result:
print(result["flag"])
except Exception as e:
print(e)
2. EZ_PHP
- EZ_PHP: PHP 弱类型比较漏洞。要求
a能通过 if 判断且等于 0,b不是数字但大于 2026。- Payload:
/?a=abc&b=3333as
- Payload:
- ezphp_1: JSON 解析漏洞。需传入 JSON 字符串解析成数组,寻找键值为
"QCCTF"的键名索引为 1。 - ezphp_2:
json_decode配合array_search的弱类型绕过。利用true与字符串比较的特性。- Payload:
http://.../?qc={%22A%22:%22QCCTF%22,%22n%22:[true]}
- Payload:
3. EZ_MD5
- ezmd5_1: MD5 碰撞。两个数不同但 MD5 值相同(科学计数法)。Payload:
?a=QNKCDZO&b=s214587387a - ezmd5_2: 数组绕过。
md5()处理数组返回 NULL,导致比较相等。Payload:/?a[]=2323&b[]=43 - ezmd5_3: 强类型比较下的数组绕过。注意
===不会自动转换。 - ezmd5_4: 工作量证明 (PoW)。暴力穷举 MD5 尾部特征。使用 Python 脚本爆破。
- ezmd5: 魔术哈希。寻找 MD5 值为 0 的科学计数法。Payload:
?QC=26120 - ezmd5_5: SHA-1 魔术哈希。使用已知魔术字符串绕过。
- ezmd5_6: 再次利用数组绕过特性。
4. EZ_CMD
- ezcmd:
escapeshellcmd()过滤特殊符号。直接查看根目录文件获取 flag。 - ezcmd_1: 无过滤命令执行。使用分号
;拼接命令读取 flag。 - ezcmd_2: 无回显 (Blind)。重定向输出到
/dev/null。使用注释符#或分号绕过。 - ezcmd_3: 禁止空格。使用
$IFS替代空格,或使用<重定向读取文件。若cat被禁用,可使用tac,tail,head等替代。 - ezcmd_4: 正则黑名单 + 转义。使用
eval二次解析,拆分敏感词flag为变量拼接。 - ezcmd_5: 禁止字母。使用八进制 ASCII 码表示字符,如
$' 143 g141 g164'表示cat。 - ezcmd_6: 基础命令执行,打印目录并读取 flag。
- ezcmd_7: GET 参数黑名单过滤
flag。使用通配符*绕过。 - ezcmd_8:
system()被禁。尝试passthru(),exec(),shell_exec()或反引号。 - ezcmd_9: 禁止空格。使用 PHP 原生函数
show_source(),readfile()无需空格;或利用${IFS}替代空格。 - ezcmd_10: 禁止分号。使用
?>结束 PHP 标签从而执行后续命令。 - ezcmd_11: 未知路径。使用
highlight_file(__FILE__)查看当前文件源码。 - ezcmd_12: 特殊符号限制。使用函数套娃法,结合
getcwd(),scandir(),array_flip(),array_rand()动态获取文件名并高亮显示。 - ezcmd_13:
preg_replace/e修饰符漏洞。PHP 5.5 以下版本危险特性,替换内容会被当作代码执行。利用{${}}结构触发系统命令。
5. EZ_INFOLEAK
- ezinfoleak: Base64 解码信息,遍历目录查找。
- ezinfoleak_1: 目录穿越过滤
../。使用....//绕过。 - ezinfoleak_2: 常规信息泄露。
- ezinfoleak_4:
.git源码泄露。使用 dirsearch 扫描,配合 GitHack 工具还原。 - ezinfoleak_5:
.git泄露变种,POST 请求获取文件。 - ezinfoleak_6:
.svn源码泄露。新版本的 SVN 包含 SQLite 数据库wc.db,使用 dvcs-ripper 还原。 - ezinfoleak_7:
.hg(Mercurial) 源码泄露。 - ezinfoleak_8: Vim 缓存文件泄露 (
.swp)。 - ezinfoleak_9: Mac 系统文件
.DS_Store泄露。下载后用 strings 读取。
6. EZ_FU
- ezfu: 文件上传。上传一句话木马,GET 传参执行命令。
- ezfu_1: 后缀名检查。将 php 改 jpg 上传,抓包改回后缀。
- ezfu_2: 内容检查。GIF 头伪造失败,尝试其他绕过方式。
7. EZ_FL
- ezfl: 源码线索提示
/flag.txt。 - ezfl_1: 文件包含 LFI。使用
php://filter伪协议读取文件内容。 - ezfl_2: 编码转换读取。使用
convert.iconv过滤器。

