워게임 99

[CodeEngn] Basic RCE L08

주어진 프로그램의 OEP를 구하는 문제입니다. 먼저 exeinfope로 까보면 UPX로 패킹이 되어있는 상태입니다. 패킹이 되어있으면 원래 프로그램의 OEP와 달라집니다. 그러므로 프로그램을 직접 분석해서 원래 OEP를 알아내야 합니다. x32dbg로 동적분석해보겠습니다. 우선 실행해보면 다음과 같이 pushad에서 EP가 걸렸습니다. 이 다음부터는 여러게의 루프문이 나옵니다. 이런 코드가 많이 나오는 이유는 UPX에서 패킹했던 파일들을 언패킹해주는 작업을 한뒤 하나씩 불러와서 프로그램을 실행시켜야 하기 때문이다. 원래 OEP를 확인하려면 pushad 이후에 나오는 popad를 찾아야 합니다. 이것을 찾기 위해서 푸쉬된 스택의 주소를 하드웨어 중단점을 설정해줘야 합니다. 그러면 스택을 pop 할때, 원래..

워게임/CodeEngn 2022.05.19

[CodeEngn] Basic RCE L07

이번 문제는 조금 특이한 문제인것 같습니다. 일단 시리얼번호가 생성되는 과정에서 C드라이브의 이름이 쓰이는것같으므로 먼저, C 드라이브의 이름을 CodeEngn 으로 바꿔줬습니다. 우선 exeinfope를 통해서 까보면 별다른 패킹은 되어있지 않고, 어셈블리어로 직접 작성한 프로그램인것으로 파악됩니다. 우선 프로그램을 실행해보면 저번 문제와 비슷한 구조를 가지고 있습니다. 그리고 임의의 값을 넣어보면 다음과 같은 메세지가 출력되면서 프로그램이 종료되는것을 확인할수 있습니다. 이것들을 이용해서 분석을 해보도록 하겠습니다. 이번에도 저번 문제 처럼, 알고있는 문자열을 통해서 분석을 시작할곳을 찾아내야합니다. 문자열 검색을 해보면, 아까전에 뜬 실패메세지창에 뜬 문자열이 보입니다. 이 문자열이 위치한 함수를 ..

워게임/CodeEngn 2022.05.12

[CodeEngn] Basic RCE L06

문제 설명을 보면, 파일을 분석하기 전에 unpack을 해야할것으로 보입니다. 일단 exeinfope로 까보면 32비트 기반 실행파일이고, UPX로 packing 되어있다는것을 알수 있습니다. 그러므로 upx라는 패킹툴을 이용해서 unpacking을 진행해야 합니다. upx 언패킹은 툴을 이용해서 간단하게 할수 있습니다. 이제 다시 exeinfope를 통해서 까보면 이렇게 정상적으로 언패킹이 되어있는 모습을 확인할수 있습니다. 그리고 프로그램은 C++로 작성되었다는 것을 알수있습니다. 이제 IDA를 통해서 분석해보기 전에 프로그램을 실행시켜 보겠습니다. 프로그램을 실행시키면 다음과 같이 시리얼 번호를 입력할수있는 박스와 시리얼번호 체크를 시작하는 버튼이 있습니다. 여기에 임의의 값을 넣으면 다음과 같이 ..

워게임/CodeEngn 2022.05.12

[CodeEngn] Basic RCE L05

이번 문제는 다음과 같습니다. 먼저 exeinfope로 프로그램을 까보면 32비트 기반 실행파일에 패킹은 안되있고 델파이로 작성된 프로그램입니다. 먼저 프로그램을 실행해보면 다음과 같은 프로그램이 나옵니다. 텍스트박스가 2개있고 Register now ! 라는 버튼을 누르면 시리얼번호에 대한 검증을 거치는 구조로 파악됩니다. 이름은 별 상관없는 문제 같으므로 시리얼번호에대한 검증이 어떻게 이루어지는지 확인해보겠습니다. 우선 임의의 시리얼번호를 입력해보면 다음과 같은 메세지가 뜨는것을 확인할수 있습니다. 우선 IDA로 열어봐야합니다. 시리얼번호가 틀렸을때 나오는 Wrong Serial_try again! 이라는 문자열이 나오는데 그렇다는건 분기문에서 특정 조건에 부합하지 않으면 나오는 문자열이므로 이 문자..

워게임/CodeEngn 2022.05.08

[CodeEngn] Basic RCE L04

이번 문제도 저번 문제와 같이 특정 함수의 이름을 알아내야하는 문제입니다. 우선 exeinfope를 통해서 까보면 32비트 실행파일에 C++ 로 작성된 프로그램으로 보입니다. 우선 관련 함수를 찾아보면 다음과 같은 디버거 탐지 함수가 있는것이 확인됩니다. 그러므로 x32dbg를 통해서 관련 함수가 있는지 찾아보겠습니다. x32dbg 를 통해서 동적분석을 실행하다보면 프로그램이 시작될때 이 부분을 거칩니다. 간단하게 보면, IsDebuggerPresent라는 함수를 거친후 esp와 esi를 비교한후, 서로 같을 경우, "디버깅 당함"이라는 문자열이 출력되고, 아닐 경우 "정상"이란 문자열 출력됩니다. 공식문서에서 확인한 내용과 프로그램의 흐름을 분석해봤을때 IsDebuggerPresent 라는 함수가 디버..

워게임/CodeEngn 2022.05.04

[CodeEngn] Basic RCE L03

이번에 풀문제는 비주얼 베이직으로 작성된 프로그램으로 보입니다. 저는 비주얼 베이직을 잘 모르지만 일단 풀어보겠습니다. 우선 exeinfope로 까보면 다음과 같이 나옵니다. 32비트 기반 실행파일이고 비주얼베이직으로 작성되있습니다. 한번 IDA를 통해서 분석해보겠습니다. 우선 비주얼 베이직에서 쓰이는 스트링 비교함수는 뭐가 있는지 찾아보면 StrComp 함수 (microsoft.com) 다음과 같은 함수가 공식문서에 나와있습니다. 하지만 이 함수이름을 쓴다고해서 답이 풀리지 않습니다. 그러므로 프로그램을 분석해서 직접 유사한 함수를 찾아봐야합니다. IDA를 통해서 프로그램을 열어보겠습니다. 함수를 찾는것이 목표이기 때문에 Functions window 창을 확인해보면 함수가 쭉 나열되서 나옵니다. 아까..

워게임/CodeEngn 2022.05.04

[LOS] Level 10(skeleton)

이번 문제는 다음과 같습니다. 간단해 보이므로 즉석으로 공격 쿼리를 짜보자면 먼저 pw는 임의의 값을 넣은뒤 ' 를 붙이고 or id='admin'을 넣음으로써 id가 admin이 되도록 만들고 마지막으로 뒤에있는 조건문 그냥 주석처리를 해서 무시하는 방식으로 쿼리를 짤수 있습니다. pw=1234' or id='admin' --%20 이 쿼리를 통해서 공격하면 예상대로 문제가 풀립니다.

728x90