Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 머신러닝
- 드림핵
- lob
- 백준
- 기계학습
- HTML
- CSS
- SWEA
- Sookmyung Information Security Study
- WarGame
- 파이썬
- 숙명여자대학교 정보보안 동아리
- 웹페이지 만들기
- 숙명여자대학교 정보보안동아리
- c
- hackerrank
- siss
- Javascript
- 자료구조 복습
- C언어
- XSS Game
- c++
- hackctf
- Python
- PHP 웹페이지 만들기
- BOJ
- The Loard of BOF
- 생활코딩
- BOJ Python
- 풀이
Archives
- Today
- Total
혜랑's STORY
[pwnable.xyz] add 본문
오늘 해결할 문제는 이 사이트의 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 |