일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 사이버보안학과
- Allocation Starategy
- systemhacking
- AjouUniv #Whois #정보보안교육 #Pwnable
- 코딩도장
- 아주대학교 #Whois #정보보안교육 #4주차
- N0NamedWargame #AjouUniv #mandu-mandu #forensics
- 스케줄링
- AjouUniv #SuniNatas #Web
- Whois #정보보안교육 #AjouUniv #Pwnable
- Memory Virtualization
- python
- Variable Partition
- N0Named
- AjouUniv #Whois #Reversing
- Dreamhack
- 운영체제
- 아주대학교
- Whois #AjouUniv #정보보안교육 #Pwnable
- ftz
- N0NamedWargame #mandu-mandu #forensics #left_side_B
- hackerschool
- Pwnable
- AjouUniv #Whois #정보보안교육
- Whois #정보보안교육 #Ajou
- N0NamedWargame #mandu-mandu #forensics #길에서주어온만두
- SuNiNaTaS #mandu-mandu #AjouUniv #forensics
- webhacking
- Whois #정보보안교육 #webhacking.kr
- HackCTF
- Today
- Total
chipkkang9's story
[Whois 정보보안교육] Magic Spell 문제풀이 본문
준비물
IDA Pro 7.0, Linux 작업환경 (본인은 kali linux를 사용함)
IDA Pro – Hex Rays
Substantial changes Is to be expected in every release: new features, supported processors, etc which are all added after deliberation and discussion.
hex-rays.com
문제소개
문제풀이
두 번째 문제는 Magic Spell이라고 한다.
문제에 접근해보면 아래와 같이 나온다.
이 또한 IDA로 파일을 열어보았다.
코드를 살펴보면,
문자형 변수 v1과 v2가 선언되어 있고, v1과 v2 사이의 간격은 31(16+15)칸이다.
아무래도 v1에는 특정한 값을 넣어주고, BOF를 의도적으로 일으켜
v2에 77값이 흘러들어가게 만들어주어야 하는 것 같다.
앞서 1번 문제에서 알 수 있었듯,
77을 흘려주려면 77을 넣는 것이 아닌 77의 아스키값, "M"을 넣어주어야 한다.
if문이 제대로 만족되어 새로운 함수가 실행된 모양이다.
그럼 새로운 함수 spell2();를 살펴보도록 하자.
spell2(); 함수를 읽어보면, bof라는 상자에 scanf로 문자열을 입력받고 있다.
아무래도 문제의 의도는 bof 상자에서 BOF를 일으켜
아래 if문 속에 있는 magic으로 pwnable!이라는 문자열을 흘려보내주라는 의미같다.
그럼 먼저 알아야 하는 것은 bof 상자의 크기는 어느 정도일지이다.
IDA에서 bof를 더블클릭하여 bof가 차지하는 주소를 살펴보면 아래 그림과 같다.
bof가 public 변수로 선언되고 차지하는 주소는
4090부터 409F까지 총 16개이다.
그리고 그 후에 선언한 magic 상자는 총 8칸으로 구성되어있단 것을 알 수 있다.
이는 "pwnable!"이 빈자리 없이 꼭 맞게 들어가는 것임을 알 수 있다.
그럼 앞에서 했던 방식을 그대로 적용해서 명령어를 입력해보았다.
무슨 일일까..? 아무것도 변한 것이 없다.
그래서 그냥 깜빡거리는 커서 뒤에 직접 값을 넣어보았다.
마찬가지로 아무 변화가 없었다.
음... 이상하네 라고 생각하며 여러 시도를 해보았다.
그러다가 정말 우연히 python -c를 사용하지 않고,nc 명령어만을 사용해 문제에 들어가보니 놀라운 변화가 있었다.
음... 몇시간이 소요되긴 했는데 내가 생각한게 맞았다!
다만, 조금 찝찝한 것은 왜 위에서 했던 방법대로 풀었을때는 제대로 flag가 나오지 않았는가이다.
이에 대한 이유로는 추후에 공부하며 추가 포스팅하도록 하겠다.
'CTF > Pwnable' 카테고리의 다른 글
[Whois 정보보안교육] assemlator 문제풀이 (0) | 2021.11.29 |
---|---|
[Whois 정보보안교육] passcode 문제풀이 (0) | 2021.11.29 |
[Whois 정보보안교육] assembly 문제풀이 (0) | 2021.11.29 |
[Whois 정보보안교육] system 문제풀이 (0) | 2021.11.22 |
[Whois 정보보안교육] Student ID 문제풀이 (0) | 2021.11.20 |