Hack The Planet

๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค, cyalume์˜ ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.

reverse engineering/CodeEngn

[CodeEngn] Basic RCE L10 ๋ฌธ์ œํ’€์ด

cyalume 2020. 12. 11. 00:19

๋ฌธ์ œ๋Š” ์ฝ”๋“œ์—”์ง„ ์‚ฌ์ดํŠธ์—์„œ ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์••์ถ• ํ•ด์ œ ์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ codeengn)

 

๋ชฉํ‘œ๊ฐ’ : OEP + ๋“ฑ๋ก์„ฑ๊ณต์œผ๋กœ ๊ฐ€๋Š” ๋ถ„๊ธฐ์ ์˜ OPCODE

 

OPCODE ๋ž€?

 

๋”๋ณด๊ธฐ

๋””๋ฒ„๊ฑฐ์—์„œ ์ฃผ์†Œ๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ์ฐฝ๊ณผ ์–ด์…ˆ๋ธ”๋ฆฌ ๋ช…๋ น์ด ํ‘œ์‹œ๋˜๋Š” ์ฐฝ ์‚ฌ์ด์˜ ์ˆซ์ž๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ์ฝ”๋“œ.

์ปดํ“จํ„ฐ๊ฐ€ ์‹คํ–‰ํ•  ์ฒ˜๋ฆฌ์˜ ์ข…๋ฅ˜ (์—ฐ์‚ฐ์˜ ์ข…๋ฅ˜)๋ฅผ ๋‚˜ํƒ€๋ƒ„.

 

์‹คํ–‰์„ ์‹œ์ผœ๋ด…๋‹ˆ๋‹ค.

 

 

 

 

์•„๋ฌด๊ฒƒ๋„ ์ž…๋ ฅ์ด ๋˜์ง€ ์•Š๋Š”๊ตฐ์š”.

OEP ์ด์•ผ๊ธฐ๊ฐ€ ๋‚˜์™”์œผ๋‹ˆ ํŒจํ‚น์ด ๋˜์–ด์žˆ๊ฒ ์ฃ ?

PEid๋กœ ํ™•์ธํ•ด๋ด…์‹œ๋‹ค.

 

 

 

 

ASPack์œผ๋กœ ํŒจํ‚น์ด ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

 

ASPack ํŒจํ‚น์˜ ํŠน์ง•?

 

๋”๋ณด๊ธฐ

PUSHAD -> ๋ณตํ˜ธํ™” ์ฝ”๋“œ ์‹คํ–‰ -> POPAD -> Return 0C -> OEP ๊ฐ’ PUSH -> Return์œผ๋กœ OEP ์ฃผ์†Œ๋กœ ์ด๋™

 

๋””๋ฒ„๊ฑฐ๋กœ ์—ด์–ด๋ด…์‹œ๋‹ค.

 

 

 

 

PUSHAD ๋ช…๋ น์ด ์žˆ๋„ค์š”.

์šฐํด๋ฆญ -> Search for -> All comands ๋กœ POPAD ๋ฅผ ์ฐพ์•„๊ฐ€๋ ค ํ–ˆ์œผ๋‚˜ POPAD์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ต‰์žฅํžˆ ๋งŽ์•˜๋˜ ๊ด€๊ณ„๋กœ RETN 0C ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์ด๋™ํ•ด์ค๋‹ˆ๋‹ค. (x32dbg ๋ฅผ ์‚ฌ์šฉํ•˜์‹ ๋‹ค๋ฉด ret C ๋กœ ๊ฒ€์ƒ‰ํ•ด ์ฐพ์œผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.)

 

 

 

 

 

 

 

์ด๋ ‡๊ฒŒ ๋‹จ๋ฒˆ์— ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

RETN 0C ๋ช…๋ น์— BP๋ฅผ ๊ฑธ๊ณ  ์—ฌ๊ธฐ๊นŒ์ง€ ์‹คํ–‰ํ•˜๋ฉด ํ•˜๋‹จ์— PUSH ๋ช…๋ น์–ด๊ฐ€ PUSH (OEP) ๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

 

 

