#1 Studet ID

nc로 접속 해보면,

다음과 같이 나온다.

 

IDA로 열어보자.

 

v4의 배열 크기는 28이고, v5가 1234567890 -> 0x499602D2이면 flag가 나오는 것 같다.

pwntools로 scanf로 입력 받는 v4 부분을 'A' 28개로 채우고, 나머지를 0x499602D2로 채우면 된다.

 

exploit 코드

위의 exploit 코드를 실행하면 flag가 나온다.


#2 Magic Spell

nc로 접속 해보면,

다음과 같다.

IDA로 열어보면,

main 함수

main 함수를 보면 spell1()이라는 함수를 호출하는 것을 알 수 있다.

speel1()함수를 살펴보자.

spell1()함수에서 v1의 배열 크기는 31이며 scanf로 입력 받고, v2가 77 -> 0x4D이면 spell2()함수를 호출한다.

spell2()함수를 살펴보자.

spell2()함수에서는 배열의 크기가 16인 bof를 scanf로 입력받고, strncmp로 문자열을 비교하여 magic이 "pwnable!"이면 flag가 나온다.

 

pwntools로 익스플로잇 코드를 짜보면...

위의 exploit 코드를 실행하면 flag가 나온다.


#3 system

nc로 접속 해보면,

리눅스 상에서 ls -al 명령어를 입력했을 때의 결과 값 같은 것이 나온다.

IDA로 main 함수를 열어보면,

gets함수로 ggang이라는 변수에 입력받고, command를 system함수로 호출한다.

 

전 문제에서 한 것과 마찬가지로 pwntools로 배열을 "A"로 채우고 system함수로 쉘을 따는 쉘 코드를 짜보면,

 위의 쉘코드를 실행하면 쉘이 따지는데, 현재 디렉토리에 있는 flag를 cat으로 읽어주면 flag가 나온다.

'WhoIs 정보보안 교육 > Pwnable' 카테고리의 다른 글

Pwnable 3주차 과제 Write-up(#1~#3)  (0) 2021.12.05
Pwnable 2주차 과제 Write-up(#1~#4)  (0) 2021.11.28