xcz.kr ju57_ENc0dE

Wargame 2016.08.09 01:30

Message: Yh9/=-^:86/f87Y?]-@L}<_E|*1/=-Xi!"Hx865C|-}:|*DL*G_i86/f868FX(@g@-Lh|)=D}_93@_18@g9,*3YC$(@P


들어가면 이런 메세지를 준다.

이는 암호화된 값으로, base64의 테이블이 엉뚱하게 뒤바뀐 상태이다.

현재는 base64의 테이블을 모르기 때문에, 문제에서 제공해준 암호화 테스트 폼에다가 브루트포싱을 하면서 key table을 하나씩 추론해 나간다.

그리고 key table을 알아냈으면 그 테이블을 기반으로 기존 인덱스들을 translate 시킨 다음에 디코딩을 한다.


import httplib

import urllib

import base64

import time

import string


encrypt_msg = "Yh9/=-^:86/f87Y?]-@L}<_E|*1/=-Xi!\"Hx865C|-}:|*DL*G_i86/f868FX(@g@-Lh|)=D}_93@_18@g9,*3YC$(@P"

headers = {"Cookie":"PHPSESSID=k710udqu4deo7nth7r1r10n7n5",

"Content-Type":"application/x-www-form-urlencoded"}

base64_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

st_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/~`!@#$^&*()_-+}[]{|\"\':;,.<>?"

temp_table = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 

'`', '!', '@', 'X', '$', '%', '^', 'Y', '*', '(', ')', '_', 'U', 

'-', '=', '[', ']', '\\', '{', '}', '|', ';', 'L', ':', '{', ',',

 '.', '/', '<', '{', '?', 'a', 'A', 'b', 'B', 'c', 'C', 'd', 'D', 

 'e', 'E', 'f', 'F', 'g', 'G', 'h', 'H', 'i', 'I', 'j', 'J', 'k', 'K', 'x']

temp_table = ''.join(temp_table[i] for i in range(0, len(temp_table)))

c = ''

for i in range(0, len(encrypt_msg)):

idx = temp_table.find(encrypt_msg[i])

c += base64_table[idx]

print c

raw_input()

for x in range(0, len(st_table)):

for y in range(0, len(st_table)):

for z in range(0, len(st_table)):

conn = httplib.HTTPConnection('xcz.kr')

conn.request("POST", "/START/prob/prob26.php", urllib.urlencode({"encode":st_table[x] + st_table[y] + st_table[z]}), headers)

r1 = conn.getresponse()

data = r1.read().split("ENCODE : ")[1][0:4]

b64 = base64.b64encode(st_table[x] + st_table[y] + st_table[z])

for i in range(len(data)):

idx = base64_table.find(b64[i])

temp_table[idx] = data[i]

print st_table[x] + st_table[y] + st_table[z]

print temp_table

conn.close()


print temp_table

print len(temp_table) 


'Wargame' 카테고리의 다른 글

xcz.kr ju57_ENc0dE  (0) 2016.08.09
xcz.kr XCZ Captcha!  (0) 2016.08.07
xcz.kr Memoryyyyy Dumpppppp  (0) 2016.08.07
xcz.kr Easy Android  (0) 2016.08.06
WeChall prime factory  (4) 2015.11.11
smashthestack.org blackbox level2  (0) 2015.05.22

WRITTEN BY
revers3r
FrozenBeer

받은 트랙백이 없고 , 댓글이 없습니다.
secret

xcz.kr XCZ Captcha!

Wargame 2016.08.07 23:18

이번에 다룰 문제는 captcha 문제이다.

ocr을 읽어서 lcm을 계산하는 문제인데, 중요한 점은.. captcha의 글씨 색이 다르다는 점 뿐?

기본적으로 ocr을 판독하기 위해서는 pytesser, PIL 정도의 모듈이 사용된다.

설명하기 귀찮으니까 바로 코드만 올려야지.


from fractions import gcd

from captcha_solver import CaptchaSolver

from PIL import Image

from pytesser import *

import httplib


def result_send(lcm):

headers = {"Cookie":"PHPSESSID="}

conn = httplib.HTTPConnection('xcz.kr')

conn.request("GET", "/START/prob/prob_files/prob25_ok.php?lcm=" + str(lcm), '', headers)

r1 = conn.getresponse()

data = r1.read()

if "Failed" not in data:

                print data

conn.close()


def get_captcha():

headers = {"Cookie":"PHPSESSID="}

conn = httplib.HTTPConnection('xcz.kr')

conn.request("GET", "/START/prob/prob_files/prob25_img.php", '', headers)

r1 = conn.getresponse()

f = open("./captcha.png", "wb")

f.write(r1.read())

f.close()

conn.close()


def lcm(numbers):

    return reduce(lambda x, y: (x*y)/gcd(x,y), numbers, 1)


while True:

try:

get_captcha()

img = Image.open("./captcha.png")

img = img.convert("RGB")

pixdata = img.load()

for y in xrange(img.size[1]):

for x in xrange(img.size[0]):

if pixdata[x, y][0] < 255:

pixdata[x, y] = (0, 0, 0, 0)

for y in xrange(img.size[1]):

for x in xrange(img.size[0]):

if pixdata[x, y][1] < 255:

pixdata[x, y] = (0, 0, 0, 0)

img.save("./captcha.tif")

image = Image.open("./captcha.tif")

captcha_string = image_to_string(image)

captcha_string = captcha_string.replace("XCZ . KR Captcha LCPI(", "")

captcha_string = captcha_string.replace(")", "")

captcha_string = captcha_string.replace("\n\n", "")

captcha = captcha_string.split(", ")

num1 = long(captcha[0])

num2 = long(captcha[1])

lcm_result = lcm((num1, num2))

result_send(str(lcm_result))

except:

continue

 


사실 tif 이미지의 크기가 작아서 3이랑 8을 혼동하는 일이 너무 많았다..

그래서 Failed 메세지가 없을 경우에만 꺼내놓도록 무한루프를 돌려놓고 겜하고왔더니 키가 나와있었다.

'Wargame' 카테고리의 다른 글

xcz.kr ju57_ENc0dE  (0) 2016.08.09
xcz.kr XCZ Captcha!  (0) 2016.08.07
xcz.kr Memoryyyyy Dumpppppp  (0) 2016.08.07
xcz.kr Easy Android  (0) 2016.08.06
WeChall prime factory  (4) 2015.11.11
smashthestack.org blackbox level2  (0) 2015.05.22

WRITTEN BY
revers3r
FrozenBeer

받은 트랙백이 없고 , 댓글이 없습니다.
secret

이번에 풀어본 문제는 xcz.kr의 Forensic 문제다. 사실 포렌식 문제라고 해봤자, volatility를 사용할 줄 아는 것인지, 그걸 묻는 문제이다.

문제를 먼저 읽어보자.


Description
Korean
어느날 나는 커피집에서 노트북을 놓고 잠시 자리를 비웠다.
그리고 다시 와서 작업을 하다가 작업프로그램이 갑자기 꺼졌고, 작업파일들이 모두 다 삭제되었다.
원인을 찾기위해 나는 서둘러 메모리 덤프를 만들었다.
이 메모리 덤프파일을 분석하여 다음 정보를 알아내자.

