<보안 study> 54

[CodeGate2017] Goversing

코드게이트 2017 문제인 것 같다. Go 로 만든 elf 파일에서 플래그를 찾는 것이 목적. Go 에 대한 이해가 너무 필요했다. Go 는 스택 기반 호출을 하는 언어로 함수를 호출할 때, 레지스터나 push를 쓰지 않고 스택에 데이터를 삽입 후 원하는 인자들을 그 스택 그대로 가져와서 함수호출 후에 쓴다. 또한 리턴 값을 저장하는데에 rax를 쓰지도 않는다. 확실한건 x86_64 calling convention 과는 다르다는 것이다. 이러한 부분들 때문에 IDA가 있어도 일일히 어셈블리를 보는 수 밖에 없었다. (헥스레이가 깨짐) 우선 Go에서 함수가 어떻게 동작하는지를 조금 살펴보았다. 위 사진은 Go로 작성한 소스코드, 아래는 그 소스에 대한 어셈블리 코드이다. 1번과 2번으로 소스를 나눠서 볼..

<보안 study>/CTFs 2019.07.29

[Saudi and Oman CTF]Back to basics

초심으로 돌아가야하는 문제인데 못풀었다..;; curl 을 공부할 수 있는 좋은 기회가 되었다. http://35.197.254.240/backtobasics/ 문제에서는 굳이 브라우저로 열지않아도 된다고, 다른 방안이 있다고 한다. 다른 방안은 바로 curl (중간에 패킷 잡고 풀어도 상관없다.) 이다. 우선 url의 헤더를 보자. - i 옵션 : url의 헤더와 소스를 모두 보여준다.- I 옵션 : url의 헤더만 보여준다. HTTP 헤더에서 보기로는 HTTP 메서드 중에서 GET과 POST 모두를 허용한다고 한다.그러면 GET으로 전송해보자. -X 옵션 : HTTP 메소드를 변경시킬 수 있다. GET 은 일단 옳은 길이 아닌 듯. POST는 성공한 것 같다 ! flag= 이 보인다 ㅋㅋ 우선 저 h..

<보안 study>/CTFs 2019.02.14

[Saudi and Oman CTF]I love images

Write Up을 작성하기에 앞서 PNG 파일 구조에 관한 내용이 주가 될 것임을 말한다. PNG 형식의 로봇사진만 딸랑 한 개 있다.헥스뷰로 파일 구성을 보자. 우선 PNG 구조는 파일시그니처와 N개의 청크로 이루어져있다고 한다.청크의 구조는 이런 식이다.{ Length (4 byte), Chunk Type (4 byte), Chunk Data (length byte), CRC (4byte) }출처 : https://ryanking13.github.io/2018/03/24/png-structure.html 처음 4바이트 시그니처의 모습이다. 그리고 로봇사진의 파일구조 전체. 청크는 총 4개를 갖는다는 것을 알 수 있다. 이 중에서 PNG는 기본 IHDR , IDAT , IEND의 3개의 청크를 갖는데 ..

<보안 study>/CTFs 2019.02.14

[Evlz_ctf]find_me

단순한 crypto? reversing? 문제이다. 쉬어가는 타임 바이너리를 아예 실행하면 깨지게 만들었다. 직접 분석해보자. 마지막에 s2랑 어떠한 함수를 거쳐 나온 s1을 비교해서 맞으면 플래그인 것이고 아니면 말고.. s2를 살펴보자. 어떠한 문자열이 쭉 저장되어있다. s1 을 도출해주는 직전의 함수를 보자. 대강봐도 base 64 라는 느낌이 온다. 뭐 잘못짚은 셈 치고 디코딩 돌려보자. 음... web 공부하면서 봤었던 URL 인코딩이 되어있는 것 같기도..? 진짜 쭉 게싱 하면서 풀었었던 것 같다.. 쭉 가자.... 아마 두 번째 함수가 URL 인코딩이였을테니 첫 번째 함수만 보면 되겠다. ROT 몇 인지는 감이 잘 안오는데 rot 계열 인코딩 같다. 다 돌려보자. http://theblob...

<보안 study>/CTFs 2019.02.08

[Insomni'hack 2019]Beginner_Reverse

[TMI]대회 당일에 몸이 안좋아서 하루종일 누워있다가 겨우 한 문제 풀었다. A babyrust to become a hardcore reverser 문제 설명에 나와있듯 이 바이너리는 rust라는 생소한 언어로 되어있었다.덕분에 rust 공부도 쵸큼 된 것 같다. ㅋㅋ(몰라도 대충 로직 분석으로 풀 수 있었지만...) 우선 Shift + F12 로 힌트가 될만한 문자열이 있는지 탐색해보았는데 "Submit this and get you'r points!" 라는 뭔가 정답을 알 수 있을 것 같은 문자열이 보였다. 이 문자열은 beginer_reverse::main 함수에 담겨져있으며 이 함수를 call 하는 main 함수에는 별다른 점이 없기 때문에 이 함수가 핵심 함수임을 알 수 있었다. 문자열이 박..

<보안 study>/CTFs 2019.01.28

[CodeEngn]Advance - 06 [다시풀자]

리버싱 실력이 딸려서 올리디버거로 풀진 못했다.... 우선 바이너리는 처음에 UPX 패킹이 되어있던 상태였는데 위 사진은 UPX를 언패킹 한 상태의 모습이다.처음에는 일반적인 Windows 바이너리인줄 알았는데. . . . . . 올리디버거에 올려서 디버깅하는 도중에 IsDebuggerPresent 가 걸리면서 이 바이너리는 AutoIt로 코딩되어있다고알려준다. 우회하고 올리디버거로 분석할 수 도 있었지만 계속 분석해도 안나와서 AutoIt 디컴파일러를 구해서분석할 수 있었다. 보다시피 남은 군생활은 790일인 것으로 알 수 있다. 이것을 md5 암호화 시켜서 인증하면 된다. 나중에 올리디버거로 다시 풀어보는게 좋을 것 같다. 추가적으로 AutoIt(오토잇)에 대해 설명하자면 Windows GUI에 범용..

[CodeEngn]Advance - 05

비주얼 베이직으로 코딩된 바이너리이다.그래서 VB Decompiler를 이용하여 디컴파일 해보았으나 이렇다할 시리얼이나 함수 같은 것은찾지 못했다. 그래서 OllyDbg로 바로 올렸다. (구조체의 데이터 VB5!로 시작하는 시그니처가 보인다) 다른 비주얼 베이직 바이너리랑 똑같이 특정 구조체 하나를 인자로 하여 MSVBVM60.DLL 을 CALL한다.string을 서치해보았으나 성공했다는 문구나 시리얼을 찾을 수 없었다. 그래서 비교구문이 있겠거니하고 호출하는 함수목록을 찾아보다가 vbStrcmp 함수를 찾았고 브레이크를 걸었다. 보다시피 EAX는 텍스트박스에 입력한 input이고 이 값을 ECX의 "677345" 와 비교하여 성공인지 실패인지 분기한다. 따라서 시리얼은 677345 !!!

[CodeEngn]Advance - 02

C++ 로 코딩되어 있고 패킹은 되어있지 않다.IsDebuggerPresent 기법을 우회해야한다. (따로 우회과정사진 첨부는 없음) 바이너리를 실행하면 아무 것도 뜨지 않았다... 원래 이런 바이너리인줄 알았는데 풀고나서 보니 나만 오류가 있었던 것 같다. 이 부분에서 system32/kernelbase.dll 을 반복하면서 실행(?) 하는데 CMP 에서 비교하는 AX 값이 1171이 되어야 진짜 본 문제로 넘어간다.여기서 kernelbase.dll 이랑 kernel32.dll 에 대한 오류인지 모르겠으나 원래 문제에서 의도한 오류는 아닌 듯하다. 아무튼 JNZ를 JZ로 패치하면 본 문제로 잘 넘어간다. ㅇ _ ㅇ 문제에서는 패스워드를 입력하라고 했다. 여러 번 실행하다가 바이너리가 EDX 이후 종료되..

[CodeEngn]Advance - 01

Reversing Advance 01 번 문제이다. 프로그램의 실행하는 동안의 시간을 구하는 문제이다. 프로그램은 위와 같은 팝업창을 띄우고 몇 초 뒤에 알아서 종료된다... 디버깅 전에 PEiD로 프로그램 정보를 확인해보니 UPX로 패킹이 되어있다.UPX 언패킹 툴로 언패킹 해주자 :) 올리 디버거에 올려서 디버깅 하는 과정에서 자꾸 밑과 같은 오류 창이 뜨면서 종료가 된다. 진행 시키면서 확인해보니 IsDebuggerPresent로 안티디버깅이 되어있다. ※우회법 중 하나는 TEST EAX, EAX 를 CMP 구문으로 바꿔주는 것이다. 아무튼 코드 패치를 해주고 다시 저장해주자. ※ 코드 패치를 해준 다음 저장하는 방법은 오른쪽마우스 클릭 -> Copy to executable -> Selection..

반응형