전체 글 180

[LOB_3]cobolt

cobolt // hacking exposed 먼저 소스파일을 확인해 어떻게 구성되어있는지 확인해준다.우선 gets함수가 보인다. 알아보니 gets함수는 버퍼크기 상관하지 않고 입력을 받는다 그럼 이 취약점을 이용해 문제를 해결해야한다.그리고 전 문제와 차이점은 main은 인자를 받지않고 gets에도 인자를 받지 않는다는 점이다. 더미값이 없이 buffer의 크기는 16바이트 이다. buffer, sfp 위 ret의 위치를 파악할수있다. 버퍼오버플로우의 여러가지 방식중 환경변수를 이용하는 방법을 선택 “HA”라는 환경변수를 이용할것이기에 환경변수를 가져오는 getenv 함수를 이용해 “crush.c”파일을 생성하고 컴파일 해준다. export 를 이용하여 환경변수 생성해준다. 메모리주소를 예측을 한다고 ..

System/LOB 2019.07.25

[LOB_2]gremlin

gremlin // hello bof world 소스파일을 확인해 어떻게 구성되어있는지 확인해준다. 힌트가 되는 문자 자료형 배열 buffer 의 크기가 16인 것을 확인해 볼수 있다. 다음으로 gdb를 이용하여 어셈블리 코드와 메모리에 적재될 logical address를 살펴본다. 저는 인텔 문법이 편하므로 인텔 문법으로 보기위해 gdb 에서 set disassembly-flavor intel 명령어를 이용해 intel 문법으로 본다. (이젠 외워야지) 여기서 확인해 보아야할 곳은 스택에 esp 레지스터가 가리키는 곳을 확인해 준다. 변수의 크기를 할당해주기 위해 sub op 코드를 이용하여 esp -= 16을 해준 것을 확인해 볼수 있다. 그리고 아까 c 소스파일에서 조건문이 있었는데 어셈블리 코드..

System/LOB 2019.07.25

[LOB_1]gate

gate // gate 우선 어떤 파일이 있나 확인을 해준다. 컴파일된 gremlin, 그리고 gremlin.c 소스파일이 있다. 소스파일을 확인해 어떻게 구성되어있는지 확인해준다. 힌트가 되는 문자 자료형 배열 buffer 의 크기가 256인 것을 확인해 볼수 있다. 다음으로 gdb를 이용하여 어셈블리 코드와 메모리에 적재될 logical address를 살펴본다. 저는 인텔 문법이 편하므로 인텔 문법으로 보기위해 gdb 에서 set disassembly-flavor intel 명령어를 이용해 intel 문법으로 본다. 여기서 확인해 보아야할 곳은 스택에 esp 레지스터가 가리키는 곳을 확인해 준다. 변수의 크기를 할당해주기 위해 sub op 코드를 이용하여 esp -= 256을 해준 것을 확인해 볼수..

System/LOB 2019.07.25

[Reversing.kr]Easy_KeygenMe

두근두근 두번째 Easy문제는 KeygenMe이다. 실행해보니 Input Name 과 Input Serial 을 입력하라고 나온다. 그럼 뭔지 모르니 디버깅시작! 쭉쭉 디버깅을 하다보니 여기서 실행이 되서 여기가 Main이 되는 함수라는 것을 추측하였다. 분석하다고 궁금한 어셈블리 명령어가 보였는데 ※STOS : EDI가 가리키는 값에 EAX를 쓴다 보통은 스택영역(EDI가리키는 주소)을 0으로 초기화 할때 이렇게 쓴다고 한다 요런느낌 char a[256]={0}; (REP (Repeat String) : ECX 레지스터를 카운터로 사용해서 문자열 관련 명령을 ECX>0인 동안 반복한다, 한번 진행될 때마다 ECX 레지스터값이 -1 된다.) ※TEXT명령어는 왜 쓸까? test가 영향을 미치는 플래그는 ..

[Reversing.kr]Position (미완성)

ReadMe를 열어보니 다음과 같았다. 음 76876-77776 일때 이름을 찾아라! 그리고 답은 여러개 라고 한다. 프로그램 시작해본 결과 무작위로 넣을수 있지만 디버깅 해보기로 하였다. 무한 삽질 끝에 드디어 단서 하나 찾은것같다. F7로 들어가 보도록 하였다. 쭉쭉 들어가 보니 이전 보다 확실히 깔끔하게 보이는 어셈명령이다. 구조를 보아하니 MAIN함수인것 같다. 여기서 또 한번 콜을 지나면 문제가 열리기에 더 들어가 보았다. 여기까지 뜬다 아직 완벽하게 Position이 켜지기 전이다. 너무 삽질하는건가 싶어서 String으로 알아보고 싶었다. 모든 부분을 보면서 Wrong이 있나없나 봤지만 ...Fail...ㅠㅠ 이부분이 의심이 된다. ※PeekMessage()함수는 GetMessage()와 다..

