해당 문제의 소스코드는 아래와 같다.
차례대로 stage 1번부터 아래와 같다.
[stage 1]
스테이지 1번은 argc의 개수가 100개 여야 하며, argv ['A'], argv ['B'] 즉 65번과 66번째 argv에 각각 \x00과 \x20\x0a\x0d가 입력되면 통과한다.
[stage 2]
스테이지 2번은 read를 사용하여 파일 디스크립터 0 표준 입력으로 \x00\x0a\x00\xff를 입력하고 그 후
다음 read를 사용하여 2 표준 에러에 \x00\x0a\x02\xff가 입력되면 통과된다.
[stage 3]
스테이지 3번은 \xde\xad\xbe\xef라는 이름의 환경변수의 저장되어있는 값이 \xca\xfe\xba\xbe와 일치하면 통과이다.
[stage 4]
스테이지 4번은 \x0a라는 파일의 첫 번째 4바이트가 \x00\x00\00\00이면 된다 즉 \x0a라는 파일에 \x00\x00\
x00\x00을 넣어주면 된다.
[stage 5]
스테이지 5번은 소켓 관련 문제로 argv ['C'] 즉 67번째 argv의 값을 포트번호로 지정하고 로컬 서버로 4바이트를 보내 메모리를 비교해서 \xde\xad\be\ef이면 통과이다.
해당 스테이지를 전부 통과하기 위한 소스코드는 아래와 같다.
해당 코드를 실행시키면 성공적으로 플래그를 획득할 수 있다.
'WriteUP' 카테고리의 다른 글
[pwnkr] - shellshock (0) | 2021.09.04 |
---|---|
[pwnkr] - mistake (0) | 2021.09.01 |
[pwnkr] - random (0) | 2021.09.01 |
[pwnkr] - passcode (0) | 2021.09.01 |
[pwnkr] - flag (0) | 2021.09.01 |