HTTP协议中的PUT方法是将指定资源的内容替换为请求中所包含的新内容。PUT方法可以用于上传或更新文件,也可以用于创建新的资源。当PUT方法可用时,客户端可以将文件上传到Web服务器并将其存储为已命名的文件或文件夹。但在某些情况下,PUT方法可能会导致服务器安全漏洞,例如,PUT请求可能会导致服务器存储敏感信息或恶意代码。因此,在一些安全标准中,PUT方法被视为不安全的,很多Web服务器默认情况下是禁用PUT方法的。
[GDOUCTF 2023]EZ WEB
访问页面没事东西,源码提示就在眼前,看到了/src,访问是个py文件
import flask
app = flask.Flask(__name__)
@app.route('/', methods=['GET'])
def index():
return flask.send_file('index.html')
@app.route('/src', methods=['GET'])
def source():
return flask.send_file('app.py')
@app.route('/super-secret-route-nobody-will-guess', methods=['PUT'])
def flag():
return open('flag').read()
这里我访问chat,我太菜了
这是一个使用 Flask 框架编写的 Python 代码,它创建了一个 Web 应用程序,并定义了三个路由:
- "/" 路由:使用 GET 方法返回 "index.html" 文件。
- "/src" 路由:使用 GET 方法返回 "app.py" 文件。
- "/super-secret-route-nobody-will-guess" 路由:使用 PUT 方法打开名为 "flag" 的文件并将其中的内容返回给客户端。
可以看出,第三个路由是一个秘密路由,只有当请求方法为 PUT 并且路径为 "/super-secret-route-nobody-will-guess" 时才能访问。它会打开名为 "flag" 的文件并将其中的内容返回给客户端。这可能是一个漏洞,因为未对该路由进行身份验证或授权检查,攻击者可以通过篡改 HTTP 请求来绕过安全控制,获取敏感信息或执行恶意操作。
PUT请求?用bp抓包,改一下请求方式,然后改文件路径在发包,就返回falg了
[NSSRound#1 Basic]basic_check
Dir没扫出来有用的东西
Nikto扫描扫描出PUT提交
这和上一题也是put提交,那么用bp抓一下,上传个shell?
上传成功
找到NSSCTF{0f3453aa-6199-442e-bb08-04d3cd2a2515}