[Reversing.kr]Easy_CrackMe

파일을 실행시켜보았다. Hum.. 올바른 값을 넣으면 성공하는 프로그램인것같다. 동적분석을 위해 디버깅 시작! 스트링을 조사 해보니 성공과 실패가 나뉜다. 일단 먼저 입력을 받으니 입력을 받고 검증하는 부분이 있을 것이다. 디버깅을 통해 파악해 보자. 요부분이 이제 입력, 비교검증 함수 시작 부분이다.브레이크 포인트를 걸어주고 입력을 받고 확인해보자. 이렇게 입력해주고 살펴보자 첫번째로 값비교를 하는데 내가 입력한값 2와 ASCII값 61('a')과 비교해 틀리면 바로 "Incorrect Password!" 다시 "1a3456"으로 입력! 두번째 관문이다. 5y를 push하여 비교한다. 여기서 확인해 볼 수 있었다. 틀리면 틀리면 바로 "Incorrect Password!"로 넘어가는 루틴. 그렇다면 지..

[Reversing.kr]Easy_UnpackMe

먼저 ReadMe를 읽어 보았다. 파일을 실행하면 이런식으로 아무화면이 뜨지않는다. ReadMe에서 보시다 시피 OEP를 조사하던 와중 이 문제에서 필요한 지식을 검색해보았다. EP(Entry Point) 실행파일의 코드 시작점 프로그램이 실행될 때 CPU에 가장 먼저 실행되는 코드 시작 위치 헤더를 가리킴 OEP(Original Entry Point) 패킹된 파일의 실제 프로그램 시작 부분 JMP 패킹(Packing) 실행 파일을 암호화하거나, 압축하여 소스코드를 볼수 없도록 하는 것 분석하기에 어려움이 존재함(언패킹이 필요하기 때문에) 정적분석을 위해 이뮤니티디버거를 사용해주었다. 응 파일을 켰는데 오류가 난다. (아마 패킹이 되어서 제대로 안되나 보다) 걱정을 한움큼 가지고 무시한후 분석을 하였다...

Question 2

두번째 문제 입니다! 2. What operating system was used on the computer? 번역하면 : 2. 컴퓨터에서 사용 된 운영 체제는 무엇입니까? FTK Imager 툴을 이용해 바로 끝..? 이렇게 쉬울리가 없지 더 정확하게 분석해보자. https://jihwan4862.tistory.com/95 https://m.blog.naver.com/bitnang/70180095500 위 글을 참고해서 레지스트리 분석은 왜 하는지, 하이브 파일은 무엇인지, 기본 시스템 정보는 어디에서 확인하는지 공부할수 있다. 우리가 봐야할것은 기본 시스템 정보 확인이다. 레지스트리 구성 하이브 파일 중 Boot(BCD00000000),HARDWARE를 제외한 파일들은 C:\Windows\Syste..

Forensic/CFReDS 2019.07.21

Question 1

문제는 다음과 같다. 1. What is the image hash? Does the acquisition and verification hash match? 해석해 보자면 1. 이미지 해시가 무엇입니까? 획득 및 검증 해시가 일치합니까? 시작부터 만만치 않다.. 디지털포렌식을 전혀 직접 해본적이 없어서 툴 설치부터 난관이였다. 먼저 ftk imager 를 공식 홈페이지에서 최신버전을 겨우겨우 받아 설치를 완료! ftk imager의 사용법을 익혔다. 출처 : https://k-dfc.tistory.com/34 처음에 다운받았을때 이미지가 2개 , 문제 총 3개의 파일이 있었다. 딱 보아하니 이미지 파일이라고 했는데 e01, e02로 나뉘어진것을 보니 용량이 커서 분할되어진듯..? ftk imager 툴..

Forensic/CFReDS 2019.07.21

[해커스쿨]trainer10

이번 시간에는 Local 해킹시 핵심이 되는 SetUID에 대하여 알아본다. Local 해킹? 해킹에는 두가지가 있다. 하나는 Remote 해킹, 이것은 자신이 해킹하고자 하는 서버에 아이디를 가지고 있지 않을 때, 아이디를 얻고자 시도하는 것을 말한다. 다른 하나가 Local해킹, 이것은 해킹하고자 하는 서버에 일반 계정을 가지고 있을 때, 관리자 권한(root)를 얻고자 시도하는 것을 말한다. Remote 해킹 방법엔 여러가지 있는데 무작위로 아이디와 비밀번호를 입력하여 접속하는 방법에서 부터, 데몬의 취약점을 공략하여 접속하는 방법. 심지어 게시판이나 방명록을 이용하여 접속하는 방법까지. 방법은 수십가지가 넘는다고 한다. 하지만 우리에게 정작 중요한건, Remote 해킹이 아닌 Local 해킹이라고..

System/FTZ 2019.07.20