-
[pwnable.kr] Level 7 - inputWargame/pwnable.kr 2023. 4. 9. 13:29반응형
Level 7 - input을 풀어보자.
문제를 보면 자신의 입력을 컴퓨터 프로그램에 전달하는 방법을 묻고 있는 것 같다.

<input의 문제 화면> Kali에서 ssh로 해당 문제에 접속을 해보도록 하자.
존재하는 파일들을 보면, flag와 input 파일 그리고 input의 소스 코드가 있다.

<input 문제 접속> 우선 input 파일을 실행해보자.
파일을 실행하면 문구가 3줄 나오는데, 맞는 입력을 하면 flag를 얻을 수 있다고 한다.

<input 파일 실행 결과> 어떤 입력이 맞는건지 알아봐야 하므로, 소스 코드를 보도록 하자.
이전 문제들보다 긴 코드가 나오는데, 총 5개의 Stage로 나누어져 있다.
하나씩 살펴보면서 문제를 풀어보도록 하자.
Stage 1은 argv에 관한 것이다.
이 단계를 클리어하기 위해서는 먼저 argc, 즉 입력 인자의 갯수가 100개여야 한다.
처음 프로그램을 실행하는 경로를 제외하고 99개의 인자를 더 넣어주면 되겠다.
그리고 argv['A']에는 "\x00"을, argv['B']에는 "\x20\x0a\x0d"을 넣어주면 다음 단계로 나아갈 수 있다.
(파이썬 위주로만 공부해서 dictionary인가 했지만, 그냥 'A', 'B'의 ascii 값인 65, 66번째 값을 의미한다.)

<Stage 1> Stage 2는 stdio에 관한 것이다.
표준 입출력에 관한 것으로 위에 것은 read(0) 즉, 표준 입력으로 "\x00\x0a\x00\xff"를 입력해주면 된다.
다음으로 read(2) 즉, 표준 에러로 "\x00\x0a\x02\xff"를 에러로 나타내주면 다음 단계로 나아갈 수 있다.

<Stage 2> Stage 3은 env에 관한 것이다.
getenv 함수는 해당 인자의 이름을 가진 환경변수의 값을 불러온다.
그래서 "\xde\xad\xbe\xef" 이름의 환경변수에 "\xca\xfe\xba\xbe" 값을 넣어주면 다음 단계로 나아갈 수 있다.

<Stage 3> Stage 4는 file에 관한 것이다.
"\x0a"라는 파일을 열고, 그 파일 내의 4 바이트만큼 읽어 buf에 저장한다.
그래서 "\x0a" 파일을 만들고, 그 안에 "\x00\x00\x00\x00"을 저장하면 다음 단계로 나아갈 수 있다.

<Stage 4> 마지막으로 Stage 5는 network에 관한 것이다.
socket을 이용한 연결을 시도하고 있다.
포트는 atoi 함수로 인해 argv['C']의 문자를 정수형으로 변환한 값을 가지게 된다.
그 포트에 연결하여 socket server를 열고, "\xde\xad\xbe\xef"를 보내주면 클리어를 할 수 있다.

<Stage 5> input 문제는 각 Stage 마다 주석에 힌트가 있어서, 쉽게 이해를 할 수 있었다.
하지만 직접 입력이 힘들어 익스플로잇 코드를 작성하려고 했는데, 다양한 입력을 전달하는 방법을 몰랐다.
그래서 구글링으로 익스플로잇 코드를 작성하는 방법을 참조하였다.
문제를 이해해도 익스플로잇 코드를 작성하지 못하면 안되므로 더 공부가 필요한 것 같다.
아래는 다른 블로그들을 참조하여 작성한 익스플로잇 코드이다.
(사실상 Stage 1을 제외하고는 다 참조하였다..)

<input의 익스플로잇 코드> 그 후 코드를 실행하니 flag가 출력되었다.

<input의 flag 확인> 반응형'Wargame > pwnable.kr' 카테고리의 다른 글
[pwnable.kr] Level 9 - mistake (0) 2023.05.07 [pwnable.kr] Level 8 - leg (0) 2023.04.23 [pwnable.kr] Level 6 - random (0) 2023.04.09 [pwnable.kr] Level 5 - passcode (0) 2023.04.01 [pwnable.kr] Level 4 - flag (0) 2023.02.05