write-up/pwnable

[pwnable.kr] input

여니두 2019. 9. 29.

[Stage 1]

argc가 100이어야 함.

>> 입력값이 100개여야 함.

argv[65]=\x00"

argv[66]="\x20\x0a\x0d"

 

[Stage 2]

- ssize_t read (int fd, void *buf, size_t nbytes)

fd: 파일 디스크립터

buf: 파일을 읽어 들일 버퍼

nbytes: 버퍼의 크기

 

fd 파일 디스크립터 번호

0: 표준 입력

1: 표준 출력

2: 표준 에러

 

buf를 표준 입력으로 4byte 받았을 때, "\x00\x0a\x00\xff" 받기

buf를 표준 에러로 4byte 받았을 때, "\x00\x0a\x02\xff"

 

[Stage 3]

"\xde\xad\xbe\xef"의 환경변수 값이 "\xca\xfe\xba\xbe"이어야 함

 

[Stage 4]

"\x0a"를 읽어들여야 함.

4byte의 1개 원소를 buf에 넣는다.

 

[Stage 5]

AF_INET: IPv4 프로토콜

socket 연결이 되어야 함.

 

saddr.sin_port = 67

bind 연결이 제대로 되어야 함.

 

accept() 리턴 값이 0 이상이어야 함.

 

recv로 4byte 값을 받아야 함.

받은 buf의 값이 "\xde\xad\xbe\xef"이어야 함.

 

python으로 pwntools를 이용하여 익스플로잇 코드를 짜보려고 한다.

 

#stage1

argvs를 선언 후 0~99까지 문자열로 만들어줌

ord()함수로 문자->정수형으로 바꾼 후, 값을 넣어줌

 

#stage2

stderr파일을 만들고 값을 써 줌

이후 sendline 함수로 stdin의 값을 넣어줌

 

#target

executable에서 실행할 바이너리 주소, argv에 전달할 인자, stderr에서 stderr할 행위가 들어 있음.

env는 환경 변수 --> 전달

 

소스코드는 /tmp 밑의 개인 디렉토리 생성 후 짜 주었다.

그 후 flag 파일을 만든 뒤, 실제 '/home/input2/flag' 파일과 심볼릭 링크를 걸어주어야 한다.

 

 

** error

SyntaxError: Non-ASCII character '\xec' in file

exploit.py on line 24, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

: 다음과 같은 에러가 나서,

# -*- coding: utf-8 -*-

소스코드에 위를 추가해주었다.

 

 

'write-up > pwnable' 카테고리의 다른 글

[pwnable.kr] cmd1  (0) 2019.09.29
[pwnable.kr] mistake  (0) 2019.09.29
[pwnable.kr] random  (0) 2019.09.29
[pwnable.kr] passcode  (0) 2019.09.29
[pwnable.kr] bof  (0) 2019.09.28

댓글