[pwnable.kr] input
[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 |
댓글