해당 게시글은 bandit wargame에 대한 스포일러(방향성/힌트/정답)를 제공할 수 있습니다.

bandit level 20에서 비밀번호를 획득하기 위해
server와 client 역할을 동시에 수행해야 합니다.

nc -l localhost 40000 # server
./suconnect 40000 # client
(Terminal 1) nc -l 명령을 통해 local loopback interface 상의 임의의 포트(port 40000)을 개방하고 대기합니다.
(Terminal 2) setuid binary인 suconnect를 포트 인자값 40000과 함께 실행시킵니다.
(Terminal 1) 수립된 세션에서 현재 레벨의 비밀번호를 발송하면,
(Terminal 2) suconnect는 수신된 버퍼를 내부 로직으로 검증하고, 일치할 경우 EUID 권한으로 다음 레벨의 비밀번호를 역송신합니다.
(Terminal 1) nc는 이를 수신하여 표준 출력(Stdout)에 표시하고, 사용자는 다음 레벨의 비밀번호를 획득할 수 있습니다.
strace ./suconnect [port]로는 비밀번호가 출력되지 않은 이유?
: Linux kernal은 ptrace(strace의 syscall)가 적용된 process의 권한 격상 차단
process가 추적되고 있으면 EUID를 RUID(bandit20)로 유지되므로 다음 레벨의 비밀번호(/etc/bandit_pass/bandit21)을 출력하지 않음.
openat(AT_FDCWD, "/home/bandit21/.prevpass", O_RDONLY) = -1 EACCES (Permission denied)는 실제 비밀번호 파일을 읽기 전 검증용 보조파일일 가능성이 크다. 실제로 다음 레벨 비밀번호의 경로를 노출하지 않으려는 목적.
suconnect가 password를 발송하는 것이 아니라, 읽어와서 발송하는 이유?
: 보안 상 password같은 민감 정보는 binary 내부에 직접 저장하면 유출 위험이 크기 때문
'Bandit' 카테고리의 다른 글
| Bandit Level 22 -> Level 23 (0) | 2026.01.13 |
|---|---|
| Bandit Level 21 -> Level 22 (0) | 2026.01.13 |
| Bandit Level 19 -> Level 20 (EUID vs RUID?) (0) | 2026.01.13 |
| Bandit Level 18 -> Level 19 (0) | 2026.01.13 |
| Bandit Level 17 -> Level 18 (0) | 2026.01.12 |