KYSIS CTF 2018 Write-Up
M4ndU
작성일 : 2018.08.07 18:07
공개일 : 2018.08.14 17:11
(7일이나 지났는데 올려도 되겠지...)
WEB - read flag

문제 사이트에 들어가면 alert()가 무한루프 돌아서 아무것도 안된다.
그냥 크롬 설정 - 콘텐츠 설정 - 자바스크립트 에서 차단하고 들어간뒤
페이지 소스보기로 플래그를 확인할 수 있다.

REVERSING - Simple Ransomware

파일이 두개 주어진다.
하나는 플래그가 암호화된 파일이고, 다른 하나는 복호화를 해주는 elf파일이다.

아이다 64비트로 열어서 보았다.
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 | signed __int64 __fastcall main(int a1, char **a2, char **a3) { signed __int64 result; // rax@2 const char *v4; // rdi@3 if ( a1 == 2 ) { v4 = a2[1]; if ( !strcmp(v4, "start") ) { sub_400C2F(); s = sub_400BA0(); v4 = sub_400B54(); if ( (unsigned int)sub_400B12((const char *)s) ) sub_400C66(s); else sub_400C66(s); } result = 0LL; } else { result = 0xFFFFFFFFLL; } return result; } | cs |
메인함수다.
if ( a1 == 2 )
{
v4 = a2[1];
if ( !strcmp(v4, "start") )
인자값으로 start를 주어야 한다.
| int sub_400C2F() { char *v0; // rax@1 v0 = sub_400BFA(); printf("welcome %s\n", v0); puts("I want to Decrypt File!!!!"); return puts("Maybe you find simple key.. file will be decrypt.."); } | cs |
key를 찾으라고 한다.
| void *sub_400BA0() { s = malloc(0xAuLL); memset(s, 0, 0xAuLL); printf("what is key ? ", 0LL); gets(s); return s; } | cs |
key값을 입력받아서 s에 저장한다.
이 코드는 왜 있는지 잘 모르겠다.
if ( (unsigned int)sub_400B12((const char *)s) )
sub_400C66(s);
else
sub_400C66(s);
if가 True이든 False이든 같은 작업을 하는데, sub_400C66()함수는 암호화된 파일을 복호화 하는 함수이고
sub_400B12()함수에서 입력했던 key값을 비교한다.
| __int64 __fastcall sub_400B12(const char *a1) { const char *v1; // rax@1 LODWORD(v1) = sub_400AA5(); return strcmp(v1, a1) == 0; } | cs |
gdb로 열어서 strcmp에 breakpoint 걸고 v1의 값을 확인해보면 key값을 얻을 수 있다.

해당 부분은 0x400B3D이고 인자의 주소가 각각 rsi, rdi에 저장되어 있다.
mandu@mandu-VirtualBox:~/바탕화면$ gdb -q Let_Decrypt
Reading symbols from Let_Decrypt...(no debugging symbols found)...done.
(gdb) b * 0x400B3D
Breakpoint 1 at 0x400b3d
(gdb) r start
Starting program: /home/mandu/바탕화면/Let_Decrypt start
welcome mandu
I want to Decrypt File!!!!
Maybe you find simple key.. file will be decrypt..
what is key ? b
Breakpoint 1, 0x0000000000400b3d in ?? ()
(gdb) info reg rsi
rsi 0x604620 6309408
(gdb) info reg rdi
rdi 0x604640 6309440
(gdb) x/s 0x604640
0x604640: "OPENTHEDOOR"
(gdb) x/s 0x604620
0x604620: "b"
키를 구했다.
mandu@mandu-VirtualBox:~/바탕화면$ ./Let_Decrypt start
welcome mandu
I want to Decrypt File!!!!
Maybe you find simple key.. file will be decrypt..
what is key ? OPENTHEDOOR
INPUT : decrypt file name : flag.KYSIS
INPUT new file : flag
Success Decrypt Good Luck!
mandu@mandu-VirtualBox:~/바탕화면$ cat flag
Hello flag is KYSIS{1T's_S1mpl3_R4nsomw4re}
NETWORK - Net -- Work
pcap파일이 주어지는데 여기서 추출가능한 파일은 1개의 jpg파일과 7개의 cab파일이 있다.
처음에 cab파일들을 분석하는 삽질을 하다가 많은 분들이 푸신걸 보고 이 루트가 아니구나 판단. (애초에 60점짜리..)
jpg파일에서 KYSIS를 검색하니 플래그가 있었다..

FORENSIC - Oriental medicine

.001파일이 주어진다.
.001파일은 AccessData FTK Imager로 열 수 있다.

힌트를 보면 찾아야할 파일은 jpeg파일이다.
jpeg파일 시그니처는 이렇다.

FF D8 FF E0로는 나오지 않아서 4A 46 49 46으로 검색했다.

jpeg파일의 footer 시그니처는 FF D9이므로 FF D9를 찾아서 HxD로 복사했다.
그렇지만 시그니처를 제대로 보면 FF FF FF E0로 되어있다. 두번째 FF 를 D8로 바꾸면 파일이 제대로 열린다.

맥 짚는중...ㅋㅋ
근데 플래그 인증이 안된다...
왜 그런가 보니

위에 내용이 더 있었다........
이 값들을 추가해주고 md5 돌려서 플래그 인증했다.
대회 종료후 풀이보고 다시 푼 문제들의 풀이들: