rosieblue
article thumbnail
728x90

๐Ÿ”ROP ์‹œ๋ฆฌ์ฆˆ๐Ÿ”

[ROP ์‹œ๋ฆฌ์ฆˆ (1)] ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋งํฌ

[ROP ์‹œ๋ฆฌ์ฆˆ (2)] PLT, GOT <-์—ฌ๊ธฐ!

[ROP ์‹œ๋ฆฌ์ฆˆ (3)] Return to Library ๊ฐœ๋… ๋ฐ ์‹ค์Šต

[ROP ์‹œ๋ฆฌ์ฆˆ (4)] ๋“œ๋ฆผํ•ต(Dreamhack) - rop

 


์ง€๋‚œ ์‹œ๊ฐ„์— ์šฐ๋ฆฌ๋Š” ๋งํฌ์˜ ๊ฐœ๋…๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ณด์˜€๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ•จ์ˆ˜์˜ ์ •์˜๋“ค์„ ๋ชจ์•„๋‘” ๋„์„œ๊ด€์ด๋ผ๊ณ  ๋น„์œ ํ–ˆ๋‹ค. ์ด๋•Œ ์ •์ ๋งํฌ๋Š” ๋„์„œ๊ด€์˜ ์ฑ…๋“ค์„ ๋‹ค ์•”๊ธฐํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ๋™์  ๋งํฌ๋Š” ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋„์„œ๊ด€์˜ ์ฑ…์„ ์ฐธ๊ณ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋น„์œ ํ–ˆ๋‹ค

์˜ค๋Š˜์€ ๋งํฌ ์ค‘์—์„œ๋„ '๋™์  ๋งํฌ'๊ณผ์ •์—์„œ ์‚ฌ์šฉ๋˜๋Š” PLT์™€ GOT์— ๋Œ€ํ•˜์—ฌ ๋‹ค๋ค„๋ณผ ๊ฒƒ์ด๋‹ค ๐Ÿ˜Š

 

๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ด๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ๋ถ„์„ํ•ด๋ณผ ๊ฒƒ์ด๋‹ค

 

Address Space Layout Randomization(ASLR)์€ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ์Šคํƒ, ํž™, ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ์„ ์ž„์˜์˜ ์ฃผ์†Œ์— ํ• ๋‹นํ•˜๋Š” ๋ณดํ˜ธ ๊ธฐ๋ฒ•์ด๋‹ค.

 

ASLR๊ฐ€ ์ ์šฉ๋œ ํ™˜๊ฒฝ์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋™์ ์œผ๋กœ ๋งํฌํ•˜์—ฌ, ์ฆ‰ runtime์—์„œ ๋™์ ์œผ๋กœ ํ•จ์ˆ˜์˜ ์ •์˜๋ฅผ ์ฐพ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ(Dynamically linked binary)๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋งคํ•‘๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๊ฐ€ ๋ณ€ํ•œ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ASLRํ™˜๊ฒฝ์—์„œ ์–ด๋–ป๊ฒŒ ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์ฐพ์•„๋‚ด์•ผํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด PLT์™€ GOT๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

PLT๋Š” ํ•จ์ˆ˜์˜ ์‹ค์ œ ์œ„์น˜๋ฅผ ์•Œ์•„๋‚ด๋Š” ๊ณผ์ •์„ ํ•˜๋Š” ์ฝ”๋“œ ๋ฉ์–ด๋ฆฌ์ด๊ณ , GOT๋Š” PLT์—์„œ ์•Œ์•„๋‚ธ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ํ…Œ์ด๋ธ”์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. GOT์™€ PLT์˜ ์ฃผ์†Œ๋Š” ์ •์ ์ด๋ฏ€๋กœ ์–˜๋„ค๋ฅผ ํ†ตํ•ด ์‹ค์ œ ํ•จ์ˆ˜์˜ ์ฃผ์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค!

 

 

PLT (Procedure Linking Table) : ์™ธ๋ถ€ ํ”„๋กœ์‹œ์ €๋ฅผ ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ํ…Œ์ด๋ธ”. (์ฝ”๋“œ๊ฐ€ ๋“ค์–ด์žˆ์Œ)

PLT์—์„œ๋Š” ์‹ค์ œ ํ•จ์ˆ˜์˜ ์œ„์น˜๋ฅผ ์ฐพ์•„์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์šฐ๋ฆฌ๊ฐ€ puts ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•˜๋ฉด puts๋ฅผ callํ•œ ํ•จ์ˆ˜๋Š” puts@plt ์™€ ๊ฐ™์€ ์ฃผ์†Œ๋กœ call์„ ํ†ตํ•ด ์ ํ”„ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  plt ์ฃผ์†Œ์—์„œ ํ•˜๋‚˜ํ•˜๋‚˜ ๋˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

 

์ง์ ‘ main+14์—์„œ si๋ฅผ ํ†ตํ•ด plt ์•ˆ์œผ๋กœ ๋“ค์–ด๊ฐ€๋ณด์ž.

plt๋กœ ๋“ค์–ด์™”๋Š”๋ฐ ๋‹ค์‹œ puts@got[plt]์˜ ๊ฐ’์„ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด์ฒ˜๋Ÿผ PLT์—์„œ๋Š” GOT๋ผ๋Š” ๊ณณ์„ ํ†ตํ•ด ํ•จ์ˆ˜์˜ ์‹ค์ œ ์ฃผ์†Œ์— ์ ‘๊ทผํ•˜๊ฒŒ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ puts@got[plt] ์˜ ์ฃผ์†Œ๋Š” rip + 0x2fca ๋ผ๋Š” ๊ฒƒ๋„ ์ถ”์ธกํ•  ์ˆ˜ ์žˆ๋‹ค

๋”ฐ๋ผ์„œ ์–ด๋–ค ํ•จ์ˆ˜ func์˜ ์‹ค์ œ์ฃผ์†Œ๋ฅผ ๋ชจ๋ฅด๋”๋ผ๋„, func@plt์˜ ์ฃผ์†Œ๋ฅผ ์•ˆ๋‹ค๋ฉด ๋˜‘๊ฐ™์ด func๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

GOT (Global Offset Table) : PLT๊ฐ€ ์ฐธ๊ณ ํ•˜๋Š” ํ…Œ์ด๋ธ”. ์‹ค์ œ ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๊ฐ€ ๋“ค์–ด์žˆ๋‹ค. (์ฝ”๋“œ๊ฐ€ ๋“ค์–ด์žˆ์ง€๋Š” ์•Š์Œ)

GOT์—์„œ๋Š” ์‹ค์ œ ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋งˆ์น˜ ์›น์—์„œ ํ˜ธ์ŠคํŠธํŒŒ์ผ๊ณผ ๋น„์Šทํ•œ ๋Š๋‚Œ์ด๋‹ค(๋ชจ๋ฅด๋ฉด ๋„˜์–ด๊ฐ€๋„ ๋œ๋‹ค)

๊ทธ๋Ÿฐ๋ฐ ์กฐ๊ธˆ ์ „์˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด๋ณด๋‹ˆ got๊ฐ€ ์•„๋‹ˆ๋ผ puts@plt+6์œผ๋กœ ์ด๋™ํ•œ๋‹ค! 

got๋ช…๋ น์–ด๋ฅผ ํ™•์ธํ•ด got์— ๋ฌด์—‡์ด ์žˆ๋‚˜ ํ™•์ธํ•ด๋ณด๋‹ˆ ์•„๋ž˜์™€ ๊ฐ™์•˜๋‹ค

๋ณด๋‹ˆ GOT์˜ ์ฒซ์ค„์— jmp puts@plt+6์œผ๋กœ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ๋‹ค.

