| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> PHP知识库 -> 中间件漏洞总结笔记 -> 正文阅读 |
|
[PHP知识库]中间件漏洞总结笔记 |
中间件常见漏洞总结下面分三种常见的中间件来总结:IIS、apache、nginx,本文参考别人写的中间件漏洞总结,链接放在下面 链接: Web中间件常见漏洞总结.pdf_免费高速下载|百度网盘-分享无限制 (baidu.com) 提取码: vbey 复制这段内容后打开百度网盘手机App,操作更方便哦 IISIIS是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。 IIS目前只适用于Windows系统,不适用于其他操作系统。 解析漏洞IIS 6.x基于文件名,该版本 默认会将 *.asp;.jpg 此种格式的文件名,当成Asp解析。 原理是 : 服务器默认不解析;号及其后面的内容,相当于截断。 基于文件夹名,该版本 默认会将 *.asp/目录下的所有文件当成Asp解析。 另外,IIS6.x除了会将扩展名为.asp的文件解析为asp之外,还默认会将扩展名为.asa,.cdx,.cer解析为asp 从网站属性->主目录->配置 可以看出,他们都是调用了asp.dll进行的解析。 修复建议 由于微软并不认为这是一个漏洞,也没有推出IIS 6.0的补丁,因此漏洞需要自己修复 。 1. 限制上传目录执行权限,不允许执行脚本。 2. 不允许新建目录。 3. 上传的文件需经过重命名(时间戳+随机数+.jpg等) IIS 7.xIIS7.x版本 在Fast-CGI运行模式下,在任意文件,例:test.jpg后面加上/.php,会将test.jpg 解析为php文件。 修复建议 配置cgi.fix_pathinfo(php.ini中)为0并重启php-cgi程序 PHP CGI 中 fix_pathinfo 引起的安全隐患 - buffer的blogs - 博客园 Nginx + PHP CGI的一个可能的安全漏洞 - 风雪之隅 结果如下: PUT任意文件写入IIS Server 在 Web 服务扩展中开启了 WebDAV之后,支持多种请求,配合写入权限,可造成任意文件写入 。 修复建议关闭WebDAV 和 写权限 IIS短文件漏洞一、漏洞描述Internet Information Services(IIS,互联网信息服务)是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。 Microsoft IIS在实现上存在文件枚举漏洞,攻击者可利用此漏洞枚举网络服务器根目录中的文件。 危害:攻击者可以利用“~”字符猜解或遍历服务器中的文件名,或对IIS服务器中的.Net Framework进行拒绝服务攻击。 二、漏洞成因为了兼容16位MS-DOS程序,Windows为文件名较长的文件(和文件夹)生成了对应的windows 8.3 短文件名。 在Windows下查看对应的短文件名,可以使用命令 dir /x 如上图,Downloads对应的短文件名为DOWNLO~1。根据此特性,我们能够通过访问短文件名间接访问它对应的文件。 由于短文件名的长度固定(xxxxxx~xxxx),因此黑客可直接对短文件名进行暴力破解,从而访问对应的文件。 举个例子,有一个数据库备份文件 backup_www.abc.com_20190101.sql,它对应的短文件名是 backup~1.sql 。因此黑客只要暴力破解出 backup~1.sql 即可下载该文件,而无需破解完整的文件名。 短文件名有以下特征: 1) 只有前六位字符直接显示,后续字符用~1指代。其中数字1还可以递增,如果存在多个文件名类似的文件(名称前6位必须相同,且后缀名前3位必须相同)。 2) 后缀名最长只有3位,多余的被截断。 3) 访问构造的某个存在的短文件名,会返回404 4) 访问构造的某个不存在的短文件名,会返回400 三、 漏洞的利用漏洞的利用,需要使用到通配符。在windows中,可以匹配n个字符,n可以为0.判断某站点是否存在IIS短文件名暴力破解,构造payload,分别访问如下两个URL: 1. http://www.xxx.com/*~1****/a.aspx 2. http://www.xxx.com/1234*~1****/a.aspx 这里使用了4个星号,主要是为了程序自动化猜解,逐个猜解后缀名中的3个字符,实际上,一个星号与4个星号没有任何区别(上面已经提到,*号可以匹配空)。 如果访问第一个URL,返回404, 而访问第二个URL,返回400, 则目标站点存在漏洞,判断漏洞存在后,继续猜解目录下是否存在一个a开头的文件或文件夹,访问: http://www.xxx.com/a*~1****/a.aspx 如果存在,将返回404。如此反复,不断向下猜解完所有的6个字符。猜解完之后,得到的序列应该类似: http://www.xxx.com/abcdef*~1****/a.aspx 到了这一步,需要考虑两种情况,如果以abcdef开头的是一个文件夹,则 http://www.xxx.com/abcdef*~1/a.aspx 将返回404. 如果abcdef开头的是一个文件,则自动提交 http://www.xxx.com/abcdef*~1*g**/a.aspx 用a-z的26个字母替换上述g的位置,应该能得到多个404页面。(记住一点,404代表的是存在。)如果下面的地址返回404, http://www.xxx.com/abcde*~1*g**/a.aspx 则代表扩展名中肯定存在g。 按照上面的思路,继续猜解g后面的字符,直到后缀名中的3个字符都猜解完,就可以了。 以上介绍了怎么手工猜解,这个漏洞的意义何在: 1) 猜解后台地址 2) 猜解敏感文件,例如备份的rar、zip、.bak、.SQL文件等。 3) 在某些情形下,甚至可以通过短文件名web直接下载对应的文件。比如下载备份SQL文件。 四、 漏洞的局限性1) 只能猜解前六位,以及扩展名的前3位。 2) 名称较短的文件是没有相应的短文件名的。 3) 需要IIS和.net两个条件都满足 4) 如果文件名前6位带空格,8.3格式的短文件名会补进,和真实文件名不匹配; 5 ) 如果文件夹名前6位字符带点".",扫描程序会认为是文件而不是文件夹,最终出现误报; 6) 不支持中文文件名,包括中文文件和中文文件夹。一个中文相当于两个英文字符,故超过4个中文字会产生短文件名,但是IIS不支持中文猜测。 五、 解决方法1)从CMD命令关闭NTFS 8.3文件格式的支持 Windows Server 2003: (1代表关闭,0代表开启) 关闭该功能:fsutil behavior set disable8dot3 1 Windows Server 2008 R2: 查询是否开启短文件名功能:fsutil 8dot3name query 关闭该功能:fsutil 8dot3name set 1 不同系统关闭命令稍有区别,该功能默认是开启的. 2)或从修改注册表关闭NTFS 8.3文件格式的支持 快捷键Win+R打开命令窗口,输入regedit打开注册表窗口 找到路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem,将其中的 NtfsDisable8dot3NameCreation这一项的值设为 1,1代表不创建短文件 名格式 以上两种方式修改完成后,均需要重启系统生效。 Note:此方法只能禁止NTFS8.3格式文件名创建,已经存在的文件的短文件名无法移除,需要重新复制才会消失。 例:将web文件夹的内容拷贝到另一个位置,如c:\www到c:\ww,然后删除原文件夹,再重命名c:\ww到c:\www。 参考文章IIS短文件名泄露漏洞修复_bylfsj的博客-CSDN博客_iis短文件名漏洞 HTTP.SYS远程代码执行 (MS15-034)影响范围
漏洞危害
复现 在Windows7上 安装IIS7.5。 编辑请求头,增加Range: bytes=0-18446744073709551615字段,若返回码状态为416 Requested Range Not Satisfiable,则存在HTTP.SYS远程代码执 行漏洞 利用看下面的文章 HTTP.sys远程执行代码漏洞验证及复现——CVE-2015-1635、MS15-034_7Riven的博客-CSDN博客_cve-2015-1635验证 修复建议 安装修复补丁(KB3042553) RCE-CVE-2017-7269CVE-2017-7269-iis远程溢出漏洞复现 - PANDA墨森 - 博客园 修复建议 关闭 WebDAV ApacheApache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务 器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。 解析漏洞未知扩展名解析漏洞影响范围
漏洞原理
漏洞复现 创建一个11.php.shtmlljjb,内容如下 <?php phpinfo();?> 在浏览器打开,发现执行成功了 修复建议 1、在Apache/conf/extra/下有一个httpd-php.conf文件修改为 <FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch> 这一段的意思是,对文件进行正则匹配(FilesMatch),如果文件后缀以.php结尾,才会认为是php文件,再进行解析(SetHandler)。 2、升级到最新版本 3、或将上传的文件重命名为为时间戳+随机数+.jpg的格式并禁用上传文件目录执行脚本权限。 AddHandler导致的解析漏洞如果运维人员给.php后缀增加了处理器: AddHandler application/x-httpd-php .php 那么,在有多个后缀的情况下,只要一个文件名中含有.php后缀,即被识别成PHP文件,没必要是最后一个后缀。 利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。 复现 只要文件名中出现.php,就直接被解析为php。 Apache HTTPD 换行解析漏洞(CVE-2017-15715)影响范围
漏洞原理
在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。 <FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch> 测试代码: <html> <body> <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="text" name="name" /> <input type="submit" value="上传文件" /> </form> </body> </html> <?php if(isset($_FILES['file'])) { $name = basename($_POST['name']); $ext = pathinfo($name,PATHINFO_EXTENSION); if(in_array($ext, ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'])) { exit('bad file'); } echo "ok"; move_uploaded_file($_FILES['file']['tmp_name'], './' . $name); } ?> 相同代码在Linux下进行测试,可以正常写入。 访问,执行成功 限制:获取文件名时不能用$_FILES['file']['name'],因为它会自动把换行去掉。 修复建议
NginxNginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事 实上nginx的并发能力确实在同类型的网页服务器中表现较好。 Nginx配置文件错误导致的解析漏洞
漏洞成因 该漏洞是Nginx配置所导致,与Nginx版本无关,下面是常见的漏洞配置。 server { location ~ \.php$ { root /work/www/test; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_pass unix:/tmp/php-fpm.sock; } } 当攻击者访问/info.jpg/xxx.php时, Nginx将查看URL,看到它以.php结尾,并将路径传递给PHP fastcgi处理程序。 Nginx传给php的路径为c:/WWW/info.jpg/xxx.php, 在phpinfo中可以查看_SERVER["ORIG_SCRIPT_FILENAME"]得到。 PHP根据URL映射,在服务器上寻找xxx.php文件,但是xxx.php不存在,又由于cgi.fix_pathinfo默认是开启的,因此PHP 会继续检查路径中存在的文件,并将多余的部分当作 PATH_INFO。接着PHP在文件系统中找到.jpg文件,而后以PHP的形式执行.jpg的内容,并将/xxx.php存储在 PATH_INFO 后丢弃,因此我们 在phpinfo中的$_SERVER['PATH_INFO']看的到值为空。 Note:
修复建议 1.配置cgi.fix_pathinfo(php.ini中)为0并重启php-cgi程序 2.或如果需要使用到cgi.fix_pathinfo这个特性(例如:Wordpress),那么可以禁止上传目录的执行脚本权限。 或将上传存储的内容与网站分离,即站库分离。 3.或高版本PHP提供了security.limit_extensions这个配置参数,设置security.limit_extensions = .php Nginx 空字节任意代码执行漏洞影响版本 Nginx 0.5*, 0.6*,0.7 <= 0.7.65,0.8 <= 0.8.37 漏洞成因
大致是1.jpg%00.php能被Nginx匹配到.php结尾的请求,就发送给fastcgi进行解析,然后%00截断了后面的.php,fastcgi就以php形式解析了1.jpg里面的内容。 漏洞复现 这里提供个打包好的Windows环境 Nginx 0.7.65+php 5.3.2 链接:https://pan.baidu.com/s/1FUVJv9iFCcX9Qp5D5AMxKw 提取码:imdm 解压后,在Nginx目录下执行startup.bat 然后在nginx-0.7.65/html/目录下创建info.jpg,内容为, <?php phpinfo();?> 访问info.jpg,并抓包,修改为info.jpg..php,在Hex选修卡中将jpg后面的.,更改为00. Note:该漏洞不受cgi.fix_pathinfo影响,当其为0时,依旧解析。 修复建议 升级Nginx版本 Nginx 文件名逻辑漏洞(CVE-2013-4547)影响版本 Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7 漏洞原理 这一漏洞的原理是非法字符空格和截止符(\0)会导致Nginx解析URI时的有限状态机混乱,危害是允许攻击者通过一个非编码空格绕过后缀名限制。 举个例子,比如,Nginx匹配到.php结尾的请求,就发送给fastcgi进行解析,常见的写法如下: 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; } 正常情况下(关闭pathinfo的情况下),只有.php后缀的文件才会被发送给fastcgi解析。而存在 CVE-2013-4547的情况下,我们请求 1.gif[0x20][0x00].php ,这个URI可以匹配上正则 \.php$,可以进入这个Location块; 进入之后,经过%00的截断,Nginx错误地认为请求的文件的1.gif[0x20],就设置其为SCRIPT_FILENAME的值发送给fastcgi。 fastcgi根据SCRIPT_FILENAME的值进行解析,最后造成了解析漏洞。重点是在CVE-2013-4547的情况下,1.gif[0x20][0x00].php可以匹配上正则 \.php$,具体为什么能匹配上,我也不清楚。 绕过黑名单执行php代码 访问http://your-ip:8080/info.jpg 问http://your-ip:8080/uploadfiles/info.jpg, 并抓包,修改为info.jpg...php, 在Hex选修卡中将jpg后面的两个点2e改成20,00 点击Go,如下。 绕过访问限制 CVE-2013-4547还可以用于绕过访问限制,虽然和文件解析漏洞无关,但也记录在这里。比如很多网站限制了允许访问后台的IP: location /admin/ { allow 127.0.0.1; deny all; } 我们可以请求如下URI:/test[0x20]/../admin/index.php,这个URI不会匹配上location后面的/admin/,也就绕过了其中的IP验证。但最后请求的是/test[0x20]/../admin/index.php文件,也就是/admin/index.php,成功访问到后台。(这个前提是需要有一个目录test,这是Linux系统的特点,如果有一个不存在的目录,则即使跳转到上一层,也会爆文件不存在的错误,Windows下没有这个限制) 复现过程 首先在网站根目录下新建一个目录,命名为protected,在目录protected中新建文件s.html,内容随意。然后在Nginx的配置文件中写上: location /protected/ { deny all; } 以禁止该目录的访问。接着在网站根目录下新建一个目录,名为“test ”,目录名的最后一个字符是空格,该目录用于触发漏洞。最后来进行验证,直接访问: http://127.0.0.1/protected/s.html 返回“403 Forbidden”。利用漏洞访问: http://127.0.0.1/protected/s.html 成功访问到文件s.html。注意上示URL中的空格,不要将空格编码。 修复建议 升级版本 参考文章 14.Nginx 文件名逻辑漏洞(CVE-2013-4547) - bmjoker - 博客园 vulhub/nginx/CVE-2013-4547 at master · vulhub/vulhub · GitHub Nginx配置错误导致的安全漏洞一、CRLF注入 查看Nginx文档,可以发现有三个表示uri的变量: 1.$uri 2.$document_uri 3.$request_uri 1和2表示的是解码以后的请求路径,不带参数,3表示的是完整的URI(没有解码) Nginx会将1,2进行解码,导致传入%0a%0d即可引入换行符,造成CRLF注入漏洞。 错误的配置文件原本的目的是为了让http的请求跳转到https上的,意思就是配置实现了强制跳转的功能,当用户访问nginx服务器时,由于此配置的存在会被强制跳转到以https协议访问之前访问的链接 配置中的 $url 是我们可以控制的,这样我们就可以在 $url 处填入CRLF ,然后对服务器进行访问实现头部注入。 漏洞危害: 劫持合法用户会话,利用管理员身份进行恶意操作,篡改页面内容、进一步渗透网站 利用CRLF injection设置一个 SESSION ,造成一个 "会话固定漏洞" 漏洞原理:
所以,一旦我们能够控制HTTP消息头中的字符,注入一些恶意的换行,这样我们就能注入一些会话Cookie (http://www.xx.com%0a%0d%0a%0dSet-cookie:JSPSESSID%3Dxxx) 或者HTML代码 (http://www.xx.com/?url=%0a%0d%0a%0d<img src=1 οnerrοr=alert("xss")>) Nginx会将$uri进行解码,导致传入%0a%0d即科引入换行符,造成CRLF注入漏洞 $uri跳转HTTPS,$uri就会产生%0a%0d换行符,换行符就一定存在CRLF注入漏洞 漏洞复现: [http://127.0.0.1/%0ASet-cookie:JSPSESSID%3D36](http://127.0.0.1/ Set-cookie:JSPSESSID%3D36) CRLF + XSS 配合 %0D%0A%0D%0A%3Cimg%20src=1%20οnerrοr=alert(/xss/)%3E 二、CRLF深入 攻击者操作:
三、目录遍历 Nginx在配置别名(Alias)的时候,如果忘记加/,将造成一个目录穿越漏洞。假设静态文件存储在/home/目录下,而该目录在url中名字为files,那么就需要用alias设置目录的别名: location /files { alias /home/; } 此时,访问http://example.com/files/readme.txt,就可以获取/home/readme.txt文件。 但我们注意到,url上/files没有加后缀/,而alias设置的/home/是有后缀/的,这个/就导致我们可以从/home/目录穿越到他的上层目录: 修改请求为http://example.com/files../,可以成功跳转到上一层目录下。如下图所示 进而我们获得了一个任意文件下载漏洞。 如何解决这个漏洞?只需要保证location和alias的值都有后缀/或都没有这个后缀。 四、add_header被覆盖 Nginx的配置文件分为Server、Location等一些配置块,并且存在包含关系,子块会继承父块的一些选项,比如add_header。 如下配置中,整站(父块中)添加了CSP头 正常情况下访问: 当访问 /test2时,XSS被触发。因/test2的location中添加了X-Content-Type-Options头,导致父块中的add_header全部失效 参考文章 红蓝对抗之服务攻防:Nginx中间件渗透总结 - FreeBuf网络安全行业门户 nginx配置错误导致的漏洞_yumengzth的博客-CSDN博客_nginx 配置错误 Nginx漏洞复现与总结 - FreeBuf网络安全行业门户 ? |
|
PHP知识库 最新文章 |
Laravel 下实现 Google 2fa 验证 |
UUCTF WP |
DASCTF10月 web |
XAMPP任意命令执行提升权限漏洞(CVE-2020- |
[GYCTF2020]Easyphp |
iwebsec靶场 代码执行关卡通关笔记 |
多个线程同步执行,多个线程依次执行,多个 |
php 没事记录下常用方法 (TP5.1) |
php之jwt |
2021-09-18 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 7:37:04- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |