参考借鉴
client check
在桌面新建一个文件夹,准备一个hello.php文件,文件写入如下代码
<?phpinfo();?>
直接上传php文件
出现报错,并且发现文件校验发生在客户端,所以只需要绕过浏览器就可以上传文件
方法1
关闭浏览器JavaScript解析器
FireFox地址栏输about:config-->搜索javascript.enabled并将其关闭(默认开启)关闭后便可直接上传php文件
直接上传php文件
根据文件保存路径查看上传的文件
方法2
burpsuite抓包改后缀
修改文件后缀名为png
打开BP,开启拦截请求
选择改了后缀的png文件上传
查看BP抓的包
后缀名改回php,重发
文件上传成功
根据文件保存路径查看上传的文件
MIME type
方法1
burpsuite抓包改后缀,好处是只要这个文件上传成功了,MIME type肯定是对的
同上题方法2,具体步骤参照上文
方法2
修改MIME type,好处是服务器上不会多一个没用的文件
BP开启拦截-->上传txt文件-->将拦截的包发给Repeater
修改Content Type
文件上传成功
根据文件保存路径查看上传的文件
getimagesize
getimagegesize()函数用于获取图像代销及相关信息,成功返回一个数组,失败则返回一个错误信息,总之是一个判断图片大小和类型的一个函数,也避免了直接更改后缀名的绕过
需要一张图片+一个php文件,制作一张图片马
使用copy命令合并这两个文件
copy hello.png /b + hello.php /a shell.png
将合并的文件上传
文件上传成功
根据文件保存路径查看上传的文件
成功的访问了,但是并没有解析,说明还是还是没有用的,这里就要配合文件包含漏洞来使用才能正常解析
将文件包含的URL中的filename进行修改,利用文件包含漏洞来解析上传的文件:
http://127.0.0.1/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2024/06/20/6437336673eba92c5bc524695718.png&submit=提交查询
解析成功