中间件漏洞|29期

Posted 道格安全

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了中间件漏洞|29期相关的知识,希望对你有一定的参考价值。

全文共3371字,阅读需要7分钟


apache


php常见运行方式有 apache的模块模式(分为mod_php和mod_cgi) cgi模式,fast-cgi模式

  1. cgi模式就是建立在多进程上的, 但是cgi的每一次请求都会有启动和退出的过程(fork-and-execute模式, 启动脚本解析器解析php.ini 初始化运行环境, 载入dll), 这在高并发时性能非常弱.

  2. fast-cgi就是为了解决cgi的问题而诞生的, web server 启动时 会启动fastcgi进程管理器, fastcgi进程管理器读取php.ini文件并初始化, 然后启动多个cgi解释器进程(php-cgi), 当收到请求时,web server会将相关数据发送到fastcgi的子进程 php-cgi中处理.

  3. apache模块模式

    • mod_php模式, apache调用与php相关模块(apache内置), 将php当做apache子模块运行. apache每收到一个请求就会启动一个进程并通过sapi(php和外部通信的接口)来连接php

    • mod_cgi/mod_fcgid模式 使用cgi或者fast-cgi实现.


而php版本分为nts(None-Thread Safe) 和 ts(Thread Safe), 在windows中创建线程更为快捷,而在linux中创建进程更快捷,在nts版本下 fast-cgi拥有更好的性能所以windows下经常采用fast-cgi方式解析php. 所以在nts版本里面是没有mod_php (phpxapachexxx.dll)模块的.


   
     
     
   
AddHandler: AddHandler php5-script .jpg AddHandler fcgid-script .jpg 在文件扩展名与特定处理器之间建立映射Addtype: AddType application/x-httpd-php .jpg

1. 多名后缀

如:

   
     
     
   
flag.php.aaa 就会解析为php文件


其中php文件后缀

   
     
     
   
".+\.ph(p[345]?|t|tml)\."php,php3,php4,php5,pht,phtml都会当成php文件执行

2.htaccess

修改.htaccess的文件名修改apache下的conf文件的AccessFileName .htaccess


中间件漏洞|29期


作用


.htaccess文件可以配置很多事情,如是否开启站点的图片缓存、自定义错误页面、自定义默认文档、设置WWW域名重定向、设置网页重定向、设置图片防盗链和访问权限控制。但我们这里只关心.htaccess文件的一个作用——MIME类型修改。


中间件漏洞|29期



生效条件(php解析, 命令执行)


CGI/FastCGI模式下 (在phpinfo中的Server API查看)

.htaccess文件配置


  1. 将jpg后缀文件解析为php文件

   
     
     
   
AddHandler fcgid-script .jpgFcgidWrapper "G:/11111111gongju/phpstudy_pro/Extensions/php/php7.0.9nts/php-cgi.exe" .jpg将php-cgi.exe路径改为对应的php版本即可


中间件漏洞|29期


中间件漏洞|29期


        

        2. 执行命令(此方法下我无法解析php了)

        AddHandler添加某一特殊文件后缀作为cgi程序


.htaccessOptions +ExecCGIAddHandler cgi-script .jpgtest.jpg!C:/Windows/System32/cmd.exe /c start notepadtest必须要有两排数据 第二排随意方法二:打开任意文件就执行命令.htaccessOptions +ExecCGI(如果配置文件中有则不用添加)AddHandler fcgid-script .jpgFcgidWrapper "C:/Windows/System32/cmd.exe /c start calc.exe" .jpg


中间件漏洞|29期


这与apache的conf/vhosts文件夹中的配置相同, 这个文件夹可以在单个ip创建不同域名的配置文件.


  1. 使用SetHandler将目录下所有文件视为cgi程序

SetHandler cgi-script或者SetHandler fcgid-scriptFcgidWrapper "C:/Windows/System32/cmd.exe /c start calc.exe
不需要添加后缀

   

     4. 使用相对路径

无法使用绝对路径是可以利用一下

在handler模式下

 
  
配置文件中在对应目录下 如: /var/www/html添加 AllowOverride All
windows下Apache要加载mod_Rewrite模块,配置文件上写上:LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so重启apache
AddType application/x-httpd-php .xxxAddHandler application/x-httpd-php .xxx 将xxx后缀作为php解析SetHandler application/x-httpd-php 将该目录下所有文件及其子文件中的文件当做php解析
SetHandler application/x-httpd-php
该语句会让Apache把jpg文件解析为php文件。


中间件漏洞|29期


中间件漏洞|29期

防御方法

修改匹配规则

   
     
     
   
<FileMatch ".+\.php$">SetHandler application/x-httpd-php</FileMatch>


禁止.php.这样的文件执行

   
     
     
   
<FileMatch ".+\.ph(p[3457]?|t|tml)\.">Require all denied</FileMatch>


