CodeEngn Advance RCE의 05번 문제입니다. Serial을 구하는 문제입니다. 프로그램을 실행시키고 아무 값이나 친 뒤 오케이를 누르면 이런 화면이 나타납니다. Visual Basic으로 만들어진 프로그램이네요. 올리디버거로 직접 분석하겠습니다. Visual Basic에서 문자열을 비교해주는 함수인 vbaStrCmp를 찾았습니다. 이곳에 BP를 걸고 실행시켜보겠습니다. EAX에 있는 제가 입력한 값 1234와 ECX에 있는 값인 677345를 비교하고 있습니다. 677345를 프로그램에 인증해보겠습니다. 정답이네요. 코드엔진 사이트에도 인증해보겠습니다. ~
CodeEngn Advance RCE의 04번 문제입니다. 3번 문제와 똑같이 Name이 CodeEngn 일 때의 Serial을 구하라고 하네요. 프로그램을 실행시켜서 시리얼 칸에 아무 값이나 넣어보았더니 실패 문자열이 출력됩니다. 올리디버거로 열어서 분석하겠습니다. 올리디버거 내에서 문자열과 함수 목록이 제대로 보이지 않는 것을 보니 패킹이 되어있는 것으로 보입니다. 한 줄씩 실행시키다 보니 401006이 OEP라는것을 알 수 있었습니다. OEP를 제대로 맞춰주고 덤프를 해주었습니다. strcmp 함수를 이용해서 사용자가 입력한 시리얼값과 어떤 ㅁ값을 비교하고 있습니다. 저 값을 프로그램에 인증해보면.. 정답입니다! 코드엔진 사이트에도 인증해보면.. !!
CodeEngn Advance RCE의 03번 문제입니다. Name이 CodeEngn 일 때의 Serial을 구하라고 하네요. 시리얼 칸에 아무 문자열이나 넣어보니 역시 실패 문자열이 출력됩니다. 올리디버거로 열어서 분석해보겠습니다. 성공 문자열로 보이는 곳으로 가보겠습니다. SEH (Structured Exception Handling)란 Windows OS에서 제공하는 예외처리 방식입니다. 언어 중립적이어서 범용적인 사용이 가능하며, 0으로 나누기나 유효하지 않은 메모리 주소 접근 같은 하드웨어 예외를 알아서 감지하고 처리하도록 도와줍니다. SEH가 있는 것으로 봐서 어떤 예외가 발생하면 이곳으로 분기해서 성공 문자열을 출력해주는 것으로 보이네요. 그럼 이제 실패 문자열이 출력되는 곳으로 가보겠습니다..
CodeEngn Advance RCE의 02번 문제입니다. 정답을 구하라고 하네요. 프로그램을 실행시켜보면 패스워드를 입력받습니다. 올리디버거로 열어서 분석해보겠습니다. "Enter Password: "를 출력하고 004012D2에서 문자열을 입력받고 있습니다. 계속 밑으로 내려가 보겠습니다. 루틴 하나를 지나고 004013C5에서 EDX를 호출하여 프로그램을 종료시킵니다. F7키를 이용하여 EDX 안으로 들어가 보겠습니다. ECX와 특정 값들을 비교하고 ZF가 0이라면(ECX와 비교하는 값이 다르다면), 0012F88A로 점프하고 있습니다. 0012F88A로 점프하고 한 줄씩 실행시키다 보면 ECX를 호출해서 프로그램을 종료시켜버립니다. 그렇다면 위에서 ECX와 비교하는 값들을 문자로 변환시키고 패스워..
이번에 프로젝트 하면서 알게된 내용을 정리해봅니다! 연결 리스트(Linked List)란? 연결 리스트(Linked List)란, 자료구조의 일종으로 말 그대로 어떤 데이터를 저장할 때 그다음 순서의 자료가 있는 위치를 데이터에 포함하는 방식으로 자료를 저장합니다. 배열이 자료에 순번을 메겨 맞춘다면, 연결 리스트는 자료의 순서에 맞춰 연결합니다. 그렇기 때문에 배열과는 달리 새로운 자료, 노드를 뒤에 연결하거나 중간에 끼워 넣는 것이 쉽습니다. 그러나 배열에는 자료마다 고유의 번호가 있어서 사용자가 원하는 특정한 자료를 불러내기가 편한 반면에 연결 리스트는 자료마다 고유의 번호가 없어서 특정한 자료, 노드를 불러내기가 어렵다는 점이 있습니다. 단순 연결 리스트는 다음 노드에 대한 참조만을 가진 가장 단..
CodeEngn Advance RCE의 01번 문제입니다. 프로그램이 몇 밀리세컨드 후에 종료되는지를 묻고 있습니다. 문제 파일을 실행시켜보니 이런 화면이 나타납니다. PEID로 보겠습니다. UPX로 패킹 되어있네요. 언패킹 한 후 올리디버거로 열어서 분석하겠습니다. 모든 timeGetTime 함수에 BP를 걸었습니다. 윈도우가 시작되고 난 뒤 지난 시간을 DWORD형 데이터로 얻는 timeGetTime 함수는 윈도우가 시작되고 난 뒤의 시간을 리턴합니다. 리턴값은 보통 EAX에 저장됩니다. EAX와 비교하는 부분을 찾아야겠네요. EAX와 비교하는 구문을 찾았습니다. DWORD PTR DS : [EBX+0x4]에 있는 값인 337B와 EAX를 비교해서 같으면 프로그램이 종료됩니다. 337B를 10진수로 ..
Hackerschool FTZ의 Level 10 풀이입니다. 도청하려면 key_t의 값을 활용해서 코딩을 해야 될 것 같습니다. 공유 메모리를 참조하려면 shmget 함수를 이용하면 됩니다. shmget 함수로 해당 공유 메모리에 요정을 한 후, shmat 함수를 이용해서 해당 메모리를 사용할 수 있게 만들어줍니다. get으로 7530 key를 가진 1024 크기로 IPC를 생성하고, 생성한 곳에서 가져와서 읽는 코드입니다. 위 코드를 컴파일 후 실행시켜보면.. Key : what!@#$?
Hackerschool FTZ의 Level 9 풀이입니다. 문제에 접속해서 힌트를 확인해보면 위와 같이 출력됩니다. 위 코드를 보면, 입력은 buf에 받고 있는데 buf2가 go와 같게 만들라고 하고 있습니다. fgets는 경계선 검사를 하지 않는 함수이니 아마 이 함수에 정답이 있을 겁니다. 일단 hint에 있는 c 코드를 복사하고 똑같은 파일을 만든 뒤 컴파일 후 gdb로 디버깅했습니다. 0x8048320에 fgets로 입력받는데 strcmp로 비교하는 부분은 0x8048330입니다. 0x8048330 - 0x8048320 = 16 fgets 함수는 경계선 검사를 안 하므로 16글자가 넘어가면 bof2의 영역으로 갈수있습니다. bof 파일 실행 후 gggggggggggggggggo를 입력하면, lev..
Hackerschool FTZ의 Level 7 풀이입니다. 접속해서 힌트를 확인해보면 위와 같은 문장이 나타납니다. bin 디렉토리에 들어가서 level7을 실행시켜보면 패스워드를 입력받는데, 아무것이나 쳐보니 wrong.txt를 찾을 수 없다고 합니다. 원래 wrong.txt 파일이 있었는데 없어졌다고 합니다. 올바르지 않은 패스워드 입니다. 패스워드는 가까운곳에... --_--_- --____- ---_-__ --__-_- 원래 level7을 실행시킨 뒤 올바르지 않은 패스워드를 입력하면 위와 같은 문자열이 출력됩니다. '--_--_- --____- ---_-__ --__-_-'는 딱 봐도 2진수네요. 위 문자열을 2진수 -> 10진수 -> 아스키코드로 변환해주면 'mate'가 됩니다. 패스워드로 m..
Hackerschool FTZ의 Level 5 풀이입니다. hint 파일에서 /usr/bin/level5 라는 프로그램이 level5.tmp 라는 임시파일을 생성한다고 합니다. /usr/bin/level5를 실행한 뒤 /tmp를 보았더니 아무것도 없습니다. 아무래도 파일이 계속 지워지고 있는 것 같습니다. 그래서 level5 계정으로 똑같은 이름의 파일을 만들었습니다. 내용은 아무거나 끄적였습니다. 그리고 /usr/bin/level5를 실행시켜보니 내용이 바뀐 것을 확인할 수 있었습니다. Key : what the hell
Hackerschool FTZ의 Level 4 풀이입니다. 누군가가 백도어를 심어놓았다네요. 그래서 저 경로로 들어가서 확인해보니 backdoor 파일이 매우 수상합니다. 그래서 확인해보니.. 위와 같은 코드가 나옵니다. 일단 server의 파일을 조작해주기 위해서 /home/level4/tmp 경로에 들어가겠습니다. 들어와서 backdoor란 이름의 백도어 파일을 작성해주었습니다. gcc -o backdoor backdoor.c 명령어로 컴파일을 했습니다. ls 명령어로 확인해보니 backdoor 파일이 정상적으로 컴파일이 되어 생성되었습니다. 이제 finger @localhost 명령어로 localhost의 정보를 확인해보면.. Key : what is your name?
Hackerschool FTZ의 Level 3 풀이입니다. 힌트에서 "동시에 여러 명령어를 사용하려면?"이라고 물어보네요. &, ;를 쓰면 되는 것으로 알고 있습니다. ;를 사용해보겠습니다. 쉘 실행 문자열만 출력될 뿐, level4의 권한을 얻지는 못합니다. 다른 힌트인 "문자열 형태로 명령어를 전달하려면?"을 만족시키기 위해서 "를 앞뒤로 붙여주었더니 에러가 나면서 권한을 얻었습니다! my-pass를 입력해주면.. Key : suck my brain
- Total
- Today
- Yesterday
- C#
- CodeEngn
- Basic RCE
- Level 05
- pwnable
- 유니티
- Write-up
- Level 04
- reversing.kr
- 안드로이드
- ftz
- unity2d
- c++
- 멘토링
- Unity
- Level 02
- wargame
- Reversing
- Advance RCE
- 풀이
- xcz.kr
- Level 06
- HackingCamp
- Level 03
- Android
- Level 01
- 안드로이드 멘토링
- hackerschool
- Programming
- 17th HackingCamp CTF
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |