bandit 20 → 21

https://overthewire.org/wargames/bandit/bandit21.html

이번엔 홈 디렉터리의 setuid 파일로 localhost에 연결하고, bandit20의 패스워드와 비교하고 bandit21의 패스워드를 전송한다.

쉽게 풀어쓰면 setuid 파일로 localhost 서버와 연결한다. 그리고 텍스트 한 줄을 bandit20의 패스워드와 비교하고, 읽은 텍스트와 같다면 bandit21의 패스워드를 전송한다.

데이터를 서로 주고 받기 때문에 두 개의 세션이 필요하다. 세션을 추가로 여는 방법은 많으니 편한 방법대로 하면 된다.

한쪽 세션에서는 nc의 -l 옵션으로 리스닝 서버를 구동할 수 있다. 그리고 포트를 지정하고 대기한다.


연결하는 측에서 ./suconnect을 실행하여 nc 서버로 연결한다.


nc 서버 측에서 bandit20의 패스워드를 전송하면 setuid 측은 nc 서버로부터 데이터를 입력받아 bandit20의 패스워드와 비교하고 둘 값이 같다면 bandit21의 패스워드를 전송한다. 그러면 nc 서버 측에서 bandit21 패스워드를 입력받는다.

크리덴셜 획득

위의 과정을 그림으로 나타내면 아래와 같다.

Published by