키 형식 : (Process Name_PID_Port_Process Execute Time(Day of the week-Month-Day-Hour:Min:Sec-Years)
ex (explorer.exe_1234_7777_Mon-Jan-01-12:00:00-2012)


그렇댄다. 그러니까 문제 Key에서 Port를 요구하고 있는데, 그렇다는건 원격지에서 RHOST에 의해서 프로세스가 종료되었다는 뜻이다.

그렇다면 외부의 접근목록에 대해 보기 위해서, connscan을 사용해보자.


root@qemu:/home/risc/Desktop/volatility-2.3.1# python vol.py -f xczprob2 --profile=WinXPSP3x86 connscan


Volatility Foundation Volatility Framework 2.3.1

Offset(P)  Local Address             Remote Address            Pid

---------- ------------------------- ------------------------- ---

0x05558b38 172.30.1.6:80             1.226.182.38:59495        1124 


한 가지 요구조건인 Port를 얻었다. 80번 포트. 아무래도 1.226.182.38이라는 호스트의 간섭으로 인해서 종료가 된 듯 하다.

그럼 여기서 이제 Process 를 구해보자.


root@qemu:/home/risc/Desktop/volatility-2.3.1# python vol.py -f xczprob2 --profile=WinXPSP3x86 pstree


Volatility Foundation Volatility Framework 2.3.1

Name                                                  Pid   PPid   Thds   Hnds Time

-------------------------------------------------- ------ ------ ------ ------ ----

 0xff30c220:explorer.exe                             1044    984     14    414 2012-11-02 09:05:16 UTC+0000

. 0xff2cdda0:ctfmon.exe                               256   1044      1    115 2012-11-02 09:05:30 UTC+0000

. 0xff2fd650:Mmm.exe                                 1736   1044      2     51 2012-11-02 09:05:29 UTC+0000

. 0xff2fb558:UnlockerAssista                         1956   1044      1     28 2012-11-02 09:05:29 UTC+0000

. 0xff2b9c10:rundll32.exe                            1776   1044      4     79 2012-11-02 09:05:28 UTC+0000

. 0xff2dbb58:cmd.exe                                 1524   1044      1     33 2012-11-02 09:07:08 UTC+0000

.. 0xff2df748:mdd_1.3.exe                             840   1524      1     24 2012-11-02 09:08:09 UTC+0000

 0x810a2660:System                                      4      0     54    245 1970-01-01 00:00:00 UTC+0000

. 0xff407020:smss.exe                                 532      4      3     19 2012-11-02 09:04:31 UTC+0000

.. 0xff3cd6e8:csrss.exe                               652    532     11    390 2012-11-02 09:04:32 UTC+0000

.. 0xff1cc3b8:winlogon.exe                            676    532     23    470 2012-11-02 09:04:32 UTC+0000

... 0xff215da0:services.exe                           720    676     15    259 2012-11-02 09:04:32 UTC+0000

.... 0xff36b990:uphclean.exe                         1800    720      2     38 2012-11-02 09:04:44 UTC+0000

.... 0xff3624c0:svchost.exe                          1568    720      5    106 2012-11-02 09:04:44 UTC+0000

.... 0xff240558:spoolsv.exe                          1452    720     15    133 2012-11-02 09:04:35 UTC+0000

.... 0xff36c188:svchost.exe                          1200    720     13    165 2012-11-02 09:04:34 UTC+0000

.... 0x80ff4da0:svchost.exe                           948    720     10    226 2012-11-02 09:04:33 UTC+0000

.... 0x80f19a38:svchost.exe                          1088    720     63   1078 2012-11-02 09:04:33 UTC+0000

..... 0xff364470:wuauclt.exe                         1996   1088      7    132 2012-11-02 09:04:47 UTC+0000

.... 0xff35f6e0:svchost.exe                          1612    720      5     86 2012-11-02 09:04:44 UTC+0000

.... 0x80feecc8:svchost.exe                           888    720     21    196 2012-11-02 09:04:32 UTC+0000

.... 0xff329438:alg.exe                               340    720      6    101 2012-11-02 09:04:49 UTC+0000

.... 0xff1bd020:svchost.exe                          1144    720      5     62 2012-11-02 09:04:33 UTC+0000

... 0xff240020:lsass.exe                              732    676     23    343 2012-11-02 09:04:32 UTC+0000

 0xff2b6180:nc.exe                                   1124   1724      3     64 2012-11-02 09:06:48 UTC+0000

. 0xff3586b8:cmd.exe                                  164   1124      1     39 2012-11-02 09:06:49 UTC+0000

.. 0xff349868:cmd.exe                                 616    164      1     38 2012-11-02 09:08:02 UTC+0000

 0xff423a88:conime.exe                                252   1724      1     39 2012-11-02 09:05:54 UTC+0000

 


실행중인 프로세스는 nc.exe가 있었고, 이는 netcat으로 리모트 호스트를 이 프로세스에서 받아준 모양이다.

그럼 Process Name도 구했다. nc.exe

그럼.. 이제 끝났네? PID랑 시간도 구했고, 정답 포맷에 맞춰서 전달해주면 된다.

'Wargame' 카테고리의 다른 글

xcz.kr ju57_ENc0dE  (0) 2016.08.09
xcz.kr XCZ Captcha!  (0) 2016.08.07
xcz.kr Memoryyyyy Dumpppppp  (0) 2016.08.07
xcz.kr Easy Android  (0) 2016.08.06
WeChall prime factory  (4) 2015.11.11
smashthestack.org blackbox level2  (0) 2015.05.22

WRITTEN BY
revers3r
FrozenBeer

받은 트랙백이 없고 , 댓글이 없습니다.
secret