上传文件的流程: 网页上传 -> 目标服务器的缓存目录 -> 移动到代码规定的目录 -> 重命名(开发) 移动上传文件函数: move_uploaded_file()
1.前端验证绕过: 可以通过burp抓包,删除js验证代码,即可绕过。
2.content-type方式绕过: 通过burp抓包,修改content-type类型为img/jpeg格式
3.黑名单绕过: 具体看黑名单内容,可以用大小写绕过、双写绕过、文件后缀点绕过 如何判断白名单和黑名单: .aaaaaaaaa 如果可以上传就是黑名单,如果不可以上传就是白名单。
5.后缀大小写绕过: 将php改为phP、PhP、pHP、PHp等都可以绕过
6.文件后缀空: 通过burp抓包,在文件名后缀加上一个空格,因windows会自动消除空格,但在后台检测有空格和没空格完全不一样,所以达成绕过
7.文件后缀点绕过: 与文件后缀空同理,用burp抓包,在文件名后缀加上一个点。
DATA(Windows文件流绕过): 利用NTFS文件流,windwos会将含有::DATA的文件默认存储,但在后台检测会检测1.php::DATA,可以达成绕过
9.构造文件后缀绕过: 当后缀.和空都不能用时,可以尝试一下 1.php. . 来绕过 消除文件后面的点和空,windwos自动消除点,达到绕过
10.双写文件后缀绕过 黑名单机制+文件后缀+windwos文件流被写入检测,可以通过pphphp来绕过,检测清除原本有的php,pphphp变成了php.达成绕过
12.00截断: get会对网站url传参进行16进制解码,而post不会,所以在传参之后,直接用burp修改16进制
13.图片马: 对图片的内容进行检测, 并不是单单检测文件后缀名 图片马就是将一句话木马和图片合并在一起 为了绕过检测末尾的图片马,可以使用 图片 + 木马 + 图片 还可以图片+木马+zip
14.getimagesize 利用getimagesize()函数判断图片大小、格式、高度、宽度等、其实和图片马没有什么太大区别。
15.php_exif模块图片类型绕过 利用php_exif模块检测图片类型,和图片马没什么区别
16.二次渲染绕过: 会对图片进行二次渲染,修复代码。 可以写在gif图片头部(第三行开始写)
17.条件竞争绕过: file_put_contents() 把一个字符串写入文件 利用有这个函数的文件可以生成一个新的文件。 例如:file_put_contents(‘2.php’,‘’) 生成一个2.php文件内容是一句话木马。 因为这里是先上传再检测,在上传之后,检测删除之前,利用file_put_contents()及时生成一个2.php文件就可以了。 18. 条件竞争绕过(2): 和17一样,需要换成图片马。
19.move_uploaded_file()文件移动截断: 和00截断差不多.
20.IIS6.0解析漏洞(一) 解析漏洞: 中间件是根据后缀来区分交给谁来处理。 IIS6.0解析漏洞: IIS是中间件 asp一句话木马: <%eval request(“alva”)%> iis6.0中 默认配置 .asa .cer .cdx 都会当做asp进行处理 上传一个图片马,使用burp抓包进行修改后缀为asa即可。
21.IIS6.0解析漏洞(二) 使用分号,截断 IIS6.0 -> 1.asp;1.jpg -> 可以理解为00截断的变形。 上传一个图片马,把文件名改为 a.asp;1.jpg上传 检测会直接检测到后缀,但在中间件来说,认为a.asp就结束了,所以直接当成asp来解析。
22.IIS6.0文件解析漏洞(三) 将jpg文件放入名为a.asp目录中,iis会将a.asp文件夹中所有文件当做asp解析。 只在iis6.0中有 5.1 和7.5 都没有。 asp站点 iis6.0版本 一般来说aspx的站点会兼容asp
23.PHP-CGI解析漏洞 php和web容器交互有两种方法。 php与nginx交互的时候,php会在本地开一个9000的端口反代,php与nginx交互是通过9000端口 nginx默认以CGI方式支持php解析。 CGI:通用网关接口 在图片地址后面加上/.php即可。
第一关是前端验证绕过,可以利用burp suite抓返回包,将前端验证的js代码删除达到绕过
成功上传文件,现在打开图片地址测试一下是否成功 可以看到成功了
第二关是用Content-Type绕过打开源码,发现这个是后端验证的,会验证上传的文件类型是什么,这里验证的是否为图片,所以直接上传php然后修改content-type为image/jpeg即可成功上传
黑名单机制,禁止上传asp、aspx、jsp这时候需要知道:在php中,默认状态下php3 php4 php5 phtml都会被解析为php,所以可以尝试以上方法上传文件。
查看源码得知,php3 php4 php5、大小写方法等全部被设置规则了。.htaccess文件,是一个分布式配置文件,针对于当前目录改变配置的方法,在特定的目录中放一个包含一个或多个指令的文件。.htaccess可以做文件夹密码保护、扩展名伪静态化、禁止特定ip的用户等,此文件规则高于Apache的规则例如:AddType application/x-httpd-php .jpg 这个指令表示 jpg文件当做php文件来执行首先上传一个jpg文件,再将写入AddType application/x-httpd-php .jpg的htaccess文件上传上去
此时在看看是否生效。
查看源码发现这里大小写规则并没有写全
直接将木马文件后缀改为PhP
成功绕过
查看源码,发现只是将文件名换为小写和删除末尾的点,并没有去空格直接上传php文件,使用burp抓包修改
查看靶场源码,这里只把文件转为小写和去空,没有过滤点,在windows中,后缀.会自动被去掉,所以可以通过在后缀加个点达成绕过
源码中,大小写、首尾去空、删除点都被写入规则 我先试了试上传一个php 然后在burp中修改为 php. . 发现这样也能上传,并且生效
但毕竟要跟题目对应,这里要求使用 Windows文件流绕过,咱就应题而答Windows文件流绕过,利用ntfs交换数据流(ADS),ADS是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件可以存在多个数据流,通俗点说就是将某个文件“寄宿”在另一个文件上,而在资源管理器中只能看到宿主文件,看不到寄宿文件。
这里保存的时候其实默认 3.txt:$DATA 因为系统默认,所以不会显示
可以看到确实能够生效,对于后端检测来说,3.txt和3.txt:DATA肯定是不一样的,所以这里可以直接上传alva.php:DATA
在访问的时候,直接访问alva.php 因为保存在windows系统上之后::$DATA这串字符就不存在了,实际上保存的是alva.php
通过查看源码,发现文件末尾点和首尾空格、大小写、windows文件流都被写入规则,但这里只删除文件末尾的一个点,我们用 . .的方式还是可以绕过的。
这个双写文件后缀绕过,看着就很熟悉。没错xss也有这样的绕过方法 <scscriptript>alert(1)</scscriptript>
既然这里是替换,那就让他替换呗,我多写一次不就行了嘛
.
通过查看源码发现,这里将格式限制为jpg等图片格式,但这里进行了移动文件重命名进行保存,可以使用%00截断,00在计算机来说可以说是结束标识。这里会先检测是否是jpg,然后再移动文件位置,进行重命名,在移动的时候可以通过修改路径,在后面添加00截断后面的。相当于将文件重命名的时候,重命名为alva.php 这里经过测试,不用删除重命名之后的时间文件名也可以生效
这里也是00截断,其实跟靶场11的一样,get会去对url栏中的数据进行16进制解码,实际上url编码本质就是16进制,这里用的是post传参,不会对数据进行16进制解码,所以直接用burp抓包修改它的16进制
上传成功,查看是否生效
同11,删除与不删除重命名之后的日期都可以生效
这个靶场这里会对图片的内容进行检测,而并不是单单检测文件后缀名,这时候就可以用图片马来绕过,将真实的图片与一句话木马合并在一起,这样既可以用图片方式打开也可以用php方式打开。有时候有些检测会检测末尾,这种情况可以使用 图片+木马+图片,将木马放在中间。在cmd中将php和图片合并 命令如下: copy 1.jpg/b + 2.php 3.jpg实际上是将两者转换为二进制,然后进行粘合
合并成功,现在测试测试上传是否成功
这一关使用了一个getimagesize()函数,来返回图片内容,比如高度宽度等 其实和靶场13差不多。
这里我上传的是一个gif图片马
这里用exif模块的imagetype判断图片类型是否为gif、jpg、png格式 直接上传上一关的gif图片马,上传成功
二次渲染:会对图片进行二次修改,上传之后会被处理,这时候用普通的图片马就会被直接处理掉,这里可以将一句话木马写在gif图片的头部。
打开发现图片有点变化,直接上传试试
成功绕过
条件竞争这里,源码是先上传之后再检测,这时候木马会被删除,但是可以使用file_put_contents()函数生成一个新的木马文件,检测只会检测上传的文件,不会检测这个文件。语法: <?php file_put_contents('2.php','<?php @eval($_REQUEST[8])?>');?>直接上传一个alva.php内容是上面的内容,让他生成一个一句话木马文件2.php,只要上传速度够快,电脑删除的速度就跟不上我。先随便上传一个文件得到路径,然后利用burp循环8000次上传,和8000次访问。
得到路径 抓包开跑,跑线上环境,很明显,我脸被打烂了,跑不过来 可恶!竟然真的跑不过来。 老老实实本地搭建吧。。
上传的文件内容。 开始本地抓包跑…… 开始源码错误,后来修改测试了一下上传的文件的源码直接放入文件夹去访问,是可以成功生成2.php的,循环很多次后还是没跑出来,我直接放弃了,希望辅导员见谅啊啊啊啊啊,末尾附上我的上传文件和生成的文件。确实是没问题的,线程30的50都没能跑出来
和条件竞争1差不多,这里需要上传图片马,由于17我死都没跑出来这里也没能复现了。
这里其实和00截断一样,这里重命名了上传的文件,直接抓包
IIS是一种web中间件,6.0是iis的版本号。解析漏洞的原理:中间件是根据文件的后缀名来决定由什么进行处理的。这里上传一个图片格式的文件,然后使用burp抓包修改后缀为`.asa、.cer、.cdx`,因为这里使用的是白名单机制,asp并没有在白名单中。而iis6.0中默认配置`.asa .cer .cdx`会当做asp进行处理
将一句话木马文件和图片进行合并。
图片显示正常且十六进制中存在一句话木马。 burp开启抓包,上传文件,修改后缀
文件上传成功。
通过查看页面源码,发现这里白名单中并不存在.asa .cer .cdx,并且还会判断图片大小要小于200KB这时候第一种方法就不能使用了这里有另外一种方法,类似于00截断,就像写php一样,用;号当做结束标识,这时候可以将文件名改为alva.asp;1.jpg,在iis解析的时候,解析到asp后识别到有个分号结束,就自动将asp进行处理
上传成功,使用菜刀找到flag进行提交
查看源码理解了一下,发现这里好像是固定jpg后缀才行,要求上传jpg那我就上传jpg嘛。
诶,发现这里竟然直接上传成功并且能够连上菜刀,还能找到flag
其实这里也是利用了iis6.0的解析漏洞,这个漏洞在其他一些版本并不存在,将目录名命名为a.asp,那么这个a.asp文件夹里面的所有文件都会以asp的方式来解析。
在nginx中,默认以CGI方式处理php。 在IIS7.0、IIS7.5、Lighttpd等也经常会出现这样的漏洞。只要在图片地址后面加上一个/.php,就会直接当做php进行执行,绕过解析。上传一个含有php一句话木马的文件即可。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有