粤嵌科技毕业实习Day16 粤嵌科技毕业实习Day16

文件上传漏洞的检测

  • 客户端js校验(也称前端验证,一般只校验后缀名)

    • 一般都是在网页上写一段javascript脚本,校验上传文件的后缀名,有白名单形式也有黑名单形式。
    • 判断方式:在浏览加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而此时并没有发送数据包。前端验证非常不可靠,通过修改数据包后缀名即可绕过,甚至关闭js都可以尝试绕过。
    • 服务端校验:
      • 文件头content-type字段校验(image/gif)
      • 文件内容头校验(GIF89a)
      • 后缀名黑名单校验
      • 后缀名白名单校验
      • 自定义正则校验
  • 前端验证绕过

    • 上传一个带一句话木马的PHP,会弹出提示只能上传的图片类型。这就是典型的前端检测。
    • 我们把这个PHP文件的后缀改为JPG,就会提示上传成功,并开始Burp抓包,然后将JPG的后缀改回为PHP,这样就达到了我们上传PHP木马的目的。
    • 接下来就是连接菜刀,进行getshell。
  • Content-Type方式绕过

    • Content-Type(MediaType),即是Internet Media Type,互联网媒体类型,也叫做MIME类型。在互联网中有成百上千中不同的数据类型,HTTP在传输数据对象时会为他们打上称为MIME的数据格式标签,用于区分数据类型。最初MIME是用于电子邮件系统的,后来HTTP也采用了这一方案。
    • 在HTTP协议消息头中,使用Content-Type来表示请求和响应中的媒体类型信息。它用来告诉服务端如何处理请求的数据,以及告诉客户端(一般是浏览器)如何解析响应的数据,比如显示图片,解析并展示html等等。
    • 所以同样还是Burp抓包,然后找到Content-Type,将里面的类型修改为你想要上传的文件类型就可以成功绕过检测。
  • 绕过黑白名单策略

    • 黑名单绕过
      • 通过上传不受欢迎的php扩展来绕过黑名单。例如:pht,phpt,phtml,php3,php4,php5,php6
  • .htaccess文件绕过

    • htaccess是超文本访问(Hypertext Access)的缩写,是一个基于Apache的Web服务器使用的配置文件,用于控制它所在的目录以及该目录下的所有子目录。

    • AddType application/x-httpd-php .jpg

      这个指令代表JPG会被当做PHP来执行,由于图形化界面无法将文件命名为.htaccess,所以使用CMD命令Ren更改后缀。

      只要把这个.htacess文件上传,之后上传的JPG文件都会被当成PHP解析。

  • 后缀大小写绕过

    • 我们将做成图片马直接将后缀改成Php,进行上传。
    • 让文件的后缀由大小写字母穿插组成。
  • 文件后缀(空)绕过

    • 这里相对于前面关卡的代码是少了一个消除两旁空格的函数trim();所以我们我们可以通过在后缀加个空格尝试绕过,黑名单机制中,是不允许上传什么,但如果我们传上去的文件与所限制的稍有不一样,就可以直接绕过黑名单了
    • 我们进行将带有一句话的php文件上传并抓包,在后缀加个空格,上传。
  • 文件后缀(点)绕过

    • 这里是少了一个删除末尾的点的函数。
    • 我们还是进行将带有一句话的php文件上传并抓包在后缀加个点,上传,在上传到服务器后,服务器会自动将点去掉,只读取前面有用的后缀;
  • ::$DATA(Windows文件流绕过)

    • ::$DATA(Windows文件流绕过)(这里利用到了NTFS交换数据流(ADS),ADS是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都存在许多个数据流。通俗理解,就是其他文件可以“寄宿”在某个文件身上,而在资源管理器中却只能看到宿主文件,找不到寄宿文件。)

    • 例如在cmd命令下运行:echo abcd>>a.txt:b.txt 很明显生成一个a.txt,但是会是空值,因为系统将值写到寄宿文件上去了;

      然后再运行 echo 123>>a.txt::$DATA,是会在a.txt中输出123的,因为

      ::$DATA相当是个空值,不是一个寄宿文件,所以还是会将文件写入到a.txt中去,不修改文件存储过程;

    ​ 在利用Windows特性,可在后缀加上“ ::$DATA ”绕过。

    ​ 跟之前一样的思路,抓包改包绕过。

  • 构造文件后缀绕过

    • 这关好像用了我们前面关卡的所有过滤,那我们可不可以构造一个文件名后缀111.php. .
    • 过滤参数在发现.时会将.去掉,在将空格去掉,最后只剩下111.php. 这样还是可以绕过黑名单机制的,因为111.php.不等于111.php,所以还是能绕过上传;
  • 双写文件后缀绕过

    • 会将符合条件的文件后缀删除,我们只需要将文件后缀进行双写,令他删除后合并就能成功绕过
  • 白名单绕过

    • 00截断

      截断条件:php版本小于5.3.4,php的magic_quotes_gpc为OFF状态

      0x00是十六进制表示方法,是ascii码为0的字符,在有些函数处理时,会把这个字符当做结束符。

      系统在对文件名的读取时,如果遇到0x00,就会认为读取已结束

      GET型00截断

  • POST型00截断

    POST请求中,%00不会被自动解码,需要在16进制中进行修改00

  • 文件包含漏洞

    在PHP中,使用include、require、include_once、require_once函数包含的文件都会被当作PHP代码执行,

    无论文件的名称是什么,只要符合文件内容符合PHP代码规范,都会被当作PHP代码执行。

  • 图片马制作

    copy b.png /b + a.php /a shell.jpg(a表示ascii文件/b表示二进制形式)


上传漏洞利用(2)

打开http://127.0.0.1/upload-labs/

  • Pass-08

    1. 打开Pass-08

    2. 查看提示

      粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16

    3. 查看源码,可知,缺少了检测字符串::$DATA的 代码,可以作为突破口

      粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16

    4. 打开burp suite对上传进行抓包,修改文件名

      粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16

      粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16

    5. 上传成功

      粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16

    6. 打开图片链接http://127.0.0.1/upload-labs/upload//efg.php

      粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16

  • Pass-10

    1. 打开Pass-10

    2. 查看提示

      粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16

    3. 查看源码

      粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16

    4. 上传abc.php,发现上传成功

      粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16

    5. 打开图片链接http://127.0.0.1/upload-labs/upload//abc. 发现尾缀不见了

      粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16

    6. 对abc.php重命名为abc.phphpp,再次上传

    7. 打开图片链接http://127.0.0.1/upload-labs/upload//abc.php

      粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16

  • Pass-11

    1. phpStudy上切换到5.2.17并关闭magic_quotes_gpc

    2. 打开Pass-11

    3. 查看提示

      粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16

    4. 查看源码,可知只允许上传jpg、png、gif文件

      粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16

    5. 重命名jkl.php为jkl.png,打开burp suite开启对图片上传进行抓包

      粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16

    6. 修改路径

      粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16

    7. 打开图片链接http://127.0.0.1/upload-labs/upload/jkl.php

      粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16

  • Pass-12

    1. 打开Pass-12

    2. 查看提示

      粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16

    3. 查看源码,可见这次是post型,不能像get型可以直接修改url达到目的。

      粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16

    4. 开启burp suite,上传ccv.png进行抓包

      粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16

    5. 修改路径

      粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16

      粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16

    6. 将61(a)的修改为00,删除掉

      粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16

      粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16

    7. 上传成功打开图片链接http://127.0.0.1/upload-labs/upload//ccv.php

      粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16

本文作者:AlubNoBug
本文链接:https://www.cnblogs.com/AlubNoBug/p/13696484.html