这篇文章最后更新于 天前,文中描述的信息可能已经过时,请多加查证后再作参考。
介绍
upload-labs
是一个使用 php 语言编写的,专门收集渗透测试和 CTF 中遇到的各种上传漏洞的靶场。
下载链接:github.com/c0ny1/upload-labs
在本博客中使用到的工具:
第一题
尝试前端绕过
打开浏览器的开发人员工具( F12 )启用“禁用 Javascript ”选项,上传 some.php ,上传成功。
尝试伪造上传
在尝试直接上传 WebShell
失败后,启动 BurpSuite 抓包,之后正常上传图片:
之后就可以看到上传图片时的网络活动:
使用 Postman 伪造同样的 HTTP POST ,上传成功。
* 上传的文件会保存在 upload-lab/upload
内。
第二题
和第一题中的 尝试伪造上传 的步骤类似,获取到 HTTP POST 的相关信息后,用 Postman 模拟即可。需要注意的是,这次需要把 upload_file
的 Content-Type
改为 image/jpeg
。或者 image/png
image/gif
。
第三题
这一题中会阻止上传扩展名为 .asp .aspx .php .jsp 的文件,但是其它扩展名的文件也有可能被当做脚本文件运行,上传其它扩展名的文件即可
具体的其它扩展名可以到 Less-04 的源码里找,如下图:
还有需要注意的一点是,这次上传的文件被重命名了,我们可以在返回的数据中找到它的路径:
第四题
这一题阻止了几乎所有可用的 WebShell
扩展名,由于环境中使用的是 Apache 服务器,所以我们可以使用 .htaccess
文件让 Apache 把任意文件解析为可以运行的 WebShell
,以 PHP 为例:
新建文本文档,输入以下内容并重命名为 .htaccess
。
1 | SetHandler application/x-httpd-php |
参照上面的方法上传 .htaccess
和一个重命名后的一段 PHP 文件,访问对应目录即可。
如上,这次没有改文件名。
第五题
请先确认您的 Pass-5 点击查看源码后源码中包含以下这段代码与否,如果与您的部分源码不一致,请尝试先查看其它题的题解。
1 | $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess"); |
首先尝试直接上传目标文件失败,之后使用 BurpSuite 的重发器(Repeater)把 filename
值改为 *.php. .
.如下图(暂时没有找到使用 Postman 代替这里的 BurpSuite 的方法)
后端程序首先去掉文件名末尾的点,文件名变为 *.php.
,其中 .
并不是不允许的文件扩展名。之后在文件保存时扩展名又被改为 .php
,使其发挥作用。
参考资料
* 目前本文并未直接复制以下文章的内容
本文作者:Henrize Kim
文章链接: https://henrize.kim/article/b15cbef9837c/
本文使用 CC BY-NC-SA 3.0 协议进行许可,使用时请注意遵守协议。