Perface

在内网使用Docker搭建了几个靶场

其中文件上传靶场是Uploads-labs,其中记录着文件上传各种姿势

准备一个个通关并记录通关

Pass-01 / 前端后缀绕过

首先第一关比较简单,直接上传个shll收到提示:

收到提示只能上传图片,但是没有截到数据包

于是可以确定是前端验证文件后缀,所以在截取到的数据包处修改文件后缀

上传后通过蚁剑成功连接

Pass-02 / MIME绕过

这是个典型的MIME绕过题目

MIME多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式每个MIME类型由两部分组成,前面是数据的大类别,例如声音 audio、图象 Image等,后面定义具体的种类。

常见的MIME类型如下:

#text表明文件是普通文本
text/plain
text/html
#image表明是某种图像或者动态图(gif)
image/jpeg
image/png
#audio表明是某种音频文件
audio/mpeg
audio/ogg
audio/*
#video表明是某种视频文件
video/mp4
#application表明是某种二进制数据
application/*
application/json
application/javascript
application/ecmascript
application/octet-stream

上传成功,用冰蝎连上

Pass-03 / 后缀黑名单绕过

很明显是后缀黑名单上传,于是理论上很简单,只要上传php其他后缀例如php3、php4、phphtml等格式.

php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2|pHp1|.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

于是上传shell后缀改为php3,例如webshell.php3

Pass-04 / htaccess绕过

这题试图上传pass3的php3文件,提示该文件不允许上传,查看提示发现,上述所有文件全部被禁止上传,有严格的文件上传后缀黑名单。
于是试图添加新的解析后缀,也就是上传.htaccess文件

<FilesMatch "sj"> 
 SetHandler application/x-httpd-php
</FilesMatch>

上面这个文件直接上传上去,其作用就是将文件名中带有sj的文件全部当作php解析

于是我们继续上传一句话,并取名为sj.sj

成功获得shell

Pass-05 / user.ini绕过

.user.ini配置参考的PHP 通过.user.ini 绕过黑名单限制,在.user.ini设置auto_prepend_file属性
下方的配置的意思是在.user.ini相同的目录下,所有的php文件都包含test.gif这个文件
所以之后我们就可以利用到readme.php包含一个我们上传的木马文件,再连接readme.php文件达到连接一句话木马的目的

所以我们上传一个.user.ini文件内容为:

auto_prepend_file=test.gif

然后上传这个文件到服务器,之后再编写一个一句话木马,并命名为test.gif,然后上传
这个好像要10mins才能生效

Pass-06 / 后缀大小写绕过

刚拿到题目没头绪,看了眼提示,以为是文件包含之类的,使用input上传,但是看了眼源码发现,依旧是上传黑名单,.htaccess也被加进去了,但是对php文件后缀的大小写没有进行限制,于是直接上传pass-05.PHP

比较简单,不放图了

Pass-07 / 空格绕过

这是空格上传,在文件后面加空格即可,windows会忽略后缀后面的空格,但有的系统不行
此环境就不兼容,文件上传成功,但未解析

Pass-08 / 加.过滤

文件后缀大小写、去除::$DATA、关键词过滤,在这里可以发现所有的都考虑到了,但是却没有考虑后缀为.的情况,在windows中PHP会自动去除后缀名中最后的“.”,我们可以通过这种方式来绕过:

文件上传成功,可以顺利连接

Pass-09 / ::$DATA绕过

上传文件在后面加::$DATA绕过
系统兼容性问题,无法复现,不解析,了解学习下即可

Pass-10 / 双点绕过

上传php文件,在后面加. .绕过
系统原因,对空格不忽略,无法复现,学习了解即可

Pass-11 / 双写后缀

看了下题目,上传了文件发现文件后缀被去除了,那么就很简单,使用双写后缀,上传了一句话图片马。
kaka.pphphp
上传成功

查看文件发现文件解析,成功连上

Pass-12 / 00截断

查看源码和提示,上传路径可控,并且是最终文件的存放位置是以拼接的方式,可以使用%00截断,但需要php版本<5.3.4,并且magic_quotes_gpc关闭。原理是:php的一些函数的底层是C语言,而move_uploaded_file就是其中之一,遇到0x00会截断,0x表示16进制,URL中%00解码成16进制就是0x00。

系统兼容性问题,没办法上传

Pass-13 / 二进制00绕过


上传.jpg文件,后在sava_path处修改,修改完之后,在Hex处找到+对应的2b,将其修改为00即可

但是我这里还是显示上传失败,应该php版本问题,了解学习下即可

Pass-14 / 图片马

这个主要是测试,图片马是否能正常连接的,上传你制作好的图片马

然后访问 http://xxxxx:8083/include.php?file=./upload/xxxxx.png

Pass-15 / 图片马getimagesize()检测

这题是用getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。
用这个函数验证是否是图片马,一样有文件包含,题目的意思就是为了让大家可以的伪造你的图片马

Pass-16 / 文件头检测

之前做过这样的题目,会验证图片头

exif_imagetype()此函数需要开启php的exif模块,属于php的内置函数,用于读取一个图像的第一个字节并检查其签名。
制作图片马的时候要注意是否有这个文件头

Pass-17

最后修改:2022 年 03 月 02 日
如果觉得我的文章对你有用,请随意赞赏