Stage 1이다. argc가 100이 되어야하고 argv['A']가 '\x00'이 되어야하고 argv['B']가 '\x20\x0a\x0d'가 되어야 Stage 1이 clear된다.
Stage 2이다. 4byte buf를 선언하고 콘솔 입력으로 '\x00\x0a\x00\xff'를 받아야 하고, 파일 디스크립터 2번(stderr)로 '\x00\x0a\x02\xff'를 받아야 clear할 수 있다.
Stage 3이다. 이름이 '\xde\xad\xbe\xef'인 환경 변수에 '\xca\xfe\xba\xbe' 값이 써진 상태로 프로세스가 생성되어야 한다.
Stage 4이다. '\x0a' 이름의 파일을 열고 4byte가 '\x00\x00\x00\x00' 가 되야 clear 된다.
마지막 Stage 5이다. argv['C']의 문자열을 정수변환한 값을 포트 번호로 삼아 소켓 서버를 열고 4byte 문자열을 입력받는데 입력 받는 4byte가 \xde\xad\xbe\xef'라면 clear된다.
python script는 pwntools를 이용했기 때문에 의외로 매우 간단하다. 다른 write-up을 보면 c를 이용한 것들도 많았다. process() 메소드 내의 stderr와 env 인자를 사용하는 것이 핵심이었던 것 같고 나머진 인자 전달과 파일 입출력 등의 문제였다.
소스 코드는 '/tmp/본인생성디렉토리/' 아래 작성하고 flag 파일을 만든 뒤 실제 '/home/input2/flag' 파일과 심볼릭 링크를 걸어놓아야 한다.
끄읏.
'Wargame > Pwnable.kr' 카테고리의 다른 글
Pwnable.kr coin1-6pt (0) | 2017.05.14 |
---|---|
Pwnable.kr memcpy-10pt (0) | 2017.05.13 |
Pwnable.kr unlink-10pt (0) | 2017.05.08 |
Pwnable.kr uaf-8pt (0) | 2017.05.08 |
Pwnable.kr dragon-75pt (0) | 2017.05.07 |