Hack The Planet

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

reverse engineering/CodeEngn

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

cyalume 2020. 12. 11. 15:28

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

 

๋ชฉํ‘œ๊ฐ’ : OEP + Stolenbyte

 

์‹คํ–‰ ํ•ด ๋ด…์‹œ๋‹ค.

 

 

 

 

 

 

 

ํ‚ค ํŒŒ์ผ์„ ์ฐพ์œผ๋ผ๋Š” ๋ฉ”์„ธ์ง€ ๋ฐ•์Šค๊ฐ€ ๋œจ๊ณ , ํ™•์ธ์„ ๋ˆ„๋ฅด๋ฉด ํ‚ค ํŒŒ์ผ ์œ ๋ฌด๋ฅผ ํ™•์ธํ•˜๊ณ  ๋ถ„๊ธฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž…๋‹ˆ๋‹ค.

์ฝ”๋“œ์—”์ง„ 9๋ฒˆ๊ณผ ๋™์ผํ•œ ํ”„๋กœ๊ทธ๋žจ์ด๋„ค์š”.

๋ฌธ์ œ์—์„œ ์›ํ•˜๋Š” ๊ฐ’์ธ OEP ์™€ Stolenbyte ๋งŒ ์ฐพ๊ณ  ํฌ๋ž™ ๊ณผ์ •์€ ์ƒ๋žตํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

 

PEid๋กœ UPX ํŒจํ‚น์ด ๋œ ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

๋””๋ฒ„๊ฑฐ๋กœ ์—ด์–ด๋ด…์‹œ๋‹ค. (x32dbg ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.)

PUSHAD ๊ฐ€ ์žˆ์œผ๋‹ˆ POPAD ๋ฅผ ์ฐพ์•„๊ฐ€์•ผ๊ฒ ์ฃ ?

[Ctrl + F] ํ‚ค๋กœ POPAD ๋ช…๋ น์„ ๊ฒ€์ƒ‰ํ•œ ๋’ค, ํ•ด๋‹น ์ฃผ์†Œ๋กœ ์ด๋™ํ•ด์ค๋‹ˆ๋‹ค.

 

 

 

 

์ด๋ ‡๊ฒŒ POPAD ๋ช…๋ น๊ณผ OEP๋กœ์˜ JMP ์— BP ๋ฅผ ๊ฑธ์–ด์ค๋‹ˆ๋‹ค.

ํ˜„์žฌ OEP ๋Š” 0040100C ๊ฐ€ ๋˜๊ฒ ์ฃ ? (์ถ”ํ›„์— Stolenbyte ๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.)

[F9] ํ‚ค๋ฅผ ๋‘ ๋ฒˆ, [F8] ํ‚ค๋ฅผ ํ•œ ๋ฒˆ ๋ˆŒ๋Ÿฌ ๋ณตํ˜ธํ™” ํ•œ ๋’ค OEP ๋กœ ๊ฐ€ ์ค๋‹ˆ๋‹ค.

 

 

 

 

OEP ์•ž์— nop ๋ช…๋ น์–ด๊ฐ€ 12๊ฐœ๋กœ 12 byte ์˜ ์ž๋ฆฌ๊ฐ€ ๋‚จ์Šต๋‹ˆ๋‹ค.

๊ทธ ๋ฐ‘์—์„œ๋Š” 0 ํ•˜๋‚˜๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๋ฉฐ ๋ฉ”์„ธ์ง€๋ฐ•์Šค๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

9๋ฒˆ ๋ฌธ์ œ ํ’€์ด์—์„œ ์„ค๋ช…ํ–ˆ๋“ฏ, ๋ฉ”์„ธ์ง€๋ฐ•์Šค ํ•จ์ˆ˜์˜ ์ธ์ž๋Š” ์ด 4๊ฐœ ์ž…๋‹ˆ๋‹ค.

ํŒจ์ปค๊ฐ€ Stolenbyte ๋กœ ์„ธ ๊ฐœ์˜ ์ธ์ž๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ช…๋ น์„ ์˜ฎ๊ฒผ๋‚˜ ๋ด…๋‹ˆ๋‹ค.

 

 

 

 

๋‹ค์‹œ POPAD ์™€ JMP ์‚ฌ์ด๋กœ ์™€์„œ ํ™•์ธํ•ด๋ด…์‹œ๋‹ค.

ํŒŒ๋ž€์ƒ‰ ๋ฐ•์Šค์—์„œ ์„ธ ๊ฐœ์˜ ๊ฐ’์ด PUSH ๋˜๋Š” ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ด 12 byte ์ž…๋‹ˆ๋‹ค.)

์ด๋“ค์ด ๋ฉ”์„ธ์ง€๋ฐ•์Šค ํ•จ์ˆ˜๋กœ ์ „๋‹ฌ๋  ๋‚˜๋จธ์ง€ ์„ธ ๊ฐœ์˜ ์ธ์ž์ž…๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด Stolenbyte ๋Š” ๋ถ‰์€์ƒ‰ ๋ฐ•์Šค ์•ˆ์— 6A0068002040006812204000 ๊ฐ€ ๋˜๊ฒ ๋„ค์š”.

์„ธ ์ธ์ž ์ „๋‹ฌ ๋ช…๋ น (Stolenbyte) ์„ ์•ž์œผ๋กœ ์˜ฎ๊ฒจ ์™€ ๋ด…์‹œ๋‹ค.

 

 

 

 

์ „์˜ OEP ์•ž์— nop ๋ช…๋ น์€ ๋ชจ๋‘ 12 byte ์˜€๊ณ , Stolenbyte ๋˜ํ•œ 12 byte ๋กœ ํฌ๊ธฐ๊ฐ€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ 00401000 ์ฃผ์†Œ๋ถ€ํ„ฐ PUSH ๋ช…๋ น์–ด๊ฐ€ ํ•˜๋‚˜์”ฉ ๋“ค์–ด๊ฐ€์•ผ ๊ฒ ๋„ค์š”.

์ฐจ๋ก€๋Œ€๋กœ PUSH ๋ช…๋ น์œผ๋กœ ์ˆ˜์ •ํ•ด์ค€ ๋’ค ์–ด์…ˆ๋ธ” ํ•ด ์ค๋‹ˆ๋‹ค.

ํฌ๊ธฐ๊ฐ€ ๋”ฑ ๋งž์•„ ๋–จ์–ด์ง‘๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ํŒจ์ปค์— ์˜ํ•ด ์˜ฎ๊ฒจ์ ธ ์žˆ๋˜ Stolenbyte ๋ฅผ ํŒจํ‚น์„ ํ’€๊ณ  ์•ž์œผ๋กœ ์˜ฎ๊ฒจ์™”์œผ๋‹ˆ, OEP ๊ฐ€ 0040100C ์—์„œ 00401000 ์ฃผ์†Œ๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ OEP + Stolenbyte ๋Š” 004010006A0068002040006812204000 ์ž…๋‹ˆ๋‹ค.

 

OEP + Stolenbyte =  004010006A0068002040006812204000