์—ฌ๊ธฐ์„œ "GOT๋Š” ์‹ค์ œ ํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด์žˆ๋‹ค๊ณ  ํ•˜์ง€ ์•Š์•˜๋‚˜์š”? ๊ทธ๋Ÿฐ๋ฐ ์™œ PLT๋กœ ์ ํ”„ํ•˜๋‚˜์š”?"๋ผ๋Š” ๊ถ๊ธˆ์ฆ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋Š”๋ฐ ๊ทธ๋Ÿผ ์ž˜ ๋”ฐ๋ผ์˜ค๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค !! ์ด๋Š” ํ˜„์žฌ ์šฐ๋ฆฌ๊ฐ€ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด puts ํ•จ์ˆ˜๋ฅผ ํ”„๋กœ๊ทธ๋žจ ๋‚ด์—์„œ '์ฒ˜์Œ'์œผ๋กœ ํ˜ธ์ถœํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฒซ๋ฒˆ์งธ๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋Š” GOT์— ์•„์ง putsํ•จ์ˆ˜์˜ ์ฃผ์†Œ๊ฐ€ ์ ํ˜€์žˆ์ง€ ์•Š๋‹ค. ์‹ค์ œ putsํ•จ์ˆ˜์˜ ์ฃผ์†Œ๋Š” putsํ•จ์ˆ˜ ์•ˆ์—์žˆ๋Š” _dl_runtime_resolve_fxsave๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ตฌํ•ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ํ•จ์ˆ˜๊ฐ€ GOT์— putsํ•จ์ˆ˜์˜ ์‹ค์ œ ์œ„์น˜๋ฅผ ์ ์–ด์ค€๋‹ค. ์ด๊ฒŒ ๋ฌด์Šจ์†Œ๋ฆฌ์ฃ ? ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๊ฐ€์ ธ๊ฐ€์‹ค ๋•Œ๋Š” ์ถœ์ฒ˜ ๊ผญ๊ผญ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค ์•ˆ๊ทธ๋Ÿฌ๋ฉด ์ฐพ์•„๊ฐ€์„œ ํ™”๋ƒ„ใ…Žใ…‹ใ…Žใ…‹ใ…Žใ…‹ํ—ค

ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์ฐพ์•„ ์‹คํ–‰ํ•˜๋Š” ๊ณผ์ •์€ ์œ„์™€ ๊ฐ™๋‹ค.

๋‹ค์‹œ ๋ฐ˜๋ณตํ•ด์„œ ์œ„ ๊ธ€์„ ์ฝ์–ด๋ณด์ž. -> ์ฒซ๋ฒˆ์งธ๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋Š” GOT์— ์•„์ง putsํ•จ์ˆ˜์˜ ์ฃผ์†Œ๊ฐ€ ์ ํ˜€์žˆ์ง€ ์•Š๋‹ค. ์‹ค์ œ putsํ•จ์ˆ˜์˜ ์ฃผ์†Œ๋Š” putsํ•จ์ˆ˜ ์•ˆ์—์žˆ๋Š” _dl_runtime_resolve_fxsave๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ตฌํ•ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ํ•จ์ˆ˜๊ฐ€ GOT์— putsํ•จ์ˆ˜์˜ ์‹ค์ œ ์œ„์น˜๋ฅผ ์ ์–ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ callee๋กœ ์ด๋™ํ•˜๊ฒŒ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ calle์—์„œ ๋‹ค์Œ ์ฝ”๋“œ๋“ค์„ ์ซ˜๋ฅด๋ฅต~ ์‹คํ–‰ํ•œ๋‹ค. 

์ดํ›„ ๋‹ค์‹œ ํ”„๋กœ๊ทธ๋žจ์—์„œ puts๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด PLT๊ฐ€ GOT์˜ ๊ฐ’์„ ์ฐธ์กฐํ–ˆ์„ ๋•Œ(GOT์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š”๊ฑด ์•„๋‹ˆ๋‹ค! GOT์—๋Š” ์ฝ”๋“œ๊ฐ€ ์—†๋‹ค! PLT์—๋งŒ ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด์žˆ๋‹ค!!), ๋‹ค์‹œ plt+6๋กœ ๋Œ์•„์˜ค์ง€ ์•Š๊ณ  ๋ฐ”๋กœ puts ํ•จ์ˆ˜์˜ ์‹ค์ œ ์œ„์น˜๋กœ ์ ํ”„ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด์ œ ์ดํ•ด๊ฐ€ ๋˜์—ˆ์„๊นŒ?

 

์ด๋Ÿฐ ์‹์œผ๋กœ ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์ฐพ๋Š” ๊ฒƒ์„ ์šฐ๋ฆฌ๋Š” Runtime Resolve๋ผ๊ณ  ํ•œ๋‹ค. 

 

