전체 글 172

[LOB_5]orc

orc // cantata 소스파일을 확인해 어떻게 구성되어있는지 확인해준다.여기서 프로세스안 스택에서 젤 주소가 높은위치에 환경변수들이 있는데 거기를 가리키는게 environ (환경변수에 대한 포인터) egghunter 로 인해 NULL 값이 나올 때 까지 환경변수에 0을 덮어 씌우니 환경변수는 쓸수없다.여기까진 전문제와 동일하다.이 문제에서는 추가로 //buffer hunter 가 있다.그리고 2번째 인자값의 48번째에는 \xbf 가 나와야 프로그램이 종류가 안됨. 가용한 부분 esp-=44를 해주었다. i는 우리가 사용할 버퍼가 아니니 40을 기억.| 여기 | ret | sfp | buffer |환경변수를 이용하지 않으니 ret에 쉘코드를 가리키는 주소를 넣어준다. 근데 버퍼도 막혀있으니 빨간 부분..

System/LOB 2019.07.25

[LOB_4]goblin

goblin // hackers proof 소스파일을 확인해 어떻게 구성되어있는지 확인해보았다.여기서 프로세스안 스택에서 젤 주소가 높은위치에 환경변수들이 있는데 거기를 가리키는게 environ (환경변수에 대한 포인터) egghunter 로 인해 NULL 값이 나올 때 까지 환경변수에 0을 덮어 씌우니 환경변수는 쓸수없다.그리고 2번째 인자값의 48번째에는 \xbf 가 나와야 프로그램이 종류가 안됨.가용한 부분 esp-=44를 해주었다. i는 우리가 사용할 버퍼가 아니니 40을 기억.환경변수를 이용하지 않으니 ret에 쉘코드를 가리키는 주소를 넣어준다.그럴러면 확인을 해야 하므로 코어덤프를 해줘야한다. tmp 디텍토리에 사본을 생성!./orc `python -c 'print "\x90"*15+"\x31..

System/LOB 2019.07.25

[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