chipkkang9's story

[Whois 정보보안교육] Student ID 문제풀이 본문

CTF/Pwnable

[Whois 정보보안교육] Student ID 문제풀이

chipkkang 2021. 11. 20. 05:11

준비물


IDA Pro 7.0, Linux 작업환경(본인은 kali linux를 사용함)

https://hex-rays.com/ida-pro/

 

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

 

문제소개


 

[DoPwn] Student ID

 

 

개념 간단정리


지금부터 풀 문제들은 정보보안교육 - 시스템해킹 1주차 문제들이다.

 

시스템해킹은 다른말로 Pwnable(포너블)이라고 하는데,

Pwn(own) + able 의 합성어로, 권한을 지배 혹은 탈취하다라는 의미를 가진다.

 

시스템 해킹의 최종 목적은 시스템 장악이 가능한 취약점(vulnerability)

바이너리(프로그램)을 여러 보호 기법을 우회해 공격(exploit)하는 것이다.

 

첫 번째 주차에 배웠던 내용은 BOF(Buffer OverFlow)이다.

내가 이해한 BOF 기법은 '메모리 상자 덮어쓰기'로 표현하고 싶다.

 

C언어의 scanf, gets 함수는 BOF의 취약점을 가지고 있는데,

입력받고 싶은 메모리보다 넘치는 입력값을 받으면,

저장하고 싶은 메모리 상자가 넘쳐서 원하는 상자(스택) 이후의 상자에까지 영향을 준다.

 

만약 뒤에 있는 상자에 특정 값이 저장되어있었다면,

특정 값을 덮어씌우게 되어버리는 치명적인 오류가 있다는 것이다.

 

 

이를 알아두고 문제들을 하나씩 풀어보겠다.

 

 

문제 풀이


첫 번째 문제는 Student ID라는 문제이다.

우선, ip주소로 문제에 접근해보면 아래 그림과 같이 출력된다.

 

nc를 통해 ip주소에 접근한 결과

 

어떤 구조로 파일이 구성되어있는지를 파악해야 할 것 같아,

IDA Pro x64 프로그램을 이용하여 student 파일을 열어보았다.

 

student 파일을 IDA를 이용해 열어본 그림

 

천천히 해석해보도록 하자.

문자형 변수 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이다.

프로그램에서는 문자열을 쓰는 방식을 '리틀엔디안' 방식을 채택하고 있으니

이를 꼭 지켜서 입력해주자. (리틀엔디안에 대한 레퍼런스는 아래 달아놓겠다.)

 

문제가 해결되어 flag를 얻은 화면

 

뭔가 IDA를 써서 쉽게 푼 기분인데 어쨌든 풀렸다!

내가 이 문제를 푸는 데 시간이 굉장히 많이 걸렸는데,

블로그에 정리하고 나니 조금 민망한 느낌이다... ㅎ

 

 

reference


https://jhnyang.tistory.com/226

 

[endian 2탄]리틀엔디안 vs 빅엔디안, 각 엔디안방식의 장단점, NBO(network byte order), CPU별 엔디안 차이

안녕하세요! 드디어 오랜만에 찾아온 엔디안 방식 2탄입니다. 저번시간에는 엔디안의 개념적인 부분을 다뤘었는데요. - 바이트 오더 vs 비트 오더 - 빅 엔디안 방식 vs 작은 엔디안 방식 요렇게 살

jhnyang.tistory.com

 

Comments