介绍
IIS是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。最初是Windows NT版本的可选包,随后内置在Windows 2000、Windows XP Professional和Windows Server 2003一起发行,但在Windows XP Home版本上并没有IIS。IIS是一种Web(网页)服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。
IIS的安全脆弱性曾长时间被业内诟病,一旦IIS出现远程执行漏洞威胁将会非常严重。远程执行代码漏洞存在于 HTTP 协议堆栈 (HTTP.sys) 中,当 HTTP.sys 未正确分析经特殊设计的 HTTP 请求时会导致此漏洞。成功利用此漏洞的攻击者可以在系统帐户的上下文中执行任意代码,可以导致IIS服务器所在机器蓝屏或读取其内存中的机密数据
IIS对应的Windows系统版本
:::info
Windows Server 2000 —— IIS 5.0
Windows XP SP1 —— IIS 5.1
Windows XP SP2,SP3 —— IIS 5.1
Windows Server 2003,XP porfessional —— IIS 6.0
Windows Vista Ultimate —— IIS 7.0
Windows 7 —— IIS 7,IIS 7.5
Windows Server 2008 SP2,SP3 —— IIS 7.0
Windows Server 2008 R2,部分Windows 7 —— IIS 7.5
Windows Server 2008 SP2,SP3 —— IIS 7.0
Windows Server 2012,Windows 8 —— IIS 8.0
Windows Server 2012 R2 —— IIS 8.5
windows Server 2016,Windows10 —— IIS 10
:::
IIS6.0 PUT 漏洞
IIS6.0 server在web服务扩展中开启了WebDAV(Web-based Distributed Authoring and Versioning)。WebDAV是一种HTTP1.1的扩展协议。它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,如PUT,使应用程序可对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。可以像在操作本地文件夹一样操作服务器上的文件夹,该扩展也存在缺陷,利用PUT方法可直接向服务器上传恶意文件,控制服务器
条件
1.适用版本 IIS 6.0
2.前提条件:服务器开启了webdav服务并且设置了写入权限
利用
上次文件的时候 把上传方式改为PUT
例如
POST /shell.php HTTP/1.1 改为 PUT /shell.php HTTP/1.1
PUT /shell.txt HTTP/1.1
HOST:192.168.1.1
Content-length 26
<?php eval($_GET['cmd']); ?>
如果存在上传成功的情况 ,能上传 .txt 文件 ,但是不能上传php ,asp等文件
就可以尝试使用 IIS6.0 解析 漏洞
move方法来将txt文件转化为php文件,但直接move往往是不行的,
要用到IIS6.0解析漏洞,把它写成shell.php;.txt就可以了getshell了
修复
1:关闭WebDAV
2:关闭写入权限
3: 升级IIS
IIS 解析漏洞
IIS 6.0
基于文件名
IIS6.0默认不解析;号后面的内容,例如1.asp;.jpg会当成1.asp解析,相当于分号截断。
基于文件夹
IIS6.0会将/*.asp/文件夹下的文件当成asp解析。
修复
- 取消网站目录脚本执行权限
- 紧张创建文件夹
- 重命名上传文件为时间戳 +.jpg 或者随机数 + .jpg 等
IIS 7.0 / 7.5 解析漏洞
IIS7.*在FastCGI运行php的情况下,php默认配置cgi.fix_pathinfo=1,导致在任意文件后面添加/.php,服务器就会解析成php。
上传一个图片🐎 访问 图片文件
http://192.168.1.1/shell.jpg
利用解析漏洞
访问
http://192.168.1.1/shell.jpg/.php
修复
将cgi.fix_pathinfo 设置为 0 并重启 php-cgi程序
短文件名漏洞
为了兼容16位MS-DOS程序,Windows为文件名较长的文件(和文件夹)生成了对应的windows 8.3 短文件名。 使用命令dir /x可以看到短文件名的效果:
观察执行结果可以发现,短文件名如下特征:
- 只有6位显示,后续字符用~1代替。
- 后缀名称只显示3位。
我们可以对启用.net的IIS暴力猜解短文件名,原因是:
1.访问某个存在的短文件名,返回404:
2.访问某个不存在的短文件名,返回400:
修复
- 升级.net framework到4.0以上版本
- 关闭NTFS 8.3文件格式的支持(默认开启)
1.修改注册表键值:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem,
修改NtfsDisable8dot3NameCreation为1,并重启系统。
2.windows server 2003命令行执行fsutil behavior set disable8dot3
1(1表示关闭,0表示开启) windows server 2008命令行执行fsutil 8dot3name set 1
不同系统关闭命令稍有区别
IIS6.0 远程代码执行漏洞 CVE-2017-7269
CVE-2017-7269是IIS 6.0中存在的一个栈溢出漏洞,在IIS6.0处理PROPFIND指令的时候,由于对url的长度没有进行有效的长度控制和检查,导致执行memcpy对虚拟路径进行构造的时候,引发栈溢出,该漏洞可以导致远程代码执行。
目前在github上有一个在windows server 2003 r2上稳定利用的exploit,这个exp目前执行的功能是弹计算器,使用的shellcode方法是alpha shellcode,这是由于url在内存中以宽字节形式存放,以及其中包含的一些badchar,导致无法直接使用shellcode执行代码,而需要先以alpha shellcode的方法,以ascii码形式以宽字节写入内存,然后再通过一小段解密之后执行代码。
github地址:https://github.com/edwardz246003/IIS_exploit
参考
:
https://whereisk0shl.top/cve-2017-7269-iis6-interesting-exploit.html
apache是什么,Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。
它快速、可靠并且可通过简单的API扩充,将python等解释器编译到服务器中。
它的作用可以主要分为以下两点:
1.解析网页语言,如html,php,jsp等
2.接收web用户的请求,并给予一定的响应
apache的目录结构
:::info
bin 存在常用命令工具,例如:start.bat、httpd.bat
cgi-bin 存放linux下常用的命令。例如:xxx.sh
conf apache的相关配置文件,例如:httpd.conf
error 错误日志记录
htdocs 放网站源码的地方
logs 日志
manual 手册
modules 扩展模块
:::
apache如何跟php通信的
1)
把php编译时直接编译成apache的模块、module模块化的方式进行工作(apahce默认的这种方式)。
2)
CGI、通用网关接口、apache基于CGI跟hph通信
3)
fast CGI
apache文件多后缀名解析漏洞
特性:多后缀名(全版本都有这个特性)
apache在解析一个文件的后缀名时,是从右往左解析后缀名的,如果右边的后缀名不认识,就会继续向左识别,直到识别到一个认识的后缀名,但是万一都不认识呢?都不认识的话默认情况下是plain/text处理。那么apache是怎么知道哪个后缀名它是认识的呢?答案是认识的后缀名们都被记录到一个叫mime.types的文件中。
定义了不同的后缀名应该向浏览器返回什么样的mime格式。这里要说的是有些情况下的mime.types没有提供对php的解析方法,对php的解析规则放在另一个文件,Windows下在/conf/extra/httpd-php.conf。Linux也有这个文件在/etc/apache2/mods-enabled/php7.2.conf(或者和Windows的路径一样),打开后是这样的,定义了文件名满足什么条件(正则表达式)才会将他给php处理器处理,而且,如果你mime.types里匹配到了php后缀,但这个处理器匹配文件没有匹配成功,他还是不会把php文件进行处理
例如 :
只能上传图片的网站
上传名字为shell.php.jpeg,内容带有shell脚本的代码在里面
因为存在apache 解析漏洞 。所以上传的文件就会被解析
CVE-2017-15715 换行符解析漏洞
2.4.0~2.4.29版本存在apache的换行符解析漏洞,简单来说就是.php加上换行符就能被解析成php文件
上传文件的时候 为 php后缀 ,正常发包会被拦截 ,
抓包 然后要发包的时候 修改 hex
找到.php 后面的数据 插入数据 0x0a
就是换行符的十六进制,之后再进行发包,成功发包不会被拦截
未知扩展名解析漏洞
当apache遇到未知的后缀名时并不会停止解析,而会向后继续解析,比如我们传入一个文件:
shell.php.aaaa
因为无法解析aaaa,于是向前解析,也就是说最终会解析文件成:
shell.php
apache ssi远程命令执行漏洞(原理和ssi注入一样)
如果服务器开启了ssi与cgi支持,即可上传shtml文件并在shtml文件中输入ssi指令 <!–#exec cmd=”payload” –>,如 <!–#exec cmd=”ls” –> ,然后再访问这个文件即可获得ls的结果
参考
https://www.freebuf.com/vuls/335282.html
https://www.secpulse.com/archives/173919.html
Nginx(engine x)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务器Nginx是由伊戈尔开发,因为它的稳定性、丰富的功能集、实例配置文件和低系统资源的消耗而闻名。
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like协议下发行,其特点是占用内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好
Nginx适用于高并发、可以做负载均衡服务器和HTTP服务器、具有代码特点、可以作为代理服务器
文件解析漏洞
对于任意文件名,在后面添加 /xxx.php(xxx为任意字符)后,即可将文件作为php解析
漏洞范围:
该漏洞是nginx配置所导致,与版本无关。
场景 :
白名单上传 ,可以上传图片文件 ,
上传了一个shell.jpg 文件 访问的是时候不能执行里面的shell 脚本 ,只能看出是图片 ,
当存在解析漏洞的时候 , 在shell.jpg 后面 添加 /.php 或者.asp 之类的 就可以被解析为 php 或者 asp 文件
当攻击者访问 /shell.jpg/xxx.php 时,Nginx将查看URL,看到它以 .php 结尾,并将路径传递给 PHP fastcgi 处理程序.Nginx传给php的路径为 C:/phpStrudy/WWW/shell.jpg/xxx.php ,在phpinf中可以查看 _SERVER[“ORIG_SCRIPT_FILENAME”] 得到。
目录遍历
Nginx 的目录遍历与 Apache一样,属于配置方面的问题,错误的配置可导致目录遍历与源码泄露
先去www目录下随便新建一个文件夹,然后进行访问
修改 \nginx\conf\nginx.conf,在下面标示位置中添加 autoindex on ;
重庆nginx 访问 就会出现 Index of 文件名
空字节任意代码执行
影响版本:
nginx 0.5.
nginx 0.6.
nginx 0.7 <- 0.7.65
nginx 0.8 <- 0.8.37
Nginx在遇到%00空字节时与后端FastCGI处理不一致,导致可以在图片中嵌入PHP代码然后通过访问 xxx.jpg%00.php 来执行其中的代码
环境下创建一个1.jpg
访问1.jpg,无法访问,所以在URL中输入 1.jpg…php
然后抓包,hex选项下,.的hex编码为2e,将第一个2e改为00
然后发包就可以访问了
通常都是在于文件上传然后解析
该漏洞不受 cgi.fix_pathinfo 影响,当其为0时,依然解析
高版本不存在该漏洞
CRLF注入漏洞
Nginx会将 $uri 进行编码,导致传入 %0a%0d 即可引入换行符,造成CRLF注入漏洞。
错误的配置文件原本的目的是为了让http的请求跳转到https上的,意思就是配置实现了强制跳转的功能,当用户访问nginx服务器时,由于此配置的存在会被强制跳转到以https协议访问之前访问的链接
- 配置中的 url是我们可以控制的,这样我们就可以在_url_是我们可以控制的,这样我们就可以在url 处填入CRLF ,然后对服务器进行访问实现头部注入
- 服务器会返回一个302跳转给用户
漏洞危害:
劫持合法用户会话,利用管理员身份进行恶意操作,篡改页面内容、进一步渗透网站
利用CRLF injection设置一个 SESSION ,造成一个 “会话固定漏洞”
原理:
CRLF是“回车 + 换行”(\r\n)的简称。在HTTP协议中,HTTP Header与HTTP Body是用两个CRLF分隔的,浏览器就是根据这两个CRLF(使用payload %0a%0d%0a%0d进行测试)来取出HTTP内容并显示出来。所以,一旦我们能够控制HTTP消息头中的字符,注入一些恶意的换行,这样我们就能注入一些会话Cookie(www.xx.com%0a%0d%0a%0dSet-cookie:JSPSESSID%3Dxxx)或者HTML代码(http://www.xx.com…<img src=1 οnerrοr=alert(“xss”)>),所以CRLF Injection又叫HTTP Response Splitting,简称HRS
Nginx会将$uri进行解码,导致传入%0a%0d即科引入换行符,造成CRLF注入漏洞
uri跳转HTTPS,uri跳转HTTPS,uri跳转HTTPS,uri就会产生%0a%0d换行符,换行符就一定存在CRLF注入漏洞
CRLF + XSS 配合:
:::info
%0D%0A%0D%0A%3Cimg%20src=1%20οnerrοr=alert(/xss/)%3E
:::