.htaccess包含文件

   
     
     
   
php_value auto_prepend_file "test.jpg" 文件开始插入php_value auto_append_file "test.jpg" 文件结束插入
利用伪协议 php_value auto_prepend_file php://filter/convert.base64-decode/resource=test.jpg
test.jpg <?php phpinfo();?>


其他利用方式



查看apache服务器信息

   
     
     
   
SetHandler server-status


绕过preg_math

设置回溯限制 pcre.backtrack_limit给pcre设定了一个回溯次数上限,默认为1000000,如果回溯次数超过这个数字,preg_match会返回false,在,htaccess中手动修改这个限制
php_value pcre.backtrack_limit 0php_value pcre.jit 0

使.htaccess可以访问
编辑.htaccess<Files ~ ".htaccess"> Require all granted Order allow,deny Allow from all</Files>

将.htaccess作为shell
   
     
     
   
<Files ~ ".htaccess"> Require all granted Order allow,deny Allow from all</Files>
SetHandler application/x-httpd-php
#<?php phpinfo();?>注意#号

绕过

   
     
     
   
反斜线绕过SetHa\ndler appli\cation/x-ht\tpd-php
文件中不能包含某些关键字符上传base加密的文件利用php_value auto_prepend_file包含文件时base解密
包含session文件
php_value auto_append_file "/tmp/sess_session文件名"php_value session.save_path "/tmp" # session文件储存位置php_flag session.upload_progress.cleanup off # session上传进度

.use.ini

.usr.ini不只是nginx专有的, 只要是以 fastcgi 方式运行php的 都能够使用(apache/nginx/iis), 作用相当于可以自定义的php.ini文件

   
     
     
   
auto_prepend_file=123.jpg 文件前包含auto_append_file = 123.jpg文件后包含

让目录下的所有php文件自动包含123.jpg文件

目录遍历

httpd.conf

Options+Indexes+FollowSymLinks +ExecCGI 改为 Options-Indexes+FollowSymLinks +ExecCGI

中间件漏洞|29期



nginx

文件名解析漏洞


影响版本:Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7

location ~ \.php$ { include fastcgi_params;
fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT /var/www/html;}

当nginx匹配到.php结尾的文件时就将其当做php文件解析

当我们请求test.jpg[0x20][0x00].php时, 就会将其匹配为php文件, 但是nginx却认为这是jpg文件, 将其设置为SCRIPT_FILENAME的值发送给fastcgi, fastcgi根据SCRIPT_FILENAME的值进行解析造成漏洞

我们只需上传一个空格结尾的文件(如1.jpg空格), 访问1.jpg空格[0x00].php就行

可以先发写为1.jpgaa.php, 然后再hex格式中修改为20 00


中间件漏洞|29期


文件后缀解析


源文件为test.jpg访问时改为test.jpg/x.php解析为php(x随意)

   
     
     
   
1. 在高版本的php中关闭security.limit_extensions(在php-fpm.conf直接删除) 一般为security.limit_extensions php只允许.php文件执行, 添加 .jpg 将jpg文件作为php文件执行, 需要重启php-fpm2. php.ini中设置cgi.fix_pathinfo=1 当访问/test.jpg/x.php时 若x.php不存在则向前解析


中间件漏洞|29期


修复php.ini 中的 cgi.fix_pathinfo=0 访问后就是404将/etc/php5/fpm/pool.d/www.conf 添加 security.limit_extensions = .php
 
  

CRLF

http的报文就是CRLF分隔的(回车+换行)

若nginx在解析url时将其解码则会造成注入


   
     
     
   
错误的配置文件location / { return 302 https://$host$uri; }


详细可参考: Bottle HTTP 头注入漏洞探究 | 离别歌 (leavesongs.com)

新浪某站CRLF Injection导致的安全问题 | 离别歌 (leavesongs.com)


   
     
     
   
在请求时加上/%0d%0a%0d%0a<img src=1 onerror=alert(/xss/)>(%0d%0a==>回车+换行)


目录穿越


alias为目录配置别名时, 如果没有没有添加/

nginx.conf修改为


   
     
     
   
location /files { #这里files就没有闭合 autoindex on; alias /home/;


访问files../即可造成目录穿越


   
     
     
   
修复: 将/files闭合 ==> /files/


中间件漏洞|29期


add_header覆盖


错误配置文件

Nginx配置文件子块(server、location、if)中的add_header,将会覆盖父块中的add_header添加的HTTP头


add_header Content-Security-Policy "default-src 'self'";add_header X-Frame-Options DENY;
location = /test1 { rewrite ^(.*)$ /xss.html break;}
location = /test2 { add_header X-Content-Type-Options nosniff; #覆盖掉父块中的配置 rewrite ^(.*)$ /xss.html break;}

中间件漏洞|29期



IIS8

cve-2017-7269


iis 6.0 开启webdav, 攻击前记得拍摄快照!!!!!


中间件漏洞|29期


exp: zcgonvh/cve-2017-7269: fixed msf module for cve-2017-7269 (github.com)

直接set rhost然后exploit


中间件漏洞|29期


直接打是用在iis没有绑定主机时


中间件漏洞|29期


如果绑定了就需要输入物理路径长度 (如: c:\inetpub\wwwroot\ 就是19)

修改路径为c:\inetpub\wwwroot1111111


中间件漏洞|29期


使用脚本爆破(Windows-Exploit/IIS6_WebDAV_Scanner at master · admintony/Windows-Exploit (github.com)


中间件漏洞|29期


   
     
     
   
set PhysicalPathLength 26

然后即可攻击成功


PUT漏洞


条件 IIS6.0 开启WebDAV和来宾用户写权限

使用PUT方式, 上传txt文件(直接上传asp文件会失败)


中间件漏洞|29期


然后利用move将txt文件修改为asp, 变为可执行脚本 蚁剑连接


中间件漏洞|29期


记得在web扩展中开启active server pages


中间件漏洞|29期

中间件漏洞|29期


短文件名猜测


windows下为兼容MS-DOS而生成的短文件

只显示前6个字符, 后面的字符使用~1,~2等等代替, 后缀只显示前3个字符. 并且全部以大写字母显示

文件名大于9或者后缀大于4才会生成短文件名, 使用dir /x查看短文件名


影响版本


IIS 1.0,Windows NT 3.51

IIS 3.0,Windows NT 4.0 Service Pack 2

IIS 4.0,Windows NT 4.0选项包

IIS 5.0,Windows 2000

IIS 5.1,Windows XP Professional和Windows XP Media Center Edition

IIS 6.0,Windows Server 2003和Windows XP Professional x64 Edition

IIS 7.0,Windows Server 2008和Windows Vista

IIS 7.5,Windows 7(远程启用 或没有web.config)

IIS 7.5,Windows 2008(经典管道模式)

IIS使用.Net Framework 4时不受影响


漏洞成因


使用短文件名访问存在的文件时会返回404, 否则返回400
如存在aaaaaaaaaa.txt 短文件名为 AAAAAA~1.TXT的文件
访问http://xxxxx/A*~1.*/.aspx会返回404
通过逐步增加字符找出文件的文件名


缺点:


   
     
     
   
  • 只能找出前6个字符和后缀的三个字符

  • 只能猜解有短文件名的文件

  • 不支持中文

  • iis和.net都需要满足


漏洞修复


升级.net到4.0及以上版本
修改注册表, HKEY\ LOCAL MACHINE\\SYSTEM\\CurrentControlSet\\Control\\FileSystem中的 NtfsDisable8dot3 Name Creation值为1,使其不创建短文件名


后缀解析漏洞


   
     
     
   
cer asa cdx 都会当做asp文件解析但是我在windows server 2003 + iis 6.0下只有cer可以


漏洞原因:


当访问不存在文件时返回404, 访问不存在短文件名时返回400


中间件漏洞|29期


版本: iis 6.0

  1. xxx.asp文件夹里面的文件都会以asp解析


中间件漏洞|29期


;截断

xxx.asp;.txt会以asp文件执行

中间件漏洞|29期


遇到php文件时


iis 7.5

当iis遇见php后缀文件时, 将其交给php处理, 当php开启cgi.fix_pathinfo时会处理文件, 如同nginx一样
所以输入test.jpg/.php就会当场php处理


参考: 

  • 关于CGI和FastCGI的理解 - 天生帅才 - 博客园 (cnblogs.com)(https://xz.aliyun.com/t/6801)

  • .htaccess利用与Bypass方式总结 - 安全客,安全资讯平台 (anquanke.com)(https://www.anquanke.com/post/id/205098)

  • Web中间件漏洞总结之Nginx漏洞 - 先知社区 (aliyun.com)https://xz.aliyun.com/t/6783




愿我们

一起努力

一起学习


长按二维码关注

道格安全

以上是关于中间件漏洞|29期的主要内容,如果未能解决你的问题,请参考以下文章

高危漏洞预警39期:Struts2 REST插件XStream远程代码执行漏洞

中间件漏洞合集

Android App 安全的HTTPS 通信

第12阶段 SRC安全应急响应中心漏洞挖掘视频教程第七期课程 9.代码执行和命令执行漏洞基础与SRC挖掘经验

安全测试 web安全测试 常规安全漏洞 可能存在SQL和JS注入漏洞场景分析。为什么自己没有找到漏洞,哪么可能存在漏洞场景是?SQL注入漏洞修复 JS注入漏洞修复 漏洞存在场景分析和修复示例(代码片段

如何定义对话框片段的重力?