【学习笔记】文件上传解析漏洞-课上核心知识点归纳

久违的双子座   ·   发表于 2020-03-16 22:42:52   ·   技术文章

这人是谁?

我是第八期学员久违的双子座这是我的第六个帖子,希望能坚持下去。
这个【学习笔记】系列,是学习第七期正式课程后,总结记录的内容,供提交作业复习查阅分享交流使用。下面就开始吧!

之前【学习笔记】连接:

本篇文章,是在学习完“文件上传解析漏洞”章节后,总结的老师核心知识点,能起到方便复习与掌握核心知识的作用。补充一点,学过的人都知道,这章只有认真完成靶场和作业,才能学到精华。

本文章仅是基础知识,毕竟第八期课程还未开始,这是自学第七期课程总结来的,算是提前预习吧。如有错误,更各位大佬多多指正!

一、常用到的实用技术

1. 图片马的制作

  • 实用1张图片(越小越好)举例文件名为:1.jpg
  • 藏的内容 (可以使压缩包zip,txt,php等等)例如:1.txt
  • 终端命令
    copy 1.jpg/b + 1.txt 123.jpg // 生成的文件是123.jpg的图片,使用时文件类型改为txt即可

2. 隐写术(windows专用)

echo abcd>>a.txt:b.txt //将abcd写入到b.txt中,生成a.txt,但数据存储在b.txt中
notepad a.txt:b.txt //实用文本见查看写入的信息,如果不是系统自带的工具,需要写明打开软件的具体路径

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

a.txt::$DATA // ::$DATA就是默认不修改文件流的情况,文中储存的数据,此处写明是为了Windows文件流绕过

3. 黑白名单机制

  • 黑名单:不允许上传什么
  • 白名单:只允许上传什么
  • 白名单比黑名单更安全

4. 能被解析的文件扩展名

  • jsp: jspx jspf
  • asp: asa aspx
  • php: php3 php4
  • exe: exee

5 .htaccess文件

6.截断 0x00

  • 阶段:就是将截断符号后面的信息屏蔽,类似万能注入中结尾处 #(— qwe),或者编程中的注释符号。
  • 0x00: 上传文件时,后缀名写成XXX.php%00.jpg上传被认为合法,执行会执行php。

    %00解码后就是0x00

7. IIS6.0解析漏洞

  • 漏洞一:当文件后缀名字为.asa .cer .cdx 也会当做asp去解析,.asa .cer .cdx 都会调用 asp.dll

    可以用来绕过黑名单机制

  • 漏洞二:处理含有特殊符号的文件路径时会出现逻辑错误,从而造成文件解析漏洞。

    • test.asp;.jpg 他将当做asp进行解析

    • test.asp/123.jpg 他将当做asp进行解析

    举例:请求 /aaa.asp;xxxx.jpg。N1:从头部查找查找 “.”号,获得 .asp;xxxx.jpg,查找”;”号,如果有则内存截断,查找”/“,如果有则内存截断,最终反馈给了asp.dll处理

    可以用来绕过白名单

8.PHP-CGI解析漏洞(以前的通杀漏洞)

  • 原理:

    • 当访问www.xx.com/phpinfo.jpg/1.php这个URL时,$fastcgi_script_name会被设置“phpinfo.jpg/1.php”,然后构造成SCRIPT_FILENAME(绝对路径)传递给PHP CGI,如果开启了cgi.fix_pathinfo=1选项(这个默认值就是1,所以没有设置过就是开启),那么就会触发在PHP中的如下逻辑:

    • PHP会认为SCRIPT_FILENAME(绝对路径)是phpinfo.jpg,而1.php是PATH_INFO,所以就会phpinfo.jpg作为PHP文件来解析了.

    • 也是一个逻辑问题,所以说我们只需要在正常的.jpg后面加/.php就可以成功的绕过解析

  • 举例:访问http://www.xxx.com/1.jpg/1.php, 此时的1.JPG会被当做PHP脚本文件来解析。
    此时的1.PHP是不存在的,却可以看到1.JPG已经按照PHP脚本来解析了,问题就出现在这个“1.PHP”上(1.php并不是特定的,可以随机命名)。这就意味着攻击者可以上传任意合法的“图片”(图片木马),然后在URL后面加上“/xxx.php”,就可以获得网站的WEBshell.
    举例原文链接:https://blog.csdn.net/Fly_hps/article/details/79657921

在拥有建立文件夹且可以命名的时候可以使用

二、文件上传基础知识

1. 客户端检验:

  • 一般是在网页上写一段Js脚本,用Js去检测,校验上传文件的后缀名,有白名单也有黑名单。
  • 判断方式:在浏览加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而此时并没有发送数据包,所以可以通过抓包来 判断,如果弹出不准上传,但是没有抓到数据包,那么就是前端验证
  • 前端验证非常不可靠,传正常文件改数据包就可以绕过,甚至关闭JS都可以尝试绕过

2. 服务端检测:

  • 检查Content-Type (内容类型)
  • 检查后缀 (检查后缀是主流)
  • 检查文件头

    上传图片码可以绕过Content_Type和文件头检测

3. 条件竞争绕过原理

  • 后端验证实现逻辑:先上传,再校验,不符合删除,逻辑没问题,但每一步都要花费执行时间

  • 条件竞争绕过原理:打时间差,在文件删除前,先访问到,但如何做到手速比代码执行还快?

  • burp抓包:利用burp抓包,使用线程(同一时间做多件事),同时大量上传,同时大量尝试访问,不断尝试,只要成功一次即可。

以上仅是基础知识点总结,在实操中关键还是浏览器插件代理、配合burp使用,并熟悉数据包基础构造,熟练篡改报文内容。本章学习比较特殊,其实基础不难,关键在靶场实操。

结尾

将点滴记录下来,期待积少成多,化蛹为蝶,量变转化为质变那一刻!

打赏我,让我更有动力~

0 条回复   |  直到 2020-3-16 | 2468 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.