upload libs
pass1
仅仅前端检验
pass2
MIME绕过
pass3
这一关我们可以利用
Php1,phtml ,php3,php4,php5,pht
也可以利用.htaccess
进行处理
pass4
利用.htaccess
进行处理
因为它取的是在.
之后的数据
那么我们可以构造.php.xxx
也可以写成.php. .
pass5
一样可以利用
因为它取的是在.
之后的数据
那么我们可以构造.php.xxx
也可以写成.php. .
pass6
它是匹配不是正则
所以我们可以利用.php空格空格空格
这样的方式来进行操作
pass7
1 | $file_ext = strrchr($file_name, '.'); |
黑名单很多情况下都没什么用处
加.
就可以去掉 特别是利用`.php.空格空格.
方法二:利用Windows解析漏洞(后缀修改为1.php:1.jpg)
文件解析部分
一、IIS 5.x/6.0解析漏洞(03)
IIS 6.0解析利用方法有两种
1.目录解析
/xx.asp/xx.jpg
在网站下简历文件夹为.asp、.asa的文件夹,其目录内的任何文件扩展名的文件都会被IIS当做asp文件来执行
例如目录 hahaha.asp,那么/hahaha.asp/1.jpg 一个jpg格式的文件就会被当做asp脚本文件来解析执行,假设黑客可以控制问上传文件的文件夹路径,就可以绕过上传格式拿到shell
一般目录解析漏洞跟编辑器搭配利用,比如ckfinder,fck编辑器,都是可以创建目录的。
2.文件解析(;)
hahaha.asp;.jpg
在IIS6.0下,分号后面的不被解析,也就是说hahaha.asp;.jpg会被服务器看成是hahaha.asp
3.畸形后缀名解析
IIS6.0 默认的可执行文件除了asp还包含这三种(特定的情况下被解析):
/hahaha.asa
/hahaha.cer
/hahaha.cdx
二、IIS 7.0/IIS 7.5/ Nginx <8.03畸形解析漏洞
Nginx解析漏洞这个伟大的漏洞是我国安全组织80sec发现的…
在默认Fast-CGI开启状况下,黑阔上传一个名字为hahaha.jpg,内容为: ‘);?>的文件,然后访问hahaha.jpg/.php,在这个目录下就会生成一句话木马 shell.php。(这个漏洞貌似不是容器的漏洞,而是php的漏洞,因为不止IIS7,0/7.5才有,甚至10.0也有出现)
三、Nginx <8.03 空字节代码执行漏洞
影响版:0.5.,0.6., 0.7 <= 0.7.65, 0.8 <= 0.8.37
Nginx在图片中嵌入PHP代码然后通过访问
xxx.jpg.php
来执行其中的代码
四、Apache解析漏洞
Apache 是从右到左开始判断解析,如果为不可识别解析,就再往左判断.
比如 hahaha.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把hahaha.php.owf.rar解析成php.
如何判断是不是合法的后缀就是这个漏洞的利用关键,测试时可以尝试上传一个hahaha.php.rara.jpg.png…(把你知道的常见后缀都写上…)去测试是否是合法后缀
五、其他
在windows环境下,xx.jpg[空格] 或xx.jpg. 这两类文件都是不允许存在的,若这样命名,windows会默认除去空格或点,黑客可以通过抓包,在文件名后加一个空格或者点绕过黑名单.若上传成功,空格和点都会被windows自动消除,这样也可以getshell。
我们刚刚就是一直用这个方式
如果在Apache中.htaccess可被执行.且可被上传.那可以尝试在.htaccess中写入:
SetHandler application/x-httpd-php
然后再上传shell.jpg的木马, 这样shell.jpg就可解析为php文件
pass8
1 | $file_name = deldot($file_name);//删除文件名末尾的点 |
这个也是这样 就是去掉了文件末尾第一个点
那么我们可以变为.php. . .
那么我们就可以使用
.php::$DATA
进行绕过
部分知识
特殊文件名绕过
1 | 比如发送的 http包里把文件名改成 test.asp. 或 test.asp_(下划线为空格),这种命名方式 |
Windows流特性绕过
1 | php在window的时候如果文件名+"::DATA"会把::DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::DATA之后的数据当成文件流处理,不会检测后缀名."::DATA"之前的文件名保持 他的目的就是不检查后缀名。ps:只能是Windows系统,并且只能时php文件 |
pass9
1 | $file_name = deldot($file_name);//删除文件名末尾的点 |
还是点空点操作
pass10
1 | $deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess"); |
这里看到是把php变为空
并没有正则或者判断存在
所以正常的双写绕过
.phphpp
直接绕过over
pass11
1 | $ext_arr = array('jpg','png','gif'); |
终于到白名单了
这道题目的利用点在于$_GET
传参这里,我们的目录是可动态构造的
那么我们这里使用$_GET['save_path']=/../upload/liduoan.php%00
可是这里有限制
需要两个条件
php版本小于5.3.4
php的magic_quotes_gpc为OFF状态
如果要完成这一个题目就必须要实现上面的两个条件
但是现在都PHP7了,这东西也就很少见了,满足上面的条件的时候php就是把它当成结束符,后面的数据直接忽略,这也导致了很多的问题,文件包含也可以利用这一点。
pass12
1 | $ext_arr = array('jpg','png','gif'); |
这道题目就是改成了$_POST
传参数
和前面那道题目一样
上传图片马后为如下
然后在上面的upload 的后面加上 XXX.php+(这里的XXX可以为任何名字,他只是一个代号。并且 php后面的 + 好也是一个标记,他的二进制代码为 2b)
由上可知,将二进制中的 + 改为 00 截断,即将 + 的二进制码 2b 改为 00 .
pass13
1 | function getReailFileType($filename){ |
这道题目,它查看了图片的内容,我们利用幻术头绕过
但是写到这我就不会了
结果居然是我们自己写个文件包含。。。
1 |
|
这样我们就可以直接
/include.php/?page=xxxxxx.jpg
说明了图片马要么利用解析漏洞,要么利用文件包含
pass14
同样幻术头马上传配合文件包含
- 本文标题:文件上传-专题
- 创建时间:2020-04-19 14:53:41
- 本文链接:2020/04/19/CTFcomig/文件上传-专题/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!