我的博客:acsec.xyz
微信公众号: Ac sec
一.SSI注入
1.概述
SSI:服务器端嵌入或者叫服务器端包含,是Server Side Include的简写。SSI技术通过在文档中加入SSI指令,让服务器端在输出文档之前解析SSI指令,并把解析完的结果和文档一同输出给客户端。
SSI的指令格式为:<!-- #directive parameter=“value” – >。其中,directive是指令名,parameter指令参数,value指令参数值。
可以看到,就是html注释,Web服务器开启了SSI,并且页面包含可以解析的指令,那么Web服务器就解析这个指令。没开启器SSI或者开启了SSI,但是不是可以解析的指令,那么都当做注释。注意的是,“#”要和directive连在一起,中间不能含有空格。
SSI包含的指令有:
config:修改 SSI 的默认设置
echo:显示环境变量
exec:执行 CGI 脚本
flastmod :显示指定文件的最后修改日期
fsize:显示指定文件的大小
include:把其它文档插入到当前被解析的文档中
2.环境搭建
前提是已经安装docker,看我前面Java and php反序列化漏洞 | Active Blog (acsec.xyz)这篇文章java反序列化中有安装教程。
systemctl start docker //启动docker
git clone https://github.com/vulhub/vulhub.git //拉取vulhub靶场代码
cd /vulhub/httpd/ssi-rce //进入ssi目录
docker-compose up -d //启动docker环境
访问http://192.168.60.148:8080/upload.php即可
3.复现
创建文件shell.shtml,写入
上传后访问
这里用burp更方便修改内容实现命令执行
docker-compose down //停止docker
进入下一关
4.防护
- 关闭服务器SSI功能
- 过滤相关SSI特殊字符(<,>,#,-,",’)
二.Apache httpd 多后缀解析漏洞
1.概述
httpd是Apache超文本传输协议(HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。
漏洞原理:
apache httpd支持一个文件有多个后缀,如:test1.php.rar。在windows下,会直接根据最后的.来进行分隔,将其判定为pdf文件,但在apache中可不是这样的,apache会从后往前依次进行判别,遇到不认识的后缀,便会往前读,如果还是不认识再往前,若是到最后一个都不认识,则会将该文件当成默认类型文件读取。在etc目录下有个mime.types文件定义了apache可以识别的文件后缀。以下是该文件部分内容:
该解析漏洞产生的原因一部分是基于apache的这种特性,还有一大部分原因都是由于开发人员的配置不当构成的,当运维人员在配置文件给.php添加了处理器时:AddHandler application/x-httpd-php .php。
多后缀的文件名中只要存在.php后缀,则就会将该文件当做php文件解析。
2.环境搭建
cd /vulhub/httpd/apache_parsing_vulnerability
docker-compose build
docker-compose up -d
访问http://192.168.60.148即可
3.复现
创建shell.pgp.jpg,写入
上传文件
路径:http://192.168.60.148/uploadfiles/shell.php.jpg
利用:
docker-compose down //停止docker
4.防护
- 将AddHandler application/x-httpd-php.php的配置文件删除;
- 设置上传目录不可执行;
- 文件上传后重命名:时间戳+后缀名。
三.Apache httpd换行解析漏洞(CVE-2017-15715)
1.概述
影响版本:2.4.0 ~ 2.4.29
漏洞原理:
此漏洞的出现是由于apache在修复第一个后缀名解析漏洞时,用正则来匹配后缀。在解析php时xxx.php\x0A将被按照php后缀进行解析,导致绕过一些服务器的安全策略。在上传文件时,对文件名进行了黑名单限制,我们利用该漏洞上传一个1.php文件,使用burpsuit抓包。在1.php后插入一个\x0A,绕过黑名单过滤。访问1.php%0A,即可看到文件被当做php解析。
2.环境搭建
cd /vulhub/httpd/CVE-2017-15715
docker-compose up -d
访问http://192.168.60.148:8080即可
3.复现
创建evil.php
burp抓包,在php后面留一个空格出来
把空格的16进制值“20”改成换行符的16进制值“0a”,注意:不要直接改后面的0d、0a,否则没有效果
上传访问http://192.168.60.148:8080/evil.php%0A成功解析
4.防护
- 该漏洞仅针对于apache的2.4.0~2.4.29版本,升级apache版本即可避过该漏洞。
- 获取文件名时使用$_FILES[‘file’] [‘name’]会自动把换行符去掉