Skip to content

user20252228/BufferOverflow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

6 Commits
ย 
ย 

Repository files navigation

BufferOverflow

What is BufferOverflow igloo corporation wonchihyeon

ํ—ค๋”์˜ ๊ธธ์ด๊ฐ€ ๋ง ๊ทธ๋Œ€๋กœ ๋ฒ„ํผ์˜ ๊ณต๊ฐ„์— ๋‹ด๊ธธ ๋ฐ์ดํ„ฐ๊ฐ€ ํ˜๋Ÿฌ๋„˜์นจ์„ ๋œปํ•œ๋‹ค.

๋ฐ์ดํ„ฐ๊ฐ€ ํ˜๋Ÿฌ๋„˜์น˜๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋Š”๊ฐ€? ๋ฒ„ํผ์— ํ• ๋‹น๋œ ๊ตฌ์—ญ์„ ๋„˜์–ด์„œ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ๊นŒ์ง€ ์นจ๋ฒ”ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฎ์–ด์“ฐ๊ฒŒ ๋œ๋‹ค.

์ด๋กœ ์ธํ•ด ์‹œ์Šคํ…œ์€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๊ฒŒ ๋œ๋‹ค.

๋ฒ„ํผ ์˜ค๋ฒ„ ํ”Œ๋กœ์šฐ๋Š” ๊ธฐ๋ณธ์ ์ธ ํ•ดํ‚น ์Šคํ‚ฌ์ด๋‹ค.

๋ฒ„ํผ๋Š” ์ž„์‹œ ์ €์žฅ ๊ณต๊ฐ„์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์—์„œ ์Šคํƒ ํ˜น์€ ํžˆํ”„ ํ˜น์€ ๋ฐ์ดํ„ฐ ์˜์—ญ์— ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ๊ฐ ์˜์—ญ์— ๋”ฐ๋ผ ์Šคํƒ ๋ฒ„ํผ ์˜ค๋ฒ„ ํ”Œ๋กœ์šฐ, ํž™ ๋ฒ„ํผ ์˜ค๋ฒ„ ํ”Œ๋กœ์šฐ, ๋ฐ์ดํ„ฐ ๋ฒ„ํผ ์˜ค๋ฒ„ ํ”Œ๋กœ์šฐ๋กœ ๋ถˆ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

๊ฐ€๋“œํŽ˜์ด์ง€ ๊ตฌํ˜„

int main(int argc, char *argv[]) {
  int valid = FALSE;

char str1[8]; // str1 ์„ ์–ธ
char str2[8]; // str2 ์„ ์–ธ

next_tag(str1); // str1์— ํƒœ๊ทธ๊ฐ’๋ถ™์ด๊ณ 
gets(str2); // ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ’์„ ์ž…๋ ฅํ•˜๋ฉด str2์— ๋‹ด๊ธด๋‹ค.
if(strncmp(str1, str2, 8) == 0)
  valid = TRUE;
printf("buffer1: str1(%s), str2(%s), valid(%d)\n", str1, str2, valid);
}

์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ’์„ ์ž…๋ ฅํ–ˆ๋Š”๋ฐ ๊ทธ๊ฒƒ์ด start๋ผ๋ฉด valid๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ•จ์ˆ˜

str2์˜์—ญ์—๋Š” ๊ธ€์ž 8๊ฐœ ๊นŒ์ง€ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค (char str2[8] ์ด๊ธฐ ๋•Œ๋ฌธ)

๋งŒ์•ฝ str2 ์˜์—ญ์— ๊ธ€์ž 8๊ฐœ ์ด์ƒ์„ ๋‹ด์œผ๋ฉด ๋ฒ„ํผ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๋ฐœ์ƒ.

c๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜ gets์—์„œ ๋ณต์‚ฌํ•  ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๊ณผ์ •์„ ์ƒ๋žต.

๋ฒ„ํผ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๋ฐœ์ƒ

์ดย ๋„๊ตฌ๋ฅผย ์ด์šฉํ•˜์—ฌย ํ—ˆ์šฉ๋ฐ›์ง€ย ์•Š์€ย ์„œ๋น„์Šคย ๋Œ€์ƒ์œผ๋กœย ํ•ดํ‚น์„ย ์‹œ๋„ํ•˜๋Š”ย ํ–‰์œ„๋Š”ย ๋ฒ”์ฃ„ย ํ–‰์œ„์ž…๋‹ˆ๋‹ค.ย ํ•ดํ‚น์„ย ์‹œ๋„ํ• ย ๋•Œ์—ย ๋ฐœ์ƒํ•˜๋Š”ย ๋ฒ•์ ์ธย ์ฑ…์ž„์€ย ๊ทธ๊ฒƒ์„ย ํ–‰ํ•œย ์‚ฌ์šฉ์ž์—๊ฒŒย ์žˆ๋‹ค๋Š”ย ๊ฒƒ์„ย ๋ช…์‹ฌํ•˜์‹œ๊ธฐย ๋ฐ”๋ž๋‹ˆ๋‹ค. ย  A9ย -ย Bufferย Overflowย (Local) ย  ๋ฒ„ํผย ์˜ค๋ฒ„ํ”Œ๋กœย ์˜ค๋ฅ˜๋Š”ย ์˜๋„์ ย ๋˜๋Š”ย ๋น„์˜๋„์ ์œผ๋กœย ์ˆ˜์ •๋˜์–ด์„œ๋Š”ย ์•ˆย ๋˜๋Š”ย ํ”„๋กœ์„ธ์Šค์˜ย ๋ฉ”๋ชจ๋ฆฌย ์กฐ๊ฐ์„ย ๋ฎ์–ด์“ฐ๋Š”ย ๊ฒƒ์ดย ํŠน์ง•์ž…๋‹ˆ๋‹ค.
IP(Instructionย Pointer),ย BP(Baseย Pointer)ย ๋ฐย ๊ธฐํƒ€ย ๋ ˆ์ง€์Šคํ„ฐ์˜ย ๊ฐ’์„ย ๋ฎ์–ด์“ฐ๋ฉดย ์˜ˆ์™ธ,ย ๋ถ„ํ• ย ์˜ค๋ฅ˜ย ๋ฐย ๊ธฐํƒ€ย ์˜ค๋ฅ˜๊ฐ€ย ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.ย 
์ผ๋ฐ˜์ ์œผ๋กœย ์ด๋Ÿฌํ•œย ์˜ค๋ฅ˜๋Š”ย ์˜ˆ๊ธฐ์น˜ย ์•Š์€ย ๋ฐฉ์‹์œผ๋กœย ์‘์šฉย ํ”„๋กœ๊ทธ๋žจย ์‹คํ–‰์„ย ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.ย ๋ฒ„ํผย ์˜ค๋ฒ„ํ”Œ๋กœย ์˜ค๋ฅ˜๋Š”ย charย ์œ ํ˜•์˜ย ๋ฒ„ํผ์—์„œย ์ž‘์—…ํ• ย ๋•Œย ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„ํผย ์˜ค๋ฒ„ํ”Œ๋กœ๋Š”ย ์Šคํƒย ์˜ค๋ฒ„ํ”Œ๋กœ[์Šคํƒย ์˜ค๋ฒ„ํ”Œ๋กœ]ย ๋˜๋Š”ย ํž™ย ์˜ค๋ฒ„ํ”Œ๋กœ[ํž™ย ์˜ค๋ฒ„ํ”Œ๋กœ]๋กœย ๊ตฌ์„ฑ๋ ย ์ˆ˜ย ์žˆ์Šต๋‹ˆ๋‹ค.ย ์ดย ๋ฌธ์„œ์—์„œ๋Š”ย ํ˜ผ๋™์„ย ํ”ผํ•˜๊ธฐย ์œ„ํ•ดย ์ดย ๋‘ย ๊ฐ€์ง€๋ฅผย ๊ตฌ๋ถ„ํ•˜์ง€ย ์•Š์Šต๋‹ˆ๋‹ค.

์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ, ํž™ ์˜ค๋ฒ„ํ”Œ๋กœ

bof_1.php ๋ฉ”์ธ ํŽ˜์ด์ง€์™€ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๋ฉ”์ธ ํŽ˜์ด์ง€์—์„œ๋Š” ํžŒํŠธ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์†Œ์Šค ์ฝ”๋“œ์—์„œ๋Š” shell_exe๋ฅผ ํ†ตํ•˜์—ฌ ์‰˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ย  ๋จผ์ € ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ปดํŒŒ์ผ, ๋””๋ฒ„๊น…์„ ํ†ตํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ถ„์„, ์‰˜์ฝ”๋“œ ์ž‘์„ฑ์„ ํ†ตํ•œ ๊ณต๊ฒฉ์ฝ”๋“œ ์‚ฝ์ž…์ด ์ด๋ฃจ์–ด์ ธ์•ผ ํ•˜๋ฉฐ ์—ฌ๊ธฐ์„œ๋Š” BOF(Buffer Overflow)๊ฐ€ ๋ฌด์—‡์ด๊ณ  ์–ด๋–ป๊ฒŒ ๊ณต๊ฒฉ์ด ์ด๋ฃจ์–ด์ง€๋Š”์ง€ ์ฐธ๊ณ ์— ์žˆ๋Š” OWSAP ๋ฌธ์„œ๋ฅผ ํ†ตํ•˜์—ฌ ํ™•์ธํ•ด ๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ย  ํ•ด๋‹น BOF์— ๊ด€ํ•œ ๋ฌธ์ œ๋Š” ์ถ”ํ›„ ์–ด๋–ป๊ฒŒ ์ปดํŒŒ์ผ์ด ์ด๋ฃจ์–ด ์ง€๊ณ  ๋””๋ฒ„๊น…์„ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€ ์œ ๋‹‰์Šค, ์œˆ๋„๋ฅผ ๋‚˜๋ˆ ์„œ ๋‹ค๋ฃฐ ์˜ˆ์ •์ด๋ฉฐ ์‰˜ ์ฝ”๋“œ ์ž‘์„ฑ ๋ฐฉ๋ฒ•๊ณผ ์–ด๋–ค ํˆด๋“ค์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๋‹ค๋ฃฐ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ย 

์ฐธ๊ณ 

https://owasp.org/www-community/attacks/Buffer_overflow_attack
https://owasp.org/www-project-web-security-testing-guide/v41/4-Web_Application_Security_Testing/07-Input_Validation_Testing/13.2-Testing_for_Stack_Overflow
https://owasp.org/www-community/vulnerabilities/Buffer_Overflow

Releases

No releases published

Packages

No packages published