일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Whois #정보보안교육 #Ajou
- Allocation Starategy
- webhacking
- AjouUniv #Whois #정보보안교육 #Pwnable
- ftz
- Whois #정보보안교육 #AjouUniv #Pwnable
- 사이버보안학과
- N0NamedWargame #AjouUniv #mandu-mandu #forensics
- N0NamedWargame #mandu-mandu #forensics #left_side_B
- systemhacking
- 코딩도장
- HackCTF
- python
- N0NamedWargame #mandu-mandu #forensics #길에서주어온만두
- 스케줄링
- SuNiNaTaS #mandu-mandu #AjouUniv #forensics
- 아주대학교
- Memory Virtualization
- 운영체제
- Dreamhack
- Whois #AjouUniv #정보보안교육 #Pwnable
- hackerschool
- AjouUniv #Whois #정보보안교육
- Variable Partition
- Whois #정보보안교육 #webhacking.kr
- AjouUniv #SuniNatas #Web
- 아주대학교 #Whois #정보보안교육 #4주차
- Pwnable
- N0Named
- AjouUniv #Whois #Reversing
- Today
- Total
chipkkang9's story
[Whois 정보보안교육] Student ID 문제풀이 본문
준비물
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
문제소개
개념 간단정리
지금부터 풀 문제들은 정보보안교육 - 시스템해킹 1주차 문제들이다.
시스템해킹은 다른말로 Pwnable(포너블)이라고 하는데,
Pwn(own) + able 의 합성어로, 권한을 지배 혹은 탈취하다라는 의미를 가진다.
시스템 해킹의 최종 목적은 시스템 장악이 가능한 취약점(vulnerability)을
바이너리(프로그램)을 여러 보호 기법을 우회해 공격(exploit)하는 것이다.
첫 번째 주차에 배웠던 내용은 BOF(Buffer OverFlow)이다.
내가 이해한 BOF 기법은 '메모리 상자 덮어쓰기'로 표현하고 싶다.
C언어의 scanf, gets 함수는 BOF의 취약점을 가지고 있는데,
입력받고 싶은 메모리보다 넘치는 입력값을 받으면,
저장하고 싶은 메모리 상자가 넘쳐서 원하는 상자(스택) 이후의 상자에까지 영향을 준다.
만약 뒤에 있는 상자에 특정 값이 저장되어있었다면,
특정 값을 덮어씌우게 되어버리는 치명적인 오류가 있다는 것이다.
이를 알아두고 문제들을 하나씩 풀어보겠다.
문제 풀이
첫 번째 문제는 Student ID라는 문제이다.
우선, ip주소로 문제에 접근해보면 아래 그림과 같이 출력된다.
어떤 구조로 파일이 구성되어있는지를 파악해야 할 것 같아,
IDA Pro x64 프로그램을 이용하여 student 파일을 열어보았다.
천천히 해석해보도록 하자.
문자형 변수 v4, unsigned 정수형 변수 v5가 선언되어 있고,
두 변수 사이의 주소 간격은 0 ~ 1C 즉, 총 28(16+12)칸이다.
즉, 28개의 문자들은 v4 메모리 상자에 담기고
만약, 그보다 더 입력된다면 v4 상자가 넘쳐서 v5 상자에 흘러들어가게 된다는 뜻이다.
우리가 만들고 싶은 그림은 v5에 1234567890만큼의 수가 흘러들어가
if 문이 만족되는 것이다.
우선, python -c ~~ | (port) 의 함수를 이용해 v4가 "A"로 덮힌 후,
v5에 "A"가 하나 더 입력되면 어떤 결과가 반환되는지 알아보자.
v5에는 "A"를 입력해주었을 터인데, 65가 출력되었다.
음, 딱 봐도 아스키코드로 바꿔준 결과같다.
그럼 우리가 만약 1234567890을 그대로 넘겨준다면,
그를 아스키코드로 변환하여 읽어줄 것이다.
어떤 값이 아스키코드로 변환되어 1234567890을 만드려면 어떻게 해야할까를 고민해보자.
1. 아스키코드 표에서 1234567890을 찾아서 넣는다.
- 이는 바로 기각. 이유는 아스키코드는 1234567890을 나타내는 값이 존재하지 않는다.
2. 1234567890을 HEX로 변환하여 넣어준다.
- 이 방법이 좋을 듯 싶었다.
1234567890은 HEX로, 0x499602D2이다.
프로그램에서는 문자열을 쓰는 방식을 '리틀엔디안' 방식을 채택하고 있으니
이를 꼭 지켜서 입력해주자. (리틀엔디안에 대한 레퍼런스는 아래 달아놓겠다.)
뭔가 IDA를 써서 쉽게 푼 기분인데 어쨌든 풀렸다!
내가 이 문제를 푸는 데 시간이 굉장히 많이 걸렸는데,
블로그에 정리하고 나니 조금 민망한 느낌이다... ㅎ
reference
https://jhnyang.tistory.com/226
[endian 2탄]리틀엔디안 vs 빅엔디안, 각 엔디안방식의 장단점, NBO(network byte order), CPU별 엔디안 차이
안녕하세요! 드디어 오랜만에 찾아온 엔디안 방식 2탄입니다. 저번시간에는 엔디안의 개념적인 부분을 다뤘었는데요. - 바이트 오더 vs 비트 오더 - 빅 엔디안 방식 vs 작은 엔디안 방식 요렇게 살
jhnyang.tistory.com
'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 정보보안교육] Magic Spell 문제풀이 (0) | 2021.11.20 |