文件上传及upload-labs闯关
Posted Adolph_Ansel
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件上传及upload-labs闯关相关的知识,希望对你有一定的参考价值。
文章目录
- 一、 一句话木马的编写及利用
- 二、upload-labs第一关
- 三、upload-labs第二关
- 四、upload-labs第三关(双写绕过)
- 五、upload-labs第四关(上传.htaccess绕过)
- 六、upload-labs第五关(大写转换进行绕过)
- 七、upload-labs第六关(文件增添空格绕过)
- 八、upload-labs第七关(扩展名后添加点号)
- 九、upload-labs第八关
- 十、upload-labs第九关
- 十一、upload-labs第十关
- 十二、upload-labs第十一关
- 十三、upload-labs第十二关
- 十四、upload-labs第十三关
- 十五、upload-labs第十四关
- 十六、upload-labs第十五关
- 十七、upload-labs第十六关
- 十八、upload-labs第十七关
- 小结
一、 一句话木马的编写及利用
<?php eval($_REQUEST['cmd']);?>
通过ip地址/shell.php?cmd=system('calc.exe');
可以给靶机弹计算器
二、upload-labs第一关
编写一句话木马,并将其命名为1.jpg
<?php eval($_REQUEST['cmd']);?>
上传1.jpg,然后抓包,将其改回1.php
上传成功
三、upload-labs第二关
和第一关一样的方法,编写一句话木马,将2.php修改为2.jpg上传,再通过抓包中途改为2.php,成功上传到后台
另一种方法:
(1) 上传2.php的文件
(2) 通过burp抓包,修改文件类型为image/jpeg、image/png、image/gif
(3) 再发包成功上传
四、upload-labs第三关(双写绕过)
查看源码
上传3.php,抓包,双写,发包
上传成功
五、upload-labs第四关(上传.htaccess绕过)
直接上传4.php木马,发现报错
查看代码,发现源码中对扩展名进行了黑名单限制,所限制的文件类型不全,可上传.htaccess文件
所以可利用该文件解析规则增加新的可执行的扩展名.abc绕过,该文件内容如下:
AddType application/x-httpd-php .abc
然后上传一句话木马4.abc文件
六、upload-labs第五关(大写转换进行绕过)
直接上传木马5.php发现报错
查看源码,发现这里面并没有进行大小写转换,代码里面限制的是以小写php为扩展名的文件
因此我们上传5.PHP木马,成功
七、upload-labs第六关(文件增添空格绕过)
直接上传6.php木马,发现报错
查看源码,发现源码中对扩展名后方空格并未进行处理。
因此上传6.php木马,在请求报文中将php扩展名后面添加一个空格,然后发包
成功
八、upload-labs第七关(扩展名后添加点号)
查看源码,发现源码中对扩展名后点号(.)未进行处理。
上传7.php,抓包,在请求报文中,将php扩展名后面添加一个点号(.),然后发包
成功
九、upload-labs第八关
直接上传8.php,抓包,在在请求报文中8.php后面加上::$DATA
十、upload-labs第九关
查看源码:
前面所有可以利用的都给过滤了,分析下代码,先将首尾去空,又去除了::$DATA又转换为小写,再删去末尾的点。这样一来我们构造文件名,使其经过过滤后得到的还是php的文件名不就行了,所以就1.php. . 就可以绕过,也就是点+空格+点+空格
绕过
成功:
十一、upload-labs第十关
第十关依旧是黑名单过滤,查看代码:
箭头所指代码将黑名单中的后缀名替换为空,而且只替换一次,所以我们可以利用双写来绕过
抓包,并修改后缀名:
成功:
十二、upload-labs第十一关
先查看代码:
看到是白名单判断,但是$img_path直接拼接,因此可以利用%00截断绕过:
成功
十三、upload-labs第十二关
查看代码:
save_path用POST方式传参,应该也是00截断,但是不会像GET方式那样会对%00进行解码。
由于无法自行解码所以我们需要在hex中找到相对应的位置将数字修改为00.
在hex中找到相对应的位置将数字修改为00.
成功:
十四、upload-labs第十三关
1.制作图片马:
新建一张空白图片shell.jpg,和一句话木马black.php,然后通过cmd命令行合成图片马:
copy black.jpg /b + shell.php /a blankshell.jpg
2.上传图片马
3.在文件包含漏洞的超链接中输入该图片马对应的路径并执行phpinfo()。
十五、upload-labs第十四关
和第十三关的解题思路一样
十六、upload-labs第十五关
用同样的方法实验,发现页面直接闪无
打开php扩展中的php_exif即可实现。
十七、upload-labs第十六关
上传图片马发现失败,查看上传后的图片,发现一句话木马部分被改过。
所以将一句话木马插入没有被渲染的地方,大概就是在文件前段。
成功!
十八、upload-labs第十七关
1.准备一个写shell的php脚本文件
<?php fputs(fopen('shell.php','w'),'<?php @eval($_REQUEST["test"])?>');?>
2.在保存上传的文件后,在判断类型前有一个时间间隙,需要快速的访问这个php文件
3.该php文件的功能是写一个shell
4.访问写入的shell
小结
(1)含义:由于后端开发者未对前端传入的文件扩展名和内容进行正确的识别和处理,导致攻击者上传的包含动态脚本的恶意代码文件被执行。
(2)危害:覆盖正常文件内容、写入网马(webshell)、控制服务器
(3)绕过手法:
①前端绕过
②后端绕过
- 黑名单绕过:生僻扩展名绕过、大小写、空格、点、::$DATA、图片马、.htaccess
- 白名单绕过:00截断、条件竞争
(4)防护思路:
①使用白名单但策略核查上传的文件类型
②升级网站组件
③解析漏洞
upload-labs闯关04-12
upload-labs是一个包含了各种上传漏洞的靶场,搭建地址:https://github.com/c0ny1/upload-labs
Pass-04
1、查看源码可以看到此处也做了黑名单过滤,过滤的内容还不少
2、此处黑名单没有过滤.htaccess后缀,所以此处可以上传.htaccess文件进行绕过
3、.htaccess文件生效的前提条件一为httpd.conf文件中mod_rewrite模块开启,二为相同文件中的AllowOverride为All,然后就可以在网站目录下创建.htaccess文件
4、新建文本文档,构造内容:AddType application/x-httpd-php .jpg,因为windows环境下创建文件必须得有文件名,所以得将文件另存为".htaccess"
5、将.htaccess上传之后接着就可以将要上传的php文件后缀改为jpg从而进行绕过,注意这里使用老版本的phpstudy才能成功,原因我也不知道
6、解析成功
Pass-05
1、查看源码之后发现.htaccess文件也进入了黑名单,但是仔细一看并没有转换为小写,因此可以通过大写绕过
2、解析成功
Pass-06
1、查看源码之后虽然转化了小写,但是仔细一看并没有去除空格,因此可以通过加空格绕过,Windows下xx.jpg[空格] 或xx.jpg.这两类文件都是不允许存在的,若这样命名,windows会默认除去空格或点,虽然会删除末尾的点,但是不会删除末尾的空格,因此bp抓包,上传一个.php[空格].文件即可
2、解析成功
Pass-07
1、查看源码之后虽然首尾去空了,但是仔细一看并没有尾部去点,因此可以通过加点绕过
2、解析成功
Pass-08
1、查看源码之后虽然尾部去点了,但是仔细一看并没有去除::$DATA,因此可以通过加::$DATA绕过,注意仅windows适用
2、解析成功
Pass-09
1、查看源码发现代码已经写得挺完整了,但是仔细一想每个函数只会执行一次,因此可以通过加点加空格再加点来绕过黑名单,经过过滤之后还剩一个点
2、解析成功
Pass-10
1、查看源码之后发现这里使用了str_ireplace函数使用空格替代黑名单,但是可以通过双写后缀名绕过
2、解析成功
Pass-11
1.查看源码发现此处使用了白名单,限制只能上传jpg,png,gif格式,但是在进行move_uploaded_file前,利用$_GET[‘save_path‘]和随机时间函数拼接成文件存储路径,利用GET传入构造文件存储路径,导致服务器最终存储的文件名可控,可以利用这个点进行绕过,这里利用0x00进行截断
2、首先将php的版本调至小于5.3.4
3、然后查看php.ini配置文件中的magic_quotes_gpc是否为OFF
4、上传后缀为jpg的木马文件后抓包
5、在save_path后增加木马文件名和%00,此时就可以进行php解析了
6、解析成功
Pass-12
1、查看源码,此处与Pass-11相似,不同的是请求方法改成了POST方法,原理都是一样的
2、不过需要注意的是两种方法的截断有点区别,%00通过get方式传递到服务器会被自动解码,所以就变成了ascii码中数值0对应的那个字符(null),这才能达到截断的目的,但是如果是通过post方式的话,加入%00不会被服务器解码,只会原样被参数变量接收,所以这里要通过修改post数据的十六进制来达到截断的目的
3、同样抓包,增加木马文件名和a,此处a只是为了定位
4、点击上方的Hex查看十六进制,找到phpa的十六进制数,将a的十六进制改成00
5、点击Go,发现木马已写入
6、解析正常
以上是关于文件上传及upload-labs闯关的主要内容,如果未能解决你的问题,请参考以下文章