Hacking/System Hacking

gdb ์‚ฌ์šฉ๋ฒ• ์ตํžˆ๊ธฐ

์†ก์ด ๐Ÿซง 2022. 3. 28. 20:49

gdb๋Š” ๋ฆฌ๋ˆ…์Šค์˜ ๋Œ€ํ‘œ์ ์ธ ๋””๋ฒ„๊ฑฐ์ค‘ ํ•˜๋‚˜! 

 

ELF

- ๋ฆฌ๋ˆ…์Šค ์‹คํ–‰ ํŒŒ์ผ ํ˜•์‹ 

- ํฌ๊ฒŒ ํ—ค๋”์™€ ์—ฌ๋Ÿฌ ํ˜•์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง 

--> ELF ์˜ ํ—ค๋”์— ์ง„์ž…์ (EP) ํ•„๋“œ ์กด์žฌ (OS๋Š” ELF๋ฅผ ์‹คํ–‰ํ•  ๋•Œ EP๋ถ€ํ„ฐ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰) 

//ํ•ด๋‹น ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ง„์ž…์  ํ™•์ธ ๊ฐ€๋Šฅ 
//entry point address 
readelf -h debugee(ํŒŒ์ผ๋ช…)

entry point address : 0x1060 

 

gdb์—์„œ start ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ง„์ž…์  ์ฃผ์†Œ๋ฅผ rip๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

gdb <์‹คํ–‰ํŒŒ์ผ>
(gdb) start

<context>

1. registers : ๋ ˆ์ง€์Šคํ„ฐ์˜ ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์คŒ 

2. disasm : rip๋ถ€ํ„ฐ ์—ฌ๋Ÿฌ์ค„์— ๊ฑธ์ณ ๋””์Šค์–ด์…ˆ๋ธ”(๊ธฐ๊ณ„์–ด -> ์–ด์…ˆ๋ธ”๋ฆฌ)๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์คŒ 

3. stack : rsp๋ถ€ํ„ฐ ์—ฌ๋Ÿฌ์ค„์— ๊ฑธ์ณ ์Šคํƒ์˜ ๊ฐ’๋“ค์„ ๋ณด์—ฌ์คŒ 

4. backtrace :  ํ˜„์žฌ rip์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ์–ด๋–ค ํ•จ์ˆ˜๋“ค์ด ์ค‘์ฒฉ๋˜์–ด ํ˜ธ์ถœ๋๋Š”์ง€ ๋ณด์—ฌ์คŒ 

 

break & continue 

break :  ํŠน์ • ์ฃผ์†Œ์— ์ค‘๋‹จ์  ์„ค์ • 

continue : ์ค‘๋‹จ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ๊ณ„์† ์‹คํ–‰์‹œํ‚ด 

 

b *main

 

+) pwndbg๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด u ๋˜๋Š” nearpc ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๊น”๋”ํ•˜๊ฒŒ ์ถœ๋ ฅ ๊ฐ€๋Šฅ 

 

[GDB ๋ช…๋ น์–ด ์ •๋ฆฌ]

disas ํ•จ์ˆ˜๋ช… : ํ•ด๋‹น ํ•จ์ˆ˜์˜ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ex) disas main 

b *ํ•จ์ˆ˜๋ช…+์ƒ์ˆ˜ or b *๋ฉ”๋ชจ๋ฆฌ์ฃผ์†Œ .. : ํ•ด๋‹น ์˜์—ญ์— breakpoint 

n(next) : ๋‹ค์Œ ์ฝ”๋“œ ์ง„ํ–‰

c(continue) : ์ค‘๋‹จ์  ์˜ฌ๋•Œ๊นŒ์ง€ ๋ฉˆ์ถ”์ง€์•Š๊ณ  ์ง„ํ–‰ 

ni(next instruction): ์–ด์…ˆ๋ธ”๋ฆฌ์–ด ํ•œ์ค„ ์‹คํ–‰(ํ•จ์ˆ˜ ์•ˆ์œผ๋กœ x)

si(step into): ์–ด์…ˆ๋ธ”๋ฆฌ์–ด ํ•œ์ค„ ์‹คํ–‰(ํ•จ์ˆ˜ ์•ˆ์œผ๋กœ)

finish : si๋กœ ํ•จ์ˆ˜์•ˆ์— ๋“ค์–ด๊ฐ”์ง€๋งŒ ๊ทธ๋งŒ ํ•จ์ˆ˜๋ฅผ ๋‚˜์˜ค๊ณ  ์‹ถ์„ ๋•Œ ํ•จ์ˆ˜์˜ ๋์œผ๋กœ ์ด๋™์‹œ์ผœ์คŒ 

p $๋ ˆ์ง€์Šคํ„ฐ๋ช… : ๊ฐ’์„ ํ”„๋ฆฐํŠธํ•จ 

p/[์ถœ๋ ฅํ˜•์‹] ๋ ˆ์ง€์Šคํ„ฐor๋ณ€์ˆ˜ : ๊ณ„์‚ฐ ๊ฒฐ๊ณผ ํ™•์ธ ๊ฐ€๋Šฅ 

x/d ์ฃผ์†Œ or $๋ ˆ์ง€์Šคํ„ฐ : ์ฃผ์†Œ or ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์„ ์ •์ˆ˜๋กœ ๋ณด์—ฌ์คŒ

x/s ์ฃผ์†Œ or $๋ ˆ์ง€์Šคํ„ฐ  : String์œผ๋กœ ๋ณด์—ฌ์คŒ 

x/gx  ์ฃผ์†Œ or $๋ ˆ์ง€์Šคํ„ฐ  : 8byte ๋งŒํผ ๋ณด์—ฌ์คŒ 

x/wx ์ฃผ์†Œ or $๋ ˆ์ง€์Šคํ„ฐ : 4byte๋งŒํผ ๋ณด์—ฌ์คŒ 

x/10i : ์˜ˆ๋ฅผ ๋“ค์–ด 10i ์ธ ๊ฒฝ์šฐ rip๋ถ€ํ„ฐ 10์ค„์˜ ๋ช…๋ น์–ด๋ฅผ ์–ด์…ˆ๋ธ”๋ฆฌ๋กœ ๋ณด๊ฒ ๋‹ค. 

jump ํ•จ์ˆ˜ or ํ–‰ or ๋ฉ”๋ชจ๋ฆฌ : ๊ฐ•์ œ ์ ํ”„ 

info r : ๋ ˆ์ง€์Šคํ„ฐ ๋ณด๊ธฐ(์ „์ฒด) 

info r $๋ ˆ์ง€์Šคํ„ฐ : ํŠน์ • ๋ ˆ์ง€์Šคํ„ฐ ๋ณด๊ธฐ

 

tele(telescope): ๊ฐ•๋ ฅํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋คํ”„ ๊ธฐ๋Šฅ , ํŠน์ • ์ฃผ์†Œ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ’ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ์ฃผ์†Œ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜์—ฌ ๊ฐ’์„ ๋ณด์—ฌ์ค€๋‹ค.

vmmap : ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ ˆ์ด์•„์›ƒ์„ ๋ณด์—ฌ์ค€๋‹ค. 

 

 

** ์ž…๋ ฅ๊ฐ’์ด ํ•„์š”ํ•  ๋•Œ ํ‚ค๋ณด๋“œ๋ฅผ ํ†ตํ•ด ์ž…๋ ฅ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’์ธ ๊ฒฝ์šฐ

ex) ํŒŒ์ด์ฌ์„ ์ด์šฉํ•ด ์ธ์ž 2๊ฐœ ์ž…๋ ฅ ์˜ˆ์‹œ 

r $(python -c 'print "\xff"*100') <<< $(python -c 'print "dreamhack"')

 

ํŒŒ์ด์ฌ ์ž…๋ ฅ์ด ์•ˆ๋จน์–ด์„œ ๊ตฌ๊ธ€๋ง ๊ฒฐ๊ณผ ํ•ด๊ฒฐ๐Ÿ˜ญ

https://stackoverflow.com/questions/15236832/how-do-i-reinstall-a-directory-in-usr-bin-python


[์ถœ์ฒ˜]

dreamhack systemhacking

ARGOS ์‹œ์Šคํ…œํ•ดํ‚น ์ž๋ฃŒ