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