文件上传漏洞

  • 服务器解析问题的漏洞
  • 文件名的正则检测漏洞
  • 其他的检测方式
  • 关联知识预览

服务器解析问题的漏洞

  1. 在apache服务器中,扩展名是从右往左读的,在未知扩展名时,会自动读取下一个扩展名,像.rar .abc 等扩展名都是不能识别的
  2. 在ngnix中存在空字节漏洞,利用原理感觉比较极限,如果检测方式在遇到00时会抛弃后面的检测,文件test.jpg%00.php就能通过检测,这种情况在ngnix解析文件系统时会把00忽略所以相当于获得了文件test.jpg.php (容易和00截断弄混)
  3. 老版本的IIS中,存在;漏洞,IIS在解析文件名的时候可能将分号后面的内容丢弃,那么test.asp;jpg如果可以绕过的话就能够执行
  4. 老版本的IIS中,如果网站目录/.asp/下的所有内容都将作为asp脚本来解析

文件名的正则检测漏洞

  1. 00截断,形如test.php%00.jpg的文件在$_FILES['file']['name']的时候就已经产生了截断,后端这时候获得的是test.php
  2. 因为是正则表达式,所以可以尝试以下写法能否绕过并被php解释器执行

    test.PhP
    test.php3 test.php4

其他的检测方式

  • HTTP协议规定了上传资源的时候在Header中加上一项文件的MIMETYPE,类型的判断是由浏览器完成的,结果即为HTTP头中的Content-Type,使用burp拦截后修改为image/jpeg 或 text/plain 等即可
  • 后端再验证文件格式,可以为php文件加上相应的幻术头来通过检测,一般加GIF的,因为这个直接加文本GIF89a即可

    | 格式 | 文件头 |
    | ————————– | :————————: |
    | GIF | GIF89a 对应二进制为474946383961 |
    | JPG | FFD8FFE000104A464946 |
    | PNG | 89504E47 |
    | TIFF (tif) | 49492A00 |
    | Windows Bitmap (bmp) | 424D |
    | CAD (dwg) | 41433130 |
    | Adobe Photoshop (psd) | 38425053 |
    | Rich Text Format (rtf) | 7B5C727466 |
    | MS Word/Excel (xls.or.doc) | D0CF11E0 |
    | MS Access (mdb) | 5374616E64617264204A |
    | ZIP Archive (zip), | 504B0304 |
    | RAR Archive (rar), | 52617221 |
    | Wave (wav), | 57415645 |
    | AVI (avi), | 41564920 |
    | Real Media (rm), | 2E524D46 |
    | MPEG (mpg), | 000001BA |
    | MPEG (mpg), | 000001B3 |
    | Quicktime (mov), | 6D6F6F76 |
    | Adobe Acrobat (pdf), | 255044462D312E |
    | Windows Media (asf), | 3026B2758E66CF11 |
    | MIDI (mid), | 4D546864 |

  • 通过.htaccess文件进行的限制,相应的可以使用.htaccess覆盖的方式来进行反制,书写并上传.htaccess文件即可
.htaccess语法 作用
AddType application/x-httpd-php .txt 将.txt文件使用php解释器执行
AddType text/plain .pl .py .php 将以上后缀名的文件以纯文本的形式展示出来
<FilesMatch "\.(php)$"> ForceType text/plain </FilesMatch> 强行让apache将文件识别为你指定的类型
<Files ^(*.jpeg)>order deny,allow deny from all</Files> 使得该文件夹里面只有图片扩展名的文件才可以被访问,其他类型都是拒绝访问
Options -ExecCGI AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi 以上几种类型的文件被访问的时候,会返回403 Forbidden的错误

关联知识预览

文件上传之前我们只是在讨论单纯文件名,文件格式的检测绕过方法,但如果涉及到上传文件的恶意代码检测方面的话,就需要继续考虑文件内容的绕过了,所谓免杀,一句话木马的变种,代码混淆都是与此相关的概念

CTF中文件上传的结合出题点记录

如何上传php可执行文件,这是用到的最多的,也是这篇笔记中尝试去总结的

文件上传+文件包含 在文件包含的笔记中记录了一些情景

文件上传+文件展示 相关的有软连接攻击啥的

文件上传+目录遍历 结合各种目录遍历漏洞得到上传文件的名字