freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Apache中.htaccess文件利用的总结与新思路拓展
2019-11-15 09:00:43
所属地 山西省

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。计算器就出来啦~~

拿火绒剑来看下~

image.png

一目了然,读取了两个文件后,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,计算器就出来了~再拿火绒剑看下。

image.png

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

使用相对路径

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

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

image.png

那么,比如说我想要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

扩展阅读

Apache httpd 2.4.x 使用 mod_proxy_fcgi 和 PHP-FPM 的方式

PHP中通过bypass disable functions执行系统命令的几种方式

Nginx 设置 PHP_VALUE 的灵异问题

最后感谢裤衩哥和sssvvf学弟对该问题的共同研究与探讨。

*本文作者:xuing,属于FreeBuf原创奖励计划,未经许可禁止转载

# 漏洞 # web安全 # apache # .htaccess
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录