[pwnable.kr] bof(5 pts) :: Write-Up
두비니
·2019. 11. 9. 08:13
Nana told me that buffer overflow is one of the most common software vulnerability.
Is that true?
Download : http://pwnable.kr/bin/bof
Download : http://pwnable.kr/bin/bof.c
Running at : nc pwnable.kr 9000
우선 코드를 봅시다.
#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는 입력에 제한을 두지 않기때문에 이를 이용해 buffer overflow를 일으키면 되겠군요. 대신 key가 어디있는지 파악을 해야겠죠?
func의 함수를 분석하면 ebp+0x8과 cafebabe를 비교하는 것을 볼 수 있습니다. 즉 저곳이 key가 위치하는 곳이겠죠.
근데 여기서 func+24와 +29를 보면 각각 call <func+25>랑 lea eax, [ebp-0x2c]를 하는 것으로보아 gets함수를 부르고 0x2c부터 값을 입력함을 알 수 있죠. 그럼 0x2c부터 입력을 받고 ebp+0x8까지 채워줘야하니
0x2c + 0x8 = 0x34 (dec 52)이므로 더미를 52만큼 채워주고 cafebabe를 채워주면 되겠네요.
이방법 말고도 직접 값을 넣은 후 분석하는 방법도 있습니다.
귀찮으니 pass.
굿
'War Games > pwnable.kr' 카테고리의 다른 글
[pwnable.kr] random(1 pt) :: Write-Up (0) | 2020.02.24 |
---|---|
[pwnable.kr] passcode(10 pts) :: Write-Up (0) | 2020.01.28 |
[pwnable.kr] flag (7 pts) :: Write-Up (0) | 2019.11.10 |
[pwnable.kr] collision(3 pts) :: Write-Up (0) | 2019.11.09 |
[pwnable.kr] fd(1 pt) :: Write-Up (1) | 2019.11.08 |