前言:
- 虽然首先防止危险文件类型被上传显然更好,但第二道防线是阻止服务器执行任何通过网络溜走的脚本。
- 作为预防措施,服务器通常只运行其 MIME
类型已明确配置为执行的脚本。否则,它们可能只是返回某种错误消息,或者在某些情况下,将文件内容作为纯文本提供。这种行为本身可能很有趣,因为它可能会提供一种泄漏源代码的方法,但它会使任何创建 Web shell 的尝试无效。 - 这种配置通常在目录之间有所不同。用户提供的文件上传到的目录可能比文件系统上假定最终用户无法访问的其他位置具有更严格的控制。如果您能找到一种方法将脚本上传到不应该包含用户提供的文件的不同目录,那么服务器最终可能会执行您的脚本。
第一步:登录网站,上传一个exploit.php文件,这里并没有阻止上传。
第二步:打开Burp,设置过滤器,并将指定GET请求发送到“重发器”。
这里我们可以看到,上传的exploit.php好像并没有运行,而是返回了里面的源代码。
第三步:当前目录无法运行上传的exploit.php,如果将文件上传路径更改,会不会有意想不到的事情发生?
1.首先将指定的POST请求发送到“重发器”,准备修改其上传路径
2.这里我们可以看到文件名和它的文件类型,更改“filename”内容为包含目录遍历序列。
将其更改为:Content-Disposition: form-data; name="avatar"; filename="../exploit.php"
。
这里我们要注意通过对正斜杠(/)字符进行 URL 编码来混淆目录遍历序列得到:filename="..%2fexploit.php"
第四步:将修改后的放入浏览器,然后我们回到Burp找到指定的GEET请求
这里将请求发送到“重发器”,查看文件是否运行成功,并查看返回的结果
然后点击发送,发现exploit.php文件成功运行,将密码提交,实验完成!
可能文中有的地方术语不对或者技术上的错误,还请大佬多多保函,给予改正,万分感谢!