์ •๋ฆฌํ•˜์ž๋ฉด, ํ•จ์ˆ˜์˜ ์ง„์งœ ์ฃผ์†Œ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์•ˆ์— ์žˆ๋Š”๋ฐ ASLR๋กœ ์ธํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋‚ด์˜ ์ฃผ์†Œ๊ฐ€ ๋žœ๋คํ™”๋˜๊ธฐ ๋•Œ๋ฌธ์— PLT๋ผ๋Š” ๊ฑธ ํ†ตํ•ด์„œ ํ•จ์ˆ˜์˜ ์ฐ ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋‚ด๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๊ณ , GOT์— ๊ทธ ๊ฐ’์„ ๊ธฐ๋กํ•˜์—ฌ ๋‚˜์ค‘์— ๋˜‘๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ์—๋Š” PLT๊ฐ€ GOT์— ๋‹ด๊ฒจ์žˆ๋Š” ํ•จ์ˆ˜์˜ ์ฃผ์†Œ(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋‚ด์˜ ์ฃผ์†Œ. PLT๋ฅผ ํ†ตํ•ด ์•„๊นŒ ์ฐพ์€ ์ฃผ์†Œ)๋กœ ์ ํ”„ํ•˜๋Š” ๊ฒƒ์ด๋‹น


์ฐธ๊ณ ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ •์˜ํ•œ ํ•จ์ˆ˜๋Š” plt์— ์ ํžˆ์ง€ ์•Š๋Š”๋‹ค! ๋˜ํ•œ ASLR์ด ์ ์šฉ๋˜์–ด๋„ PLT ์ฃผ์†Œ๋Š” ๊ณ ์ •์ž„์„ ๊ธฐ์–ตํ•˜์ž(์ด๋ฅผ ํ†ตํ•ด Return to PLT ๊ณต๊ฒฉ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค!)

 

 

์ด์ œ ๋‘ ๋ฒˆ์งธ๋กœ puts๋ฅผ ํ˜ธ์ถœํ•ด๋ณด์ž!

plt๋กœ ๋“ค์–ด๊ฐ€๋ณด์ž!

๋“ค์–ด์™€๋ณด๋ฉด ์˜ค๋ฅธ์ชฝ์— ์•„์˜ˆ puts๋ผ๊ณ  ๋˜์–ด์žˆ๋Š”๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค GOT์˜ ๋ชจ์Šต์„ ๋‹ค์‹œ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

์•„๊นŒ์™€ ๋‹ค๋ฅด๊ฒŒ GOT์— puts์˜ ์‹ค์ œ ์œ„์น˜ 0x7ffff7e45820์ด ๋“ค์–ด์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค !!

์ด๋Ÿฐ์‹์œผ๋กœ PLT์—์„œ๋Š” ๋ฐ”๋กœ puts ํ•จ์ˆ˜์˜ ์‹ค์ œ ์œ„์น˜๋กœ ์ ํ”„ํ•˜๊ฒŒ๋œ๋‹ค!

 

"๋”ฐ๋ผ์„œ PLT์™€ GOT ์˜์—ญ์ด ์กด์žฌํ•˜๋Š” ์ด์œ ๋Š” Dynamically linked binary์˜ ๊ฒฝ์šฐ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „๊นŒ์ง€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ๋งคํ•‘๋œ ํ›„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด, ์ •์  ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ํ•จ์ˆ˜์˜ PLT์™€ GOT ์˜์—ญ์— ์ ‘๊ทผํ•จ์œผ๋กœ์จ ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์ฐพ๋Š”๋‹ค" <- ์ถœ์ฒ˜ : https://haerinn.tistory.com/106

 

startํ•  ๋•Œ got์˜ ๋ชจ์Šต
main๊ฑฐ์˜ ๋‹ค ๋๋‚ฌ์„ ๋•Œ got์˜ ๋ชจ์Šต

 

