Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/synacktiv-contrib/exploiting-cve-2017-5123
Privilege EscalationVulnerability AnalysisExploitationLearning & EducationBinary Exploitation
GitHubsynacktiv-contrib/exploiting-cve-2017-5123

exploiting-cve-2017-5123

MISC96 기사와 관련된 소스 코드 및 구성 파일

저장소 보기

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
4218년 전아직 검토되지 않음

CVE-2017-5123 악용

소개

이 저장소는 MISC Magazine #96에 게재된 기사에 추가된 내용입니다.

우리는 SMEP/SMAP 및 KASLR이 활성화된 가상 머신에서 신뢰할 수 있는 방식으로 권한 상승에 성공했습니다. 하지만 시스템이 불안정한 상태로 남게 되며 oops가 발생할 가능성이 매우 높다는 점에 유의해야 합니다.

이 저장소의 내용

configs/ 폴더에는 Linux 커널과 Busybox의 구성 파일이 있으며, 각 파일은 기본 파일과 약간 다릅니다.

binaries/ 폴더에는 QEMU와 함께 사용할 준비가 된 전체 rootfs와 같은 테스트 환경을 재현하는 데 필요한 모든 사전 빌드된 바이너리가 포함되어 있습니다.

linux-stable은 Linux 커널의 취약한 리비전을 가리키는 git 서브모듈입니다. git submodule update --recursive를 사용하여 가져오세요 (시스템에 최소 1GB의 여유 공간이 있다면...). busybox도 마찬가지입니다.

환경 설정

우리의 환경은 9P를 통해 호스트와 공유되는 폴더가 있는 QEMU x86 가상 머신을 기반으로 합니다. 취약한 버전의 커널(ff33952e4d23)이 Busybox의 정적 링크 빌드와 함께 컴파일됩니다.

커널 구성

우리의 구성은 이국적인 아키텍처나 하드웨어를 지원할 필요가 없기 때문에 매우 간단합니다. make defconfig를 실행하여 생성되었으며, QEMU의 네트워킹 및 폴더 공유를 지원하기 위해 몇 가지 기능이 활성화되었습니다:

root@kitploit:~
CONFIG_BLK_MQ_VIRTIO=y
CONFIG_MEMORY_BALLOON=y
CONFIG_BALLOON_COMPACTION=y
CONFIG_NET_9P=y
CONFIG_NET_9P_VIRTIO=y
CONFIG_NET_9P_DEBUG=y
CONFIG_VIRTIO_BLK=y
CONFIG_VIRTIO_BLK_SCSI=y
CONFIG_VIRTIO_NET=y
CONFIG_HVC_DRIVER=y
CONFIG_VIRTIO_CONSOLE=y
CONFIG_HW_RANDOM_VIRTIO=y
CONFIG_VIRTIO=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_BALLOON=y
CONFIG_VIRTIO_INPUT=y
CONFIG_VIRTIO_MMIO=y
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
CONFIG_9P_FS=y
CONFIG_9P_FS_POSIX_ACL=y
CONFIG_9P_FS_SECURITY=y

GDB 스크립트와 디버깅 심볼도 첫 번째 PoC 개발을 용이하게 하기 위해 추가되었습니다:

root@kitploit:~
CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_INFO_DWARF4=y
CONFIG_GDB_SCRIPTS=y

이 버전에서는 x86에서 KASLR이 기본적으로 활성화되어 있습니다. 커널이 재부팅할 때마다 다른 주소에 매핑되므로 GDB가 심볼 파일과 일치시킬 수 없습니다. 따라서 두 가지 옵션이 있습니다: KASLR 없이 테스트를 수행하거나, GDB에서 심볼을 로드할 때 symbol-file에 커널의 기본 주소를 전달하는 것입니다.

컴파일 후에는 linux-stable/arch/x86/boot/bzImage에서 bzImage를 찾을 수 있습니다.

이 파일은 binaries/bzImage에 있으며 구성 파일은 confifs/kernel.config에 있습니다. 사용하려면 linux-stable에 .config로 복사하기만 하면 됩니다.

Busybox 컴파일

우리는 Busybox의 마지막 안정 버전인 1.28을 사용했습니다. 변경해야 할 유일한 설정은 CONFIG_STATIC으로, 이를 y로 설정하세요. 컴파일하는 데 문제가 없을 것입니다.

구성 파일은 configs/busybox.config에, 정적으로 컴파일된 바이너리는 binaries/busybox에 있습니다. Linux와 마찬가지로 Busybox의 소스 폴더에 .config로 복사하기만 하면 됩니다.

함께 조립하기

Busybox는 이미 /etc/init.d/rcS를 실행하려는 init 프로세스를 구현하고 있습니다. 일반적으로 배포판에서 제공되지만 (다른 이름일 수도 있음) 여기서는 직접 만들어야 합니다! 이 스크립트는 몇 가지 필수 시스템 폴더(proc, sys, dev)를 생성하고 마운트하며, 호스트와 공유되는 폴더를 마운트하고 권한이 없는 셸로 떨어뜨립니다:

root@kitploit:~
for i in $(seq 1 9); do mknod /dev/tty$i c 4 1; done

mknod -m 0666 /dev/null c 1 3
mknod -m 0660 /dev/ttyS0 c 4 64

mount -t proc proc /proc
mount -t sysfs sysfs /sys
mount -t devtmpfs none /dev

mkdir -p /mnt/share
mount -t 9p -o trans=virtio share /mnt/share/ -oversion=9p2000.L,posixacl,sync
chmod 777 /mnt/share/

export ENV=/etc/profile
setsid cttyhack setuidgid 1000 sh

umount /proc
umount /sys
umount /dev

poweroff -f

/etc/profile 파일은 필수는 아니지만 테스트 중에 유용하며, 특히 익스플로잇이 신뢰할 수 없어 루트 권한을 얻기 위해 여러 번 시도해야 할 때 유용합니다.

익스플로잇

익스플로잇 작성 과정은 MISC 96에 잘 설명되어 있습니다: 힙의 기본 주소를 찾을 때까지 unsafe_put_user를 사용하여 메모리를 탐색합니다. 그런 다음 수천 번의 clone 호출을 통해 메모리에 수많은 cred 구조체를 스프레이합니다. 테스트 중에 fork를 사용할 때보다 메모리에서의 위치가 훨씬 더 "일정"했는데, 이는 새 태스크에 대해 더 적은 구조체를 할당하기 때문입니다.

남은 작업

자식 프로세스를 종료하면 잘못된 페이징 요청으로 인해 커널 oops가 발생합니다. 이를 올바르게 처리해야 합니다.

기여

이 익스플로잇의 신뢰성을 개선하거나 문서를 추가하려면 기여를 환영합니다! 또한 일부 개념에 대해 실수나 부정확한 내용이 있을 수 있습니다. 잘못된 점이 있다면 이슈를 열어 주시기 바랍니다.

유용한 링크

Linux 커널

  • https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=96ca579a1ecc943b75beba58bebb0356f6cc4b51
  • https://01.org/linuxgraphics/gfx-docs/drm/dev-tools/gdb-kernel-debugging.html

익스플로잇

  • https://reverse.put.as/2017/11/07/exploiting-cve-2017-5123/
  • https://github.com/0x5068656e6f6c/CVE-2017-5123/blob/master/CVE-2017-5123.c
도구 다운로드