본문 바로가기

4-9. 2020-2 심화 스터디/네트워크 포렌식 또는 해킹사고 분석

[2020.11.14] Basic RCE 03 풀이

다양한 툴에 대한  활용도를 높이고자 이번 주차에는 Basic RCE 03 문제를 풀이하였다. 

문제에 있는 파일을 다운받는다.

프로그램을 실행해보려 하였으나 일반적인 실행 뿐 아니라 올리디버거를 이용한 실행도 되지 않았다.

 


[참고] 비주얼 베이직은 윈도우 프로그램 개발에 쓰임 즉, 윈도우 운영체제에서 동작하는 프로그램을 만드는 것임.

대표적인 예: MS office,한글 등등 

+이러한 프로그램을 만들기위해 비주얼 베이직은 "윈도우 폼(form)"이라는 개발환경에서GUI를 만듦

* GUI란?

- 그래픽 사용자 인터페이스라 말하며 사용자에게 텍스트 뿐만 아니라 그래픽 이미지로도 정보를 보여주거나 입력 받기 위한 방법으로, 프로그램 실행시 보이는 화면

비주얼 베이직은 .net(닷넷)언어 중 하나인데, 닷넷 언어란 우리가 흔히 알고 있는 visual studio 안에 있는 언어들이다. 인터넷을 연결하고자 개발한 통합환경이라 생각하면 된다. Visual basic 은 그 중 하나이고 Visual basic은 "독립적인" 언어이다. C#,C++,java 가 아니라 "Basic언어"라는 것이 따로 존재한다


01그러면, 이러한 비쥬얼 베이직 언어중에 스트링 비교함수를 찾으면 된다. 그건 바로 StrComp( 문자열1, 문자열2, [비교 방법] )이것이다.

 그럼 못해도 StrComp나 그 일부가 들어있는 열을 찾는 다면 힌트가 될 수 있을 거라고 생각해볼 수 있다.

정답을 찾게 되었다

02

다른 풀이법도 존재한다.

이것은 2번처럼 뭔가 잘못된 것이 아니라, 말그대로 MSVBVM50.DLL이 컴터에 설치가 안되어있어서 뜨는것이다.

대부분 환경에서 저러한 문구가 뜨는듯 하다.

https://support.microsoft.com/ko-kr/help/180071/file-msvbvm50-exe-installs-visual-basic-5-0-run-time-files

그러니 여기서 다운받아 설치해주면 된다

그담에 그 파일을 실행시키면​

확인을 누르면

이곳에 아무 문자열이나 넣으면 에러창이 나온다.

올리 디버거로 열어보면 아래와 같은 화면이 나온다.

함수를 모두 보기 위해 실행에서 오른쪽 버튼을 눌러 Search for>All intermodular calls 해주면 프로그램에서 사용하고 있는 함수들을 보여준다.

여러 함수 중 vbaStrCmp같은 함수를 더블클릭하여 주변으로 이동한다.

아래는 위 내용을 해석한 것이다.

PUSH DWORD PTR SS :[EBP - 58]

=>EBP0x58에 있는 double word를 읽고 push

=> EBP -58이라는 주소에서 4바이트 크기의 메모리 내용 이라는 뜻

참고) dword ptr 은 해당 주소에서 double word(32비트(4byte)) 를 읽겠다는 뜻

PUSH 03.00301DDC    UNICODE "2G83G35Hs2"

=>  스택에 2G83G35Hs2를 쌓는다

=> 2G83G35Hs2을  Push

참고) push는 operand값을 스택에 저장해주는 명령어  ex.PUSH [operand]

CALL <JMP.&MSVBVM50.vbaStrCmp>

=> PUSH한 두개를 문자열 비교

=> msvbvm50.dll에 속한 vbaStrCmp 함수를 call

​1. 내가 입력한 값 push

2. 패스워드 값 push

3. 함수를 통해 두개를 비교 동일하면 성공 틀리면 실패 표시

 

004028BA : 자신이 입력한 코드(A)를 스택에 push하고

004028BD : 패스워드(2G83G35Hs2)를 스택에 push한다음

004028C2 : A와 2G83G35Hs2를 비교한다음 같으면 성공표시, 틀리면 실패표시가 뜨도록 값을 리턴한다.

따라서 2G83G35Hs2을 입력해주면 문제가 해결된다.