์ฐธ๊ณ ๋กœ got ๋ช…๋ น์–ด๊ฐ€ ์•ˆ ํ†ตํ•˜๋Š” gdb๋„ ์žˆ๋Š”๋ฐ, ์ด๋Ÿฐ ๊ฒฝ์šฐ objdump -R <์‹คํ–‰ํŒŒ์ผ์ด๋ฆ„> ๋ช…๋ น์–ด๋กœ got๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์‹œ์Šคํ…œ ํ•ดํ‚น ๊ด€์ ์—์„œ ๋ณด๋ฉด, PLT๊ฐ€ GOT์˜ ๊ฐ’์„ ์ฐธ์กฐํ•  ๋•Œ ๋”ฑํžˆ ์–ด๋– ํ•œ ๊ฒ€์ฆ ๊ณผ์ •์„ ๊ฑฐ์น˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, GOT์˜ ๊ฐ’์„ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋ฎ์–ด์“ฐ๋ฉด ํ•ด์ปค๊ฐ€ ์›ํ•˜๋Š” ๊ณณ์œผ๋กœ ์ ํ”„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” GOT Overwrite๋ผ๊ณ  ํ•˜๊ณ  ์ด๋Š” ROP ์‹œ๋ฆฌ์ฆˆ 4ํƒ„์—์„œ ๋‹ค๋ฃฌ๋‹ค

 

์ด๋ ‡๊ฒŒ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋ ๋•Œ๊นŒ์ง€ ํ•จ์ˆ˜ ์ฃผ์†Œ ๋”ฑํžˆ ์•ˆ ๊ตฌํ•˜๊ณ  ํ˜ธ์ถœ๋์„ ๋•Œ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ Lazy Binding์ด๋ผ๊ณ  ํ•œ๋‹ค. 

Lazy Binding์˜ ๊ฒฝ์šฐ ์‹คํ–‰ ์ค‘์— GOT์— ์ ‘๊ทผํ•˜์—ฌ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ์•ˆ์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’์ด ๋ฐ”๋€๋‹ค. ๋”ฐ๋ผ์„œ ์‹คํ–‰ ์ค‘ GOT์— '์“ฐ๊ธฐ ๊ถŒํ•œ'์ด ๋“ค์–ด์žˆ์œผ๋ฏ€๋กœ ๋ณด์•ˆ์— ์ทจ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฐธ๊ณ ๋กœ ์ด๋Š” Partial RELRO์— ํ•ด๋‹นํ•˜๋Š”๋ฐ ์ด๋Š” ๋‹ค์Œ์— ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

ํ•œํŽธ Now binding์€ ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘๋‹จ๊ณ„์—์„œ(์ปดํŒŒ์ผ ๊ณผ์ • ๋ง๊ณ !) ์ด๋ฏธ GOT์—๋‹ค ๋‹ค ๊ฐ’์„ ์ ์–ด๋†“๋Š” ๋ฐฉ์‹์ด์–ด์„œ ํ•จ์ˆ˜ํ˜ธ์ถœ์‹œ์— ๋”ฑํžˆ ๋‹ค๋ฅธ ์ž‘์—…์ด ํ•„์š”๊ฐ€ ์—†๋‹ค. ๊ทธ๋ฆฌ๊ณ  GOT์— ๋“ค์–ด์žˆ๋Š” ์• ๋“ค์€ ๋‹ค ๊ณ ์ •๋˜์–ด์žˆ๋‹ค. ๋”ฐ๋ผ์„œ GOT์— ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์—†์–ด์„œ GOT Overwrite์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค!! ์ด๊ฒƒ์ด Full RELRO์— ํ•ด๋‹นํ•œ๋‹ค.

 

Full RELRO

๊ทธ๋ ‡๋‹ค๋ฉด Full RELRO๊ฐ€ ์ ์šฉ๋˜๋ฉด ํ•ดํ‚น์€ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ผ๊นŒ? ๋˜ ์•„๋‹ˆ๋‹ค.. ์šฐ๋ฆฌ์˜ ํ•ด์ปค๋“ค์€ ๋ฐ์ดํ„ฐ์„ธ๊ทธ๋จผํŠธ์— ๋˜ overwriteํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๋ถ€๋ถ„์„ ์ฐพ์•„๋ƒˆ๋‹ค(์ง‘๋… ใ„ทใ„ท) ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ํ›…(Hook)์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ์ด๋Š” ๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ์— ๋“ค์–ด์žˆ๋Š” ๋ณ€์ˆ˜์ด๋‹ค. ํ›… overwrite ์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ์— ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

์ด์™ธ์—๋„ ์›Œ๊ฒŒ์ž„์„ ํ’€๋ฉด์„œ FULL RELRO๊ฐ€ ์ ์šฉ๋˜์–ด์žˆ์„ ๋•Œ ์•„๋ž˜ ๋ฐฉ๋ฒ•๋“ฑ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค

  • hook overwrite (glibc 2.34๋ถ€ํ„ฐ ์ œ๊ฑฐ)
  • rtld overwrite
  • system plt(ํ˜น์€ onegadget)์•Œ์•„๋‚ธ ํ›„ rop ๋“ฑ..

 

์ฐ ํ•จ์ˆ˜์ฃผ์†Œ๋Š” libc์•ˆ์— ์žˆใ„ทใ…!

 

 

 

๋‹ค์Œ ๊ธ€

[ROP ์‹œ๋ฆฌ์ฆˆ (3)] Return to Library ๊ฐœ๋… ๋ฐ ์‹ค์Šต

 

[๋“œ๋ฆผํ•ต(Dreamhack)] Return to Library ๊ฐœ๋… ๋ฐ ์‹ค์Šต

ASLR์™€ NX์˜ ๋“ฑ์žฅ์œผ๋กœ ์ธํ•ด ํ•จ์ˆ˜๋‚˜ ๋ฒ„ํผ์˜ ์ฃผ์†Œ๋ฅผ ์•Œ๊ธฐ ์–ด๋ ค์›Œ์กŒ๊ณ , ์›ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์กฐ์ฐจ ์–ด๋ ค์›Œ์กŒ๋‹ค. ์˜ค๋Š˜์€ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ์…ธ ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‰˜์„ ๋”ฐ๋‚ด๋Š”

hannahsecurity.tistory.com

 


์ฐธ๊ณ ํ•  ๋งŒํ•œ ์ข‹์€ ๊ธ€๋“ค

https://dreamhack.io/lecture/courses/66

https://haerinn.tistory.com/106#2.%20%EC%A0%95%EB%A6%AC

 

[Pwnable] PLT, GOT

PLT, GOT example4์˜ ๋””์Šค์–ด์…ˆ๋ธ”๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด puts์™€ scanf ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ํ•ด๋‹น ํ•จ์ˆ˜์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฝ”๋“œ ์ฃผ์†Œ๋กœ ๋ฐ”๋กœ ์ ํ”„ํ•˜์ง€ ์•Š๊ณ  PLT ์˜์—ญ์œผ๋กœ ์ ํ”„ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. Procedure Linkage Table(P

haerinn.tistory.com

https://bpsecblog.wordpress.com/2016/03/07/about_got_plt_1/

 

PLT์™€ GOT ์ž์„ธํžˆ ์•Œ๊ธฐ 1

Dynamic Linking ๊ณผ์ •์„ ์ถ”์ ํ•ด PLT์™€ GOT๋ฅผ ์ดํ•ดํ•ด๋ณด์ž :) ์‹œ์Šคํ…œ ํ•ดํ‚น์„ ๊ณต๋ถ€ํ•˜์‹œ๋Š” ๋ถ„๋“ค์ด๋ผ๋ฉด PLT์™€ GOT์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ œ ๋ง‰ ์‹œ์Šคํ…œ ํ•ดํ‚น ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ•œ ๋ถ„๋“ค๋„ ํ•œ ๋ฒˆ ์ฏค ๋“ค์–ด๋ณด์…จ์„

bpsecblog.wordpress.com

https://shayete.tistory.com/entry/6-Return-Oriented-Programming

 

6. Return Oriented Programming (ROP)

6. python programming ๊ด€๋ จ ๋™์˜์ƒ์ž…๋‹ˆ๋‹ค. ์„ค๋ช…์€ ์ƒ๋žตํ•˜๋„๋ก ํ• ๊ฒŒ์š”. ํ•„์š”ํ•˜์‹  ๋ถ„์€ ์ฐธ๊ณ ํ•˜์„ธ์š”! python ๋ฐ”์ด๋„ˆ๋ฆฌ ์‚ฌ์šฉ๋ฒ•์€ ./python [port] ์ž…๋‹ˆ๋‹ค. 7. ROP 6์€ ๊ฑด๋„ˆ๋›ฐ๊ณ  ์™œ 7์ด๋ƒ๋ฉด, ์ค‘๊ฐ„์— python basic programmi

shayete.tistory.com

 

profile

rosieblue

@Rosieblue

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!