본문 바로가기
Pwnable/Pwnable CTF

[Pwnable.kr] Toddler's Bottle_input

by Y06 2021. 4. 6.

문제를 확인하였다.

문제에서 엄마? 내 입력을 컴퓨터 프로그램에 어떻게 전달할 수 있습니까? 라고 말하고 있다.

문제에 접속하였다.

먼저 C 코드를 확인해보자.

전체적으로 코드를 보았을 때 Stage 1부터 5까지 모두 통과해야 플래그를 얻을 수 있다.

 

먼저 Stage1을 통과해야 하는 조건을 보자.

1. 인자의 개수 = 100개
2. argv['A'] = \x00
2. argv['B'] = \x20\x0a\x0d

이 세 가지 조건을 만족하면 Stage 1을 성공할 수 있다.

 

Stage2를 보면 stdin으로  \x00\x0a\x00\xff 입력 값을 주고 sterr로 \x00\x0a\x02\xff을 주어야 성공할 수 있다.

 

Stage 3을 보면 환경변수와 관련 되었다는 것을 알 수 있다. \xde\xad\xbe\xef 라는 환경변수에 \xca\xfe\xba\xbe 값을 넣는다.

 

Stage 4를 보면 \x0a라는 파일을 열고, 읽어온 첫 4바이트가 \x00\x00\x00\x00이면 성공이다.

 

Stage 5를 보면 atoi(argv['C']) = argv['C']의 정수형으로 변환한 값을 포트번호로 소켓서버를 열고 \xde\xad\xbe\xef 을 보내면 성공이다.

 

여기서 코드를 짜고 문제를 풀면 되는데 vi 편집기가 잘 작동하지 않는다.