#1 Studet ID
nc로 접속 해보면,
다음과 같이 나온다.
IDA로 열어보자.
v4의 배열 크기는 28이고, v5가 1234567890 -> 0x499602D2이면 flag가 나오는 것 같다.
pwntools로 scanf로 입력 받는 v4 부분을 'A' 28개로 채우고, 나머지를 0x499602D2로 채우면 된다.
위의 exploit 코드를 실행하면 flag가 나온다.
#2 Magic Spell
nc로 접속 해보면,
다음과 같다.
IDA로 열어보면,
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 |