
Rust로 작성된 DirtyPipe (CVE-2022-0847) 익스플로잇
면책 조항
이 코드는 교육 및 연구 목적으로만 사용됩니다.
소유 권한이 없거나 테스트 허가를 받지 않은 시스템에는 사용하지 마십시오.
저자는 이 코드의 사용으로 인한 어떠한 오용, 손해 또는 법적 책임도 지지 않습니다.
이 익스플로잇에 대한 분석 글은 블로그에서 확인하세요. 이는 Rust로 작성된 DirtyPipe (CVE-2022-0847) 익스플로잇 구현체로, Max Kellermann의 분석 글을 기반으로 합니다. 이 프로그램은 특정 파일을 덮어쓰거나 SUID 바이너리를 덮어써서 권한을 상승시킬 수 있습니다.
passwd)를 덮어써서 root 권한 획득/tmp에 백업먼저 입력 파일을 만듭니다. 이 파일의 데이터를 사용하여 대상을 덮어씁니다. 그런 다음 다음 명령을 실행하세요:
./dirtypipe_exploit -m overwrite -i input.txt -o target_file -b offset
여기서 offset은 파일에서 쓰기를 시작할 바이트 오프셋입니다. 취약점의 특성상 오프셋이 페이지 경계에 있으면 안 되며, 쓰기가 페이지 경계를 넘을 수 없습니다.
SUID 모드는 지정된 SUID 바이너리를 주어진 ELF 페이로드로 교체합니다. suid ELF는 이 저장소의 릴리스에 포함되어 있으며, 옵션에서 따로 지정하지 않으면 익스플로잇이 이를 사용합니다.
또한, 직접 생성하거나 gen_suid.py pwntools 스크립트와 loader.asm 파일을 사용하여 페이로드를 수정할 수도 있습니다. 이 옵션은 아래에서 설명합니다.
익스플로잇은 기본적으로 대상을 /usr/bin/passwd로 설정합니다.
다음 명령을 실행하여 /usr/bin/passwd를 제공된 페이로드(root 셸을 생성)로 교체하세요:
./dirtypipe_exploit -m suid
그런 다음 /usr/bin/passwd를 실행하면 root 셸을 얻을 수 있습니다.
자체 페이로드를 생성하려면 다음 단계를 따르세요:
gen_suid.py 스크립트를 실행합니다. 이 스크립트는 pwntools를 사용하여 root 셸을 생성하는 페이로드(shellcode.bin)를 만듭니다. 필요에 따라 수정하세요.nasm -f bin -o [PAYLOAD_NAME] loader.asm을 실행하여 ELF 바이너리 페이로드를 생성합니다. 이 명령은 shellcode.bin 파일을 실행 파일로 변환합니다../dirtypipe_exploit -m suid -i [PAYLOAD_NAME] -o [TARGET_FILE]을 실행합니다.64비트 Tiny ELF 헤더(여기)를 제공해 주신 STALKR's BLOG의 저자께 감사드립니다.