CodeEngn Advance RCE의 02번 문제입니다. 정답을 구하라고 하네요. 프로그램을 실행시켜보면 패스워드를 입력받습니다. 올리디버거로 열어서 분석해보겠습니다. "Enter Password: "를 출력하고 004012D2에서 문자열을 입력받고 있습니다. 계속 밑으로 내려가 보겠습니다. 루틴 하나를 지나고 004013C5에서 EDX를 호출하여 프로그램을 종료시킵니다. F7키를 이용하여 EDX 안으로 들어가 보겠습니다. ECX와 특정 값들을 비교하고 ZF가 0이라면(ECX와 비교하는 값이 다르다면), 0012F88A로 점프하고 있습니다. 0012F88A로 점프하고 한 줄씩 실행시키다 보면 ECX를 호출해서 프로그램을 종료시켜버립니다. 그렇다면 위에서 ECX와 비교하는 값들을 문자로 변환시키고 패스워..
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
Hackerschool FTZ의 Level 1 풀이입니다. 접속해보면 'hint'라는 파일이 있습니다. 파일을 읽어보면, 라고 출력이 됩니다. 알맞은 명령어로 찾아주겠습니다. 위 명령어를 해석해보면, / 경로부터 소유자 권한이 level2 권한 중 4000대인 것을 찾으면서 에러는 null로 처리하라는 뜻입니다. 그래서 ExecuteMe를 실행시켜보면, 라고 출력이 됩니다. my-pass가 안되므로 sh를 실행시킨 후 my-pass를 하면.. Key : hacker or cracker
Reversing.kr의 문제 CSHARP입니다. 문제 이름처럼 C# 문제입니다. 문제 파일을 실행시켜보면, 알맞은 정답을 알아내면 되는 문제입니다. dnSpy로 문제 파일을 분석하겠습니다. 'MetMett'라는 함수가 있는데 동적으로 호출되고 있어서 호출도 안 되고 디버깅도 안 됩니다. .ctor은 프로그램이 실행되면 자동으로 실행되는데, 이곳에서 MetMett 함수를 복호화시켜주는 것으로 보이는 코드를 찾았습니다. 이 부분에 BP를 걸고 복호화 후에 값을 확인해보겠습니다. 정말 MetMett 함수 부분의 값이 바뀌었습니다. 복호화된 부분을 그대로 복사해서 HxD에서 수정해주겠습니다. HxD에서 MetMett 함수 부분의 값을 수정했습니다. 이제 프로그램을 다시 dnSpy로 열어서 확인해보면.. Met..
2018 HackingCamp CTF의 SWAP WORLD라는 문제입니다. 문제 파일을 IDA로 분석하던 중에 이상한 문자열을 찾았습니다. 상당히 수상해 보이네요. 저 문자열이 사용되는 곳으로 가보겠습니다. 수상한 문자열을 복호화 시켜준 뒤 출력시켜 주네요. 아마 flag 같습니다. 위 코드를 이용해서 저 문자열을 복호화시켜주는 코드를 짜보겠습니다. print bytearray([x^5 for x in bytearray("MFDHU~\\5pZNkjrZ!RDUZRJWIAx")]) 이 코드를 실행시켜보면.. flag가 출력됩니다!
2018 HackingCamp CTF의 PPAP라는 문제입니다. 문제 파일이 jar 파일이네요. 자바 디컴파일러로 열어보겠습니다. 그런데 아무것도 보이지 않네요.. CFR 자바 디컴파일러로 직접 문제 파일의 소스코드를 추출하겠습니다. 숫자들이 담겨있는 엄청나게 긴 배열이 나왔습니다. 저 배열 안에 있는 숫자들을 문자로 바꾸고 파일로 만들어보겠습니다. 배열 안에 있는 숫자들과 0xff를 & 연산해주어서 문자로 만든 뒤 arrby.class 파일에 저장했습니다. arrby.class 파일의 내용을 확인해보겠습니다. 입력받은 문자열의 길이와 내용이 flag와 같다면 배열 안에 있는 값들을 복호화시켜준 뒤 flag를 출력하는 프로그램이군요. 이 코드를 이용해서 flag를 출력해주는 코드를 짜보겠습니다. from..
- Total
- Today
- Yesterday
- 17th HackingCamp CTF
- unity2d
- Level 05
- 풀이
- Level 01
- wargame
- CodeEngn
- Level 03
- ftz
- pwnable
- 유니티
- c++
- 안드로이드 멘토링
- Level 06
- 멘토링
- hackerschool
- Advance RCE
- 안드로이드
- C#
- Level 04
- reversing.kr
- Android
- xcz.kr
- Basic RCE
- Programming
- Write-up
- Level 02
- Reversing
- HackingCamp
- Unity
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |