zoukankan      html  css  js  c++  java
  • CTFWEB:经典文件上传漏洞

    双写绕过正则

    直接传个 php 文件上去会被过滤掉。

    将这个php文件修改后缀名为 jpg 上传,能上传说明前端有文件过滤功能。

    抓包修改文件后缀为 php。

    但是文件传输成功后,系统给出的路径没有“php”后缀,用蚁剑连接也连不上,说明此处后端有正则表达式替换非法文件后缀。

    使用双写后缀绕过正则表达式,双写后的后缀名为“pphphp”,正则表达式匹配时会将中间的“php”删除掉,闭合剩下的字符串构成“php”后缀。根据网页回显的文件路径来看,双写成功绕过正则替换。

    使用蚁剑连接成功。

    抓包修改后缀绕过前端

    先传个正常的文件看看,可以看到文件上传后原本的文件名被改成了一个 hash 值。

    但感觉这没啥卵用啊,上传一句话木马,直接改后缀名为 jpg,通过前端的过滤后抓包把文件后缀改为 php,上传成功了。

    使用蚁剑连接成功。

    大小写绕过黑名单

    先传个正常的文件看看,可以看到文件上传后原本的文件名被改成了一个 hash 值。

    但是这次上传一句话木马,直接改后缀名为 jpg,通过前端的过滤后抓包把文件后缀改为 php,上传失败了,说明后端也有验证。

    由于此处提示的是 php 文件是不合法的,并不是提示我们哪些文件是合法的,所以判断这里是黑名单过滤。
    尝试其他文件后缀例如“php2”、“php3”、“php5”等都被过滤了,所以尝试大小写绕过,修改后缀名为“Php”,上传成功。

    说明后端没有统一转换成大写或者小写再做检验,使用蚁剑连接成功。

    ASP 截断绕过白名单

    先传个正常的文件看看,发现此处的后端是 asp。

    asp 的话我们传输的就是 asp 的一句话木马,文件后缀是“.asp”,但是网页回显传的文件不合法。

    <%eval request("flag")%>
    


    使用 asp 截断来绕过后端的过滤,在遇到 NULL(\x00) 字符时,处理函数会把该字符当做结束标记,这就可以在遍历结尾处去除不想要的字符。
    此处介绍如何使用 Burp 进行截断,“%00”不能直接以字符的形式写出来,我们可以在想要放置截断的地方写个“+”号。

    然后切换到 Hex 以十六进制查看报文,将加号所在的地方由“2b”改为“00”。


    当传输的文件名是“asp.asp%00.jpg ”,被 asp 解析保存之后就会变成 a.asp,后面的 .jpg 就会被 %00 截断了。

    上传成功,使用蚁剑连接,记得要把连接类型改为“ASP”。

    PHP 截断绕过白名单

    先传个正常的文件,上传成功。

    上传一句话木马,直接改后缀名为 jpg,通过前端的过滤后抓包把文件后缀改为php,上传失败了,说明后端也有验证。

    提示的是 php 文件是不合法的,同时提示我们哪些文件是合法的,所以判断这里是白名单过滤。
    此处用到的是 PHP 截断漏洞,在遇到 NULL(\x00) 字符时,处理函数会把该字符当做结束标记,这就可以在遍历结尾处去除不想要的字符。

    在目录设置的截断,目录为:“/uploading/345.php%00”,传输的文件为345.jpg。上传成功后显示文件保存的目录是“/uploading/345.php%00345.jpg”,由于有截断漏洞所以实际上是“/uploading/345.php”,这样就成功让脚本以 PHP 文件被解析。

    使用蚁剑连接成功,可以看到由于截断漏洞后面的“345.jpg”没有作为文件的命名。

    不过 PHP 的截断漏洞在较新的版本早已被修复了,所以目前的环境下很少能利用它。

    IIS6.0 目录路径检测解析绕过

    直接传个 php 文件,前端就提示我上传的文件不合法。

    抓包修改后缀名为 php,后端提示传输的文件不是图片也不能成功,说明后端有过滤功能。

    将一句话木马文件的后缀名直接改为“jpg”,也上次失败,后端提示传的不是图片,所以后端具有根据内容检查文件类型的功能。

    因此此处上传正常的图片,或者上传图片马才能成功,“123.png”是图片马。

    此处利用的是 IIS6.0 站上的目录路径检测解析绕过上传漏洞,当我们使用的服务器都是 Windows2003,并且使用的服务为 IIS6.0 时,就可能存在。
    设置文件路径名为“uploading/234.php;”,文件名为“234.png”,由于 IIS 服务器会从头部查找查找"."号,获得“uploading/234.php;234.png”。接着查找到";",有则内存截断,所以这个请求会当做“uploading/234.php”进行解析。通过这个方法,我们就可以将图片马以“php”为后缀保存在服务器上。

    使用菜刀连接成功。

    Nginx CVE-2013-4547 漏洞

    和上一个进行的测试差不多,其中 123.png 是图片马。


    由于此处的服务器是,所以可以利用 Nginx 的 CVE-2013-4547(文件名逻辑漏洞),影响版本是 Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7。该漏洞利用了 Nginx 错误的解析了 URL 地址,导致可以绕过服务端限制,从而解析 PHP 文件,造成命令执行的危害。
    根据 nginx.conf 文件中 location 中的定义,以 .php 结尾的文件都解析为php。若我们访问的文件名为“123.png/123.php”,该文件名以 .php 结尾可以被 FastCGI 接收,FastCGI 在读取文件名时被 00 截断,导致读取的图片马以 php 文件的形式被解析。

    所以蚁剑连接时在图片马的目录后面加个“/123.php”,即可连接成功。

    Apache 服务器上传 .htaccess 文件

    按照常规进行简单的测试,此处提示的是 php 文件是不合法的,同时提示我们哪些文件是合法的,所以判断这里是白名单过滤。


    “.htaccess”文件或者称为分布式配置文件,它是 Apache 服务器中的配置文件,提供了针对每个目录设置不同的配置的方法。有些服务器在上传认证时没有拦截.htaccess文件上传,就会造成恶意用户利用上传 .htaccess 文件解析漏洞,来绕过验证进行上传WEBShell,从而达到控制网站服务器的目的。
    首先我们编写一个 .htaccess 文件,打开记事本编写代码,然以文件名“.htaccess”进行保存。

    AddType application/x-httpd-php .png
    


    将其进行上传,因为 .htaccess 是 apache 服务器中的一个配置文件,不在上传的文件的黑名单之内,所以 .htaccess 文件是可以上传成功。

    接着我们再上传图片马。

    由于 .htaccess 文件上传之后就生效了,此时所有的 png 文件都会以 php 文件的形式被解析,使用蚁剑连接成功。

    双文件上传

    打开网页 F12 查看源码,发现有一个隐藏的 Input 标签。

    此处可以使用双文件上传,意思是通过上传两个或多个文件去突破。利用方式是在存在双文件上传漏洞的页面中,构造另一个文件提交的 html 标签,然后第一个上传文件是符合条件的(.jpg、.png、.gif 等),第二个上传文件是一句话木马或者 webshell。
    上传点支持多文件上传,但是却只对第一个文件做了过滤,所以上传只对第一个文件后缀名进行检测,对第二个文件不进行检测直接上传到服务器。这样就可以突破上传限制,成功上传木马到服务器。
    将这个标签修改为文件上传的标签,然后上传第二个文件。

    提交文件,2个文件都上传成功。

    使用蚁剑连接成功。

    这里也可以使用 ASP 截断的方法可以上传成功。

  • 相关阅读:
    Mysql(二)
    Mysql(一)
    JS图表插件(柱形图、饼状图、折线图)
    如何让Table中的第一列和第二列的值相乘然后赋值给第三列
    js生成验证码并验证
    IIS配置默认文档
    DropDownList如何添加一个空白的选项
    GridView如何合并同类项
    .NET后台如何获取前台HMTL控件的值
    Json数据报错
  • 原文地址:https://www.cnblogs.com/linfangnan/p/15784968.html
Copyright © 2011-2022 走看看