์ด๋ ‡๊ฒŒ ๋ง์ด์ฃ .

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ์˜ RETN ๋ช…๋ น์–ด๋กœ ์ธํ•ด OEP ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

OEP ๋Š” 00445834 ๊ฐ€ ๋˜๊ฒ ๋„ค์š”.

์šฐ๋ฆฌ๋„ ์›๋ณธ ์ฝ”๋“œ๊ฐ€ ์••์ถ•ํ•ด์ œ๋œ ์œ„์น˜๋กœ ์ด๋™ํ•ด๋ด…์‹œ๋‹ค.

 

 

 

 

OEP๋กœ ์™”์ง€๋งŒ ๋‚œ์žกํ•œ ์ฝ”๋“œ๋ฐ–์— ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

[Ctrl + A] ํ‚ค๋กœ Analyse code ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด ์ •๋ฆฌํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

 

์ด์ œ ์šฐํด๋ฆญ -> Search for -> All referenced text strings ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค ๋คํ”„๋ฅผ ๋–  ์ฃผ๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ, ์•ˆ ํ•œ ์ƒํƒœ์—์„œ๋„ ์ถฉ๋ถ„ํžˆ ๊ตฌํ•  ์ˆ˜ ์žˆ๊ธฐ์— ์ƒ๋žตํ•  ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

์กฐ๊ธˆ๋งŒ ์Šคํฌ๋กค ํ•ด ๋ณด๋ฉด ์„ฑ๊ณต์‹œ ์ถœ๋ ฅ๋  ๋ฌธ์ž์—ด์ด ๋ณด์ž…๋‹ˆ๋‹ค.

 

 

 

 

์—ฌ๊ธฐ๋กœ ์ด๋™ํ•ด์ค๋‹ˆ๋‹ค.

 

 

 

 

์ด์ œ๋Š” ๋“ฑ๋ก ์„ฑ๊ณต์œผ๋กœ ๊ฐ€๋Š” ๋ถ„๊ธฐ๋ฌธ์˜ OPCODE ๋ฅผ ๊ตฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋“ฑ๋ก ์„ฑ๊ณต ์ฃผ์†Œ๋Š” ์ฐพ์•˜์œผ๋‹ˆ, ๋ถ„๊ธฐ์ ์€ ์ด ์œ„์— ์žˆ์„ ๊ฒ๋‹ˆ๋‹ค.

๋ฐ”๋กœ ์œ„์— ์กฐ๊ฑด ๋ถ„๊ธฐ๋ฌธ์ด ์žˆ๋Š” ์ง€ ํ™•์ธํ•ด์ค๋‹ˆ๋‹ค.

 

 

 

 

004454D4 ์ฃผ์†Œ์— JNZ ๋ช…๋ น์ด ์žˆ๋„ค์š”.

์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๊ทธ ๋ฐ˜ํ™˜๊ฐ’์ด 0์ด ์•„๋‹ˆ๋ฉด ์‹คํ–‰๋˜๋Š” ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ช…๋ น์ด ์‹คํ–‰๋˜๋ฉด ๋“ฑ๋ก ์„ฑ๊ณต์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  XOR EAX, EAX (Return 0) ๋ช…๋ น์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ JNZ ์˜ ์‹คํ–‰ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ’์ด ์„ฑ๊ณต/์‹คํŒจ๋กœ ๋ถ„๊ธฐํ•˜๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ช…๋ น์ด ๋“ฑ๋ก ์„ฑ๊ณต์œผ๋กœ ๊ฐ€๋Š” ๋ถ„๊ธฐ์ ์ด ๋˜๊ฒ ์ฃ ?

 

 

 

 

์ด ๋ถ„๊ธฐ์ ์˜ OPCODE ๋Š” ์œ„ ์ƒ์ž ์•ˆ์˜ 7555 ์ž…๋‹ˆ๋‹ค.

 

OEP๋Š”  00445834 ์ด๊ณ , ๋ถ„๊ธฐ์ ์˜ OPCODE ๋Š” 7555์ž…๋‹ˆ๋‹ค.

 

 

 

 

OEP + OPCODE = 004458347555