0X00 前言
看到了一个总结上传漏洞的靶场感觉不错,记录一下过程。项目地址 https://github.com/c0ny1/upload-labs
当我搭建好环境,准备开始第一关时,小z看了我屏幕一眼说你这样很危险啊。我还没明白怎么回事,他看了下我的局域网IP地址,直接在他电脑上就能访问我搭建的项目。然后上传了一句话,用菜刀连接就能访问了。原来搭建环境时,apache默认开启了80端口,使得局域网内都能访问。在入站规则里添加一条禁止80端口访问即可。
0X01 Pass-01
前端绕过,可禁用js,也可抓包修改。
上传写好的a.jpg抓包修改成a.php 绕过成功。
0X02 Pass-02
Content-Type绕过,可上传php文件抓包修改 Content-Type: image/jpeg 即可,或者利用Pass-01的方式也可绕过。
0X03 Pass-03
看源码是黑名单绕过,可以看下apache能解析php类型有哪些
可以看到能解析的有.php3 .phtml 尝试上传图片把后缀名改为php3
根据返回的结果看到后缀名已经发生了改变,然后连接发现能够访问,绕过成功。
0X04 Pass-04
看源码发现也是黑名单而且比上一关要多很多后缀名,但是没有禁止上传.htaccess文件,这样就可以指定特殊文件名或者文件以特定的方式解析。
<FilesMatch "abcde.*"> SetHandler application/x-httpd-php FilesMatch>
将上面写入.htaccess文件,凡是以abcde(可以随便改)开头命名的文件都以php解析,构造好一张图片命名为abcdef.jpg 。
先上传.htaccess文件,再上传构造好的文件,不用抓包修改,直接连接就可访问。
0X05 Pass-05
这一关看源码发现把.htaccess也加入了黑名单,但是发现比之前少了大小写绕过。删除了把文件名变成小写,可用大写绕过。
构造好图片命名为a.jpg,上传文件,抓包并把文件名改为a.PHP 上传成功后发现能够访问并连接。
0X06 Pass-06
看源码依旧是黑名单处理,相比之前少了首尾去空处理,可以在后缀名后面加空格绕过,因为windows下会自动去除后缀名后面的点和空格。
根据返回结果上传成功。
0X07 Pass-07
看源码发现没有做去处理后缀名后面的点,可利用后缀名加点绕过。
上传成功,且能连接访问。
0X08 Pass-08
看源码发现少了去除::$DATA处理。php在Windows下文件名+::$DATA 会和后面的数据作为文件流处理,且不检测前面的后缀名。可利用这一特性绕过。
返回的状态码是403,但是能够上传成功,且能够连接访问。
0X09 Pass-09
看源码发现对后缀名的处理是先trim去空格再deldot去点,上传时路径拼接的是$file_name 故可以构造a.php. .(点空格点)绕过,处理后文件名变成a.php. 结合Windows特性变成了a.php
0X0A Pass-10
看源码str_ireplace:替换字符串中的一些字符(不区分大小写)可以利用双拼绕过。
0X0B Pass-11
这关开始用了白名单,看源码路径可控用%00截断。php版本要在小于5.3.4 。
0X0C Pass-12
这次用post获取路径,不会像get那样自动url解码,在hex里改成00,也可以加%00然后右键url decode
0X0D Pass-13
待续