์ „์ฒด ๊ธ€

๐ŸŒ‡โ”‚System_Study/๐Ÿช™โ”‚Pwnable.kr

[Toddle]collision

collision_WriteUp ๋ณด์‹œ๋ฉด.. ์ด๋ฒˆ์—” ์•„๋น ๊ฐ€ MD5 hash์„ ์ด์šฉํ•ด์„œ ์ถฉ๋Œ๋œ ํ•˜๋ฃจ๋ฅผ ๋งŒ๋“ค์—ˆ์–ด? ๋‚˜๋„ ์ด๋Ÿฐ๊ฑธ ์›ํ•ด์š”! ๋ผ๋Š” ๊ฑฐ ๊ฐ™์€๋ฐ.. ๋ญ”.. ํ•ด๋‹น C file์„ ์‚ดํŽด๋ณด๋ฉด.. hashcode์— 0x21DD09EC๋กœ ์ €์žฅ๋˜์–ด ์žˆ์œผ๋ฉฐ, ํ•ต์‹ฌ์€ check_password์ž…๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€๋Š” ์ธ์ž๋ฅผ 2๊ฐœ.. ์ฆ‰ 1์ด์ƒ ๋„ฃ์œผ์‹œ๊ณ  ์ฒซ ์ธ์ž๋ฅผ ๋„ฃ์—ˆ์„๋•Œ ๊ธธ์ด๊ฐ€ 20์ค„..๋กœ ๋งž์ถฐ์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  check_password์— ๋ณ€์กฐ๋œ ์ธ์ž์™€ ์œ„ hashcode์™€ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ธ์ž๊ฐ’์ด 20์ด์—ฌ์•ผํ•˜๋ฉฐ, hashcode์™€ check_password์˜ ํ•จ์ˆ˜๋ฅผ ๊ฑฐ์นœ ๊ฐ’์ด ๊ฐ™์•„์•ผํ•ฉ๋‹ˆ๋‹ค. Exploit design ์œ„ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, IP(argv[1]์˜ ์ธ์ž๊ฐ’)์„ ๋ฐ›์•„์„œ 5๊ฐœ๋กœ ์ชผ๊ฐœ์„œ ๋˜‘๊ฐ™์€ ๊ฐ’์„ 5๋ฒˆ int(4by..

๐ŸŒ‡โ”‚System_Study/๐Ÿช™โ”‚Pwnable.kr

[Toddle] flag

fd_WriteUp ๋ณด์‹œ๋ฉด.. ํŒŒํŒŒ(์•„๋น ?)๊ฐ€ ์„ ๋ฌผ์„ ๋ณด์žฅํ•ด์„œ ๊ฐ€์ ธ์™”์–ด์š”! ์—ด์–ด๋ณผ๊นŒ์š”? ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ‘์— ์ด๊ฒƒ์€ ์ž‘์—…์„ ๋˜๋Œ๋ฆฌ๋Š” ๊ฑฐ๊ณ  ๋„ˆ๊ฐ€ ํ•„์š”ํ•œ๊ฑด ์ด์ง„์ˆ˜๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค... ํŒŒ์ผ์„ ๋ฐ›์•„์„œ ์—ด์–ด๋ณด๋‹ˆ๊นŒ.. ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•์‹์œผ๋กœ ๊ทธ๋ƒฅ ์—ด๋ฉด ๋ง‰ ๊นจ์ ธ์„œ ๋‚˜์˜ค๊ฒ ์ฃ  ๊ทธ๋Ÿผ ์ด๊ฑธ ๋ณต์›ํ•ด๋ด…์‹œ๋‹ค. ์ด๊ฑด ๊ทธ๋Ÿผ.. ๋ฆฌ๋ฒ„์‹ฑ ๋ฌธ์ œ์ด๊ฒ ๊ตฐ์š”(์ž˜ ๋ชปํ•˜๋Š”๋ฐ ใ… ) ์ผ๋‹จ hex๋กœ ๋ฐ”๋กœ ํ™•์ธํ•ด๋ด…์‹œ๋‹ค. ELF(๋ฆฌ๋ˆ…์Šค ์‹คํ–‰)์ด ๋‘๊ฐœ๊ฐ€ ์ค‘๋ณต๋˜๋ฉฐ ๋ฐ‘์— UPX!๋ผ๊ณ  ํ•˜๋Š”๊ฒŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์••์ถ•์ด ๋˜์—ˆ๊ตฌ๋‚˜.. ๋ผ๊ณ  ๋Š๋‚Œ์ด ์˜ค๋Š”๊ตฐ์š” ๊ทธ๋Ÿผ UPX๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณผ๊นŒ์š”? UPX(Ultimate Packer for eXecutables)๋กœ์จ ์—ฌ๋Ÿฌ OS์—์„œ ์ˆ˜๋งŽ์€ ํŒŒ์ผ ํฌ๋งท์„ ์ง€์›ํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ์‹คํ–‰ ํŒŒ์ผ ์••์ถ• ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. GitHub - upx/upx: UP..

๐ŸŒ‡โ”‚System_Study/๐Ÿช™โ”‚Pwnable.kr

[Toddle]bof

bof_WriteUp ๋‚˜๋‚˜๊ฐ€ ๋งํ–‡์–ด์š” bof๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ผ๋ฐ˜์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ์ทจ์•ฝ์ ์ด๋ผ๊ณ ์š” ๋งž๋‚˜์š”? ๋ผ๋Š”๋ฐ.. ์•„๋ฌด๋ž˜๋„ ๋ณด์•ˆ ์ทจ์•ฝ์  ์ฒซ ์‹ค์Šต์ด bof์ธ ๊ฒƒ์„ ๋ณด๋ฉด ์ €๋„ ๊ณต๊ฐํ•ฉ๋‹ˆ๋‹ค.(๋ชจ๋“ ๊ฒŒ ์—ฌ๊ธฐ์„œ ์‹œ์ž‘..) ๋ณด์‹œ๋ฉด ์ €๋Ÿฐ์‹์œผ๋กœ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋ณดํ˜ธ๊ธฐ๋ฒ•์ด.. bof๋งŒ ์“ฐ๋ผ๊ณ  ํ•˜์‹œ๋Š”๊ตฐ์š”.. ์ฝ”๋“œ๋ฅผ ๋ณด์‹œ๋ฉด func์˜ ํ‚ค ๊ฐ’์„ ๋ฏธ๋ฆฌ ๋„ฃ๊ณ  8๋ฒˆ ๋ผ์ธ์˜.. ์กฐ๊ฑด๋ฌธ์—์„œ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ๊ทผ๋ฐ ์•ž์—์„œ gets์—์„œ ํฌ๋ฉง ์„ค์ •๊ณผ ํฌ๊ธฐ๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— bof๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. Memory Corruption: Stack Buffer Overflow ์Šคํƒ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ(Stack Buffer Overflow) ์„ธ๊ณ„ ์ตœ์ดˆ์˜ ์›œ์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๋ชจ๋ฆฌ์Šค ์œ”๋„ ์ด ๊ณต๊ฒฉ์„ ํ†ตํ•ด ์ „ํŒŒ๋จ ๋ณด์•ˆ ๊ณต๋ถ€๋ฅผ ๋ชจ๋ฅด๋Š” ๊ฐœ๋ฐœ์ž๋„ ์•Œ๋งŒํผ ์œ ๋ช…ํ•˜๊ณ  ์—ญ์‚ฌ..

๐ŸŒ‡โ”‚System_Study/๐Ÿ“•โ”‚Dreamhack_Hacking

Overwrite _rtld_global

Overwrite _rtld_global ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฆฌํ„ด ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด lib์™€ ๋กœ๋”์—์„œ ๋‹ค์–‘ํ•œ ํ•จ์ˆ˜ ํ˜ธ์ถœ! HTML ์‚ฝ์ž… ๋ฏธ๋ฆฌ๋ณด๊ธฐํ•  ์ˆ˜ ์—†๋Š” ์†Œ์Šค ๋ชจ๋“  ๋ณดํ˜ธ๊ธฐ๋ฒ•์ด ์ ์šฉ๋œ ๋ชจ์Šต ์•„๋ฌด๋ž˜๋„ ๋กœ๋”๋ฅผ ์šฐํšŒํ•˜์—ฌ ์‹คํ–‰ํ•ด๋ด์•ผ๊ฒ ๋„ค์š” exploit ์„ค๊ณ„ lib ๋ฐ loder base addr ๊ณ„์‚ฐ ์˜ˆ์ œ์—์„œ ์ œ๊ณตํ•œ stdout ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด lib_base๋ฅผ ๊ตฌํ•˜๊ณ  "/lib64/ld-linux-x86-64.so.2"๊ฐ€ ๋งตํ•‘๋œ ๋กœ๋”์˜ ๋ฒ ์ด์Šค ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋ด…์‹œ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋กœ๋”๊ฐ€ ๋งตํ•‘๋œ ์ฃผ์†Œ์˜ ๊ฐ„๊ฒฉ์€ ์ผ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋””๋ฒ„๊น…์„ ํ†ตํ•ด ๊ฐ„๊ฒฉ์„ ์•Œ์•„๋‚ด๊ณ  ์˜คํ”„์…‹์„ ๊ณ„์‚ฐํ•ด ์•Œ์•„๋ด…์‹œ๋‹ค. _rtld_global ๊ตฌ์กฐ์ฒด ๊ณ„์‚ฐ ๋กœ๋”์˜ ๋ฒ ์ด์Šค ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋ƒˆ๋‹ค๋ฉด, rtld_global ๊ตฌ์กฐ์ฒด์˜ ์‹ฌ๋ณผ ์ฃผ์†Œ๋ฅผ ๋”ํ•ด ํ•ด๋‹น ๊ตฌ์กฐ์ฒด์˜ ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋‚ด..

๐ŸŒ‡โ”‚System_Study/๐Ÿ“•โ”‚Dreamhack_Hacking

rtld

์ฐธ๊ณ ๋กœ rtld๋Š” return to LD library ๋ผ๊ณ  ์ถ”์ธกํ•˜์‹œ๋Š” ๋ถ„์ด ์žˆ์œผ์‹œ๋”๋ผ๊ณ ์š” ์ €๋„ ์–ด๋Š์ •๋„ ๊ทธ๋Ÿฌ์ง€ ์•Š์„๊นŒ?(์—ฌ๊ธฐ ๋กœ๋˜๋ฆฌ์•ˆ์ฒ˜๋Ÿผ ใ…Ž) rtld HTML ์‚ฝ์ž… ๋ฏธ๋ฆฌ๋ณด๊ธฐํ•  ์ˆ˜ ์—†๋Š” ์†Œ์Šค stdout์ด ์ถœ๋ ฅ๋˜๋‹ˆ๊นŒ lib_base๋ฅผ ๊ตฌํ•˜๋ฉฐ, ์ž„์˜ ์ฃผ์†Œ ์“ฐ๊ธฐ ์ทจ์•ฝ์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. get_shell()ํ•จ์ˆ˜๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ.. stdout์ด ์ถœ๋ ฅ๋˜๋‹ˆ๊นŒ lib_base๋ฅผ ๊ตฌํ•˜๋ฉฐ, ์ž„์˜ ์ฃผ์†Œ ์“ฐ๊ธฐ ์ทจ์•ฝ์ (์ „์— ํ–ˆ๋˜)์ด ์กด์žฌ get_shell() ํ•จ์ˆ˜๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ NX๋„ ์šฐํšŒ๋˜๊ณ  ๋‚˜๋จธ์ง€ ์ทจ์•ฝ์ ์€ ์ธ์ž๋กœ ํ•˜๋‹ˆ๊นŒ ใ…‡ใ…‹ ์ฆ‰, ์ž„์˜ ์ฃผ์†Œ ์“ฐ๊ธฐ ์ทจ์•ฝ์ ์„ ์ด์šฉ dl_rtld_lock_recursive๋ฅผ get_shell()๋กœ ๋ฎ์–ด ์‰˜์„ ๋”ฐ๋ฉด ์…ธ์„ ํš๋“ํ•  ์ˆ˜ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด Partial RELRO๋‹ˆ๊นŒ GOT Overwrite..

๐ŸŒ‡โ”‚System_Study/๐Ÿ“•โ”‚Dreamhack_Hacking

Background: _rtld_global

_rtld_global ๋ฆฌ๋ˆ…์Šค ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์— ๋ช…์‹œ๋œ ์ฝ”๋“œ์˜ ๊ฒฐ๊ณผ๊ฐ’์ด ์šฐ๋ฆฌ์—๊ฒŒ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜์–ด ํ”„๋กœ์„ธ์Šค๋กœ ๋“ฑ๋ก ์‹œ ํ”„๋กœ๊ทธ๋žจ์— ๋ช…์‹œ๋œ ์ฝ”๋“œ๋ฟ๋งŒ ์•„๋‹Œ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์—ฌ์—ญ์„ ํ• ๋‹นํ•˜๋Š” ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ์ฝ”๋“œ๊ฐ€ ๋กœ๋”์— ์˜ํ•ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋“ฑ๋ก๋˜๊ฑฐ๋‚˜ ์ข…๋ฃŒ ์‹œ ์“ฐ์ด๋Š” ๋ณ€์ˆ˜์™€ ์˜์—ญ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์˜ ๊ณต๊ฒฉ ๊ธฐ๋ฒ• ๊ฐœ๋ฐœ! ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ €ํฌ ๋ณด์•ˆ์ชฝ์—์„  ์ด๋Ÿฐ ๊ตฌ์กฐ์™€ ๊ตฌ๋™์„ ์ดํ•ดํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค ๊ฐ™์ด ์•Œ์•„๋ด…์‹œ๋‹ค. HTML ์‚ฝ์ž… ๋ฏธ๋ฆฌ๋ณด๊ธฐํ•  ์ˆ˜ ์—†๋Š” ์†Œ์Šค __GI_exit ์•ž์„œ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ๋ณด์‹œ๋ฉด ๋ณ„๋‹ค๋ฅธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰X ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ์ข…๋ฃŒ์‹œ์— ์šฐ๋ฆฌ๊ฐ€ ๋ชจ๋ฅด๋Š” ๋งŽ์€ ์ฝ”๋“œ๋“ค์ด ๋‚ด๋ถ€์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š”๋ฐ, ํ•œ๋ฒˆ ์‚ดํŽด๋ด…์‹œ๋‹ค. ์ผ๋‹จ main ํ•จ์ˆ˜ ๋‚ด ๋ฆฌํ„ดํ•˜๋Š” ๋ช…๋ น์–ด์— ๋ธŒํฌ๋ฅผ ์„ค์ • ..

๐ŸŒ‡โ”‚System_Study/๐Ÿ“•โ”‚Dreamhack_Hacking

send_sig

send_sig ์Œ.. ๋‚ด ๋ญ setvbuf ๋ถ€๋ถ„๊ณผ 5-7๊นŒ์ง€๋Š” 1๋ฒˆ์งธ ์ธ์ž 1์ด๋‹ˆ๊นŒ write์ธ๋“ฏ ์‹ถ๋„ค์š” ๊ทธ๋ฆฌ๊ณ  11๋ฒˆ์งธ ์ฝ”๋“œ๊ฐ€ signal์„ writeํ•ด์„œ read์„ 1024byte๋งŒํผ ํ•˜๋Š” ๊ฑธ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ v3๊ฐ€ ์ด์ œ buf์ธ ๋“ฏ ์‹ถ๊ธฐ์— v3[8]์ด๊ตฌ๋‚˜.. ์ด๋ฅผ ์ด์šฉํ•ด NX๊ฐ€ ๊ฑธ๋ ค ์žˆ์œผ๋ฏ€๋กœ SROP๋ฅผ ํ•ฉ์‹œ๋‹ค(Partial RELRO ์šฐํšŒ) ์—ฌ๊ธฐ์„œ ์ „ ๋ฌธ์ œ์ฒ˜๋Ÿผ gadget์ด ์—†๊ธฐ์—.. ์ผ๋‹จ execve์˜ ํ•จ์ˆ˜๋‚˜ binsh๊ฐ™์€ ๋ฌธ์ž์—ด์ด ์žˆ๋Š”์ง€ ํ™•์ธ์„ ํ•ด๋ด…์‹œ๋‹ค. PIE๊ฐ€ ์•ˆ ๊ฑธ๋ ค์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์šฉ์ด ์‰ฝ๊ฒŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ•ด์„œ bss ์˜์—ญ์œผ๋กœ read ํ•ด์„œ ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์š” ํŽธํ•ด์กŒ๋„ค์š” ๋‚˜์ด์Šค ์ต์Šค ์„ค๊ณ„ sigreturn ํ˜ธ์ถœ SROP๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด sigreturn ์‹œ์Šค์ฝœ์„ ํ˜ธ์ถœํ•ด์•ผ์ฃ  ๊ทธ๋ฆฌ๊ณ  ์•ž์—์„œ ๋Œ€์ถฉ sig..

Jastes
Jastes