客户端检查
可以看出来是前端进行判断的
所以删除这个事件即可直接上传php文件
(前端的验证是最不安全的)
通过http://192.168.3.3/pikachu-master/vul/unsafeupload/uploads/2.php连接菜刀获取权限
服务器检查 mime type
在HTTP中,MIME类型被定义在Content-Type header中
每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类
通常只有一些在互联网上获得广泛应用的格式才会获得一个 MIME Type,如果是某个客户端自己定义的格式,一般只能以 application/x- 开头
常见的MIME类型
超文本标记语言文本 .html,.html text/html
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
GIF图形 .gif image/gif
JPEG图形 .ipeg,.jpg image/jpeg
au声音文件 .au audio/basic
MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
在本实验中,Burp中修改content-type:image/jpeg即可
访问http://localhost/pikachu-master/vul/unsafeupload/uploads/2.php
再使用菜刀连接即可
getimagesize()
这个函数功能会对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求的
所以不能通过修改content-type来达到目的,需要一张真正的图片
将一句话放入图片中
然后上传图片
访问该路径
但是此时依旧只是.jpg 这个php木马并没有执行
使用文件包含
此处可以利用文件包含
http://localhost/pikachu-master/vul/fileinclude/fi_local.php?filename=…/…/unsafeupload/uploads/2020/08/10/6527365f31155555ec4077676993.jpg&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2
使用相对路径
将上述路径复制到菜刀输入密码,成功连接
使用畸形解析
首先切换为nginx+php-5.4.45n
访问刚刚的图片地址但是在最后添加/344.php(不存在的php文件)
由于解析漏洞,会以php来解析图片文件
然后使用菜刀,输入该地址以及密码,成功连接,并且可以从中看到刚刚上传的图片