中间件漏洞
apache
php常见运行方式有 apache的模块模式(分为mod_php和mod_cgi) cgi模式,
fast-cgi模式
cgi模式就是建立在多进程上的, 但是cgi的每一次请求都会有启动和退出的过程(fork-and-execute模式, 启动脚本解析器解析php.ini 初始化运行环境, 载入dll), 这在高并发时性能非常弱.
fast-cgi就是为了解决cgi的问题而诞生的, web server 启动时 会启动fastcgi进程管理器, fastcgi进程管理器读取php.ini文件并初始化, 然后启动多个cgi解释器进程(php-cgi), 当收到请求时,web server会将相关数据发送到fastcgi的子进程 php-cgi中处理.
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)模块的.
1 | AddHandler: |
1. 多名后缀
如:
1 | flag.php.aaa 就会解析为php文件 |
其中php文件后缀
1 | ".+\.ph(p[345]?|t|tml)\." |
2.htaccess
修改
.htaccess
的文件名修改apache下的conf文件的AccessFileName .htaccess
作用
.htaccess文件可以配置很多事情,如是否开启站点的图片缓存、自定义错误页面、自定义默认文档、设置WWW域名重定向、设置网页重定向、设置图片防盗链和访问权限控制。但我们这里只关心.htaccess文件的一个作用——MIME类型修改。
生效条件(php解析, 命令执行)
在CGI/FastCGI
模式下 (在phpinfo中的Server API查看)
.htaccess
文件配置
- 将jpg后缀文件解析为php文件
1 | AddHandler fcgid-script .jpg |
执行命令(此方法下我无法解析php了)
AddHandler添加某一特殊文件后缀作为cgi程序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16.htaccess
Options +ExecCGI
AddHandler cgi-script .jpg
test.jpg
#!C:/Windows/System32/cmd.exe /c start notepad
test
必须要有两排数据 第二排随意
方法二:
打开任意文件执行命令
Options +ExecCGI(如果配置文件中有则不用添加)
AddHandler fcgid-script .jpg
FcgidWrapper "C:/Windows/System32/cmd.exe /c start calc.exe" .jpg
这与apache的conf/vhosts文件夹中的配置相同, 这个文件夹可以在单个ip创建不同域名的配置文件.
- 使用
SetHandler
将目录下所有文件视为cgi程序
1 | SetHandler cgi-script |
使用相对路径
无法使用绝对路径是可以利用一下
在handler模式下
1 | 1. 配置文件中在对应目录下 如: /var/www/html添加 AllowOverride All |
1 | 1. AddType application/x-httpd-php .xxx |
防御方法
修改匹配规则
1
2
3<FileMatch ".+\.php$">
SetHandler application/x-httpd-php
</FileMatch>禁止.php.这样的文件执行
1
2
3<FileMatch ".+\.ph(p[3457]?|t|tml)\.">
Require all denied
</FileMatch>
.htaccess包含文件
1 | php_value auto_prepend_file "test.jpg" 文件开始插入 |
其他利用方式
查看apache服务器信息
1 | SetHandler server-status |
绕过preg_math
1 | 设置回溯限制 |
使.htaccess
可以访问
1 | 编辑.htaccess |
将.htaccess
作为shell
1 | <Files ~ ".htaccess"> |
绕过
1 | 反斜线绕过 |
3. .use.ini
.usr.ini
不只是nginx专有的, 只要是以 fastcgi 方式运行php的 都能够使用(apache/nginx/iis), 作用相当于可以自定义的php.ini
文件
1 | auto_prepend_file=123.jpg 文件前包含 |
让目录下的所有php文件自动包含123.jpg
文件
4. 目录遍历
httpd.conf
下
1 | Options+Indexes+FollowSymLinks +ExecCGI 改为 Options-Indexes+FollowSymLinks +ExecCGI |
nginx
文件名解析漏洞
影响版本:Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7
1 | location ~ \.php$ { |
当nginx匹配到
.php
结尾的文件时就将其当做php文件解析当我们请求
test.jpg[0x20][0x00].php
时, 就会将其匹配为php文件, 但是nginx却认为这是jpg文件, 将其设置为SCRIPT_FILENAME的值发送给fastcgi, fastcgi根据SCRIPT_FILENAME
的值进行解析造成漏洞
我们只需上传一个空格结尾的文件(如1.jpg空格
), 访问1.jpg空格[0x00].php就行
1 | 可以先发写为1.jpgaa.php, 然后再hex格式中修改为20 00 |
文件后缀解析
源文件为test.jpg
访问时改为test.jpg/x.php
解析为php(x随意)
1 | 1. 在高版本的php中关闭security.limit_extensions(在php-fpm.conf直接删除) |
1 | 修复 |
CRLF
http的报文就是CRLF
分隔的(回车+换行)
若nginx在解析url时将其解码则会造成注入
1 | 错误的配置文件 |
详细可参考: Bottle HTTP 头注入漏洞探究 | 离别歌 (leavesongs.com)
新浪某站CRLF Injection导致的安全问题 | 离别歌 (leavesongs.com)
1 | 在请求时加上 |
目录穿越
alias
为目录配置别名时, 如果没有没有添加/
nginx.conf
修改为
1 | location /files { #这里files就没有闭合 |
访问files../
即可造成目录穿越
1 | 修复: 将/files闭合 ==> /files/ |
add_header覆盖
错误配置文件
Nginx配置文件子块(server、location、if)中的add_header
,将会覆盖父块中的add_header
添加的HTTP头
1 | add_header Content-Security-Policy "default-src 'self'"; |
IIS
cve-2017-7269
iis 6.0 开启webdav, 攻击前记得拍摄快照!!!!!
exp: zcgonvh/cve-2017-7269: fixed msf module for cve-2017-7269 (github.com)
直接set rhost然后exploit
直接打是用在iis没有绑定主机时
如果绑定了就需要输入物理路径长度 (如: c:\inetpub\wwwroot\
就是19)
修改路径为c:\inetpub\wwwroot1111111
使用脚本爆破(Windows-Exploit/IIS6_WebDAV_Scanner at master · admintony/Windows-Exploit (github.com)
1 | set PhysicalPathLength 26 |
然后即可攻击成功
PUT漏洞
条件 IIS6.0 开启WebDAV和来宾用户写权限
使用PUT方式, 上传txt文件(直接上传asp文件会失败)
然后利用move将txt文件修改为asp, 变为可执行脚本 蚁剑连接
记得在web扩展中开启active server pages
短文件名猜测
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时不受影响
漏洞成因
1 | 使用短文件名访问存在的文件时会返回404, 否则返回400 |
缺点:
1 | 只能找出前6个字符和后缀的三个字符 |
漏洞修复
1 | 升级.net到4.0及以上版本 |
后缀解析漏洞
1 | cer asa cdx 都会当做asp文件解析 |
漏洞原因:
当访问不存在文件时返回404, 访问不存在短文件名时返回400
版本: iis 6.0
- xxx.asp文件夹里面的文件都会以asp解析
;
截断1
xxx.asp;.txt会以asp文件执行
- 遇到php文件时
iis 7.5
1 | 当iis遇见php后缀文件时, 将其交给php处理, 当php开启cgi.fix_pathinfo时会处理文件, 如同nginx一样 |
参考: 关于CGI和FastCGI的理解 - 天生帅才 - 博客园 (cnblogs.com)
.htaccess利用与Bypass方式总结 - 安全客,安全资讯平台 (anquanke.com)
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!