[Toddler's Bottle] input
먼저 input 코드는 아래와 같다.
5개의 스테이지로 이루어져있다.
STAGE 1.
stage1은 argv이다.
argc가 100이고, argv['A'], argv['B']의 값이 특정 값이어야 클리어할 수 있다.
따라서 pwntools를 이용하여 argv를 맞춰주면 된다.
이 때, argv[0]에는 실행파일의 경로가 들어간다.
pwntools를 이용하여 argv를 넘겼을 때, argv[0]에 실행파일 경로가 추가되는지를 확인하기 위한 과정을 거쳤다.
아래와 같은 코드를 작성한 뒤 컴파일하였다.
그 뒤, first, second를 입력한 것이 첫 번째 실행 결과이다.
argv[0]에는 경로가 들어가고 argv[1]에 first가 들어간 것을 볼 수 있다. argc도 3이 된다.
두 번째 실행 결과는 pwntools를 이용하여 argv에 first와 second를 넘겨준 결과이다.
argv[0]과 argv[1]에 넘겨준 값들이 바로 들어 있는 것을 볼 수 있다. argc는 2이다.
즉, argv[0]에 실행파일 경로가 들어가지 않고, 입력해준 대로 들어간다는 것을 알 수 있다.
test.py 코드는 아래와 같다.
STAGE 2.
stage 2는 stdio이다.
코드를 보면 read()를 두 번 하는 것을 볼 수 있는데, 첫 번째는 stdin, 두 번째는 stderr이다.
stdin의 경우, stdin_data에 값을 담아 send()를 이용하여 전달하였다.
stderr의 경우, err라는 파일에 값을 넣은 뒤 stderr를 파일을 통해 읽도록 하였다. (12-13, 19라인)
STAGE 3.
stage 3은 env이다.
process()에서 env를 넣어 주었다.
STAGE 4.
stage 4는 file 이다.
파일은 연 뒤, 값을 넣어 주었다.
STAGE 5.
stage 5는 network이다.
포트가 argv['C']이므로 argv[67]을 5555로 넣어준 뒤 remote()를 이용하여 0xdeadbeef를 전달했다.
STAGE1 ~ STAGE5 를 포함한 익스 코드는 아래와 같다.
/tmp/morae23이라는 디렉토리를 만들고, flag파일에 링크를 걸어 주었다.
그 결과 플래그를 얻을 수 있다.
'Wargame > pwnable.kr' 카테고리의 다른 글
pwnable.kr blackjack (0) | 2019.02.01 |
---|---|
pwnable.kr coin (0) | 2019.02.01 |
pwnable.kr cmd2 (0) | 2019.02.01 |
pwnable.kr cmd1 (0) | 2019.02.01 |
pwnable.kr asm (0) | 2019.02.01 |
댓글