Thứ Sáu, 2 tháng 9, 2016

[write-up][ADCTF2014] crypto day 8 ROTATE

file http://adctf2014.katsudon.org/dat/bvvpSQFmYqKQLhEp/rotate.zip
extract thì có 2 file. 1 file là encypt hình và một file là flag.jpg.enc

import sys
import math
import struct

p = lambda x: struct.pack('f', x)
u = lambda x: struct.unpack('b', x)[0]

if len(sys.argv) != 3:
    sys.exit(1)

filename = sys.argv[1]
key = math.radians(int(sys.argv[2]))

bs = open(filename, 'rb').read()
enc = open(filename + '.enc', 'wb')

for i in range(0, len(bs), 2):
    x, y = u(bs[i]), u(bs[i+1])
    enc.write(p(x * math.cos(key) - y * math.sin(key)) + p(x * math.sin(key) + y * math.cos(key)))



Program này hoạt động như sau :
 - Ta truyền vào 2 argv ban đầu là tên file cần encrypt, thứ 2 là key. Key ở đây là một số. Do có đoạn 
"key = math.radians(int(sys.argv[2]))"
nên key chỉ nằm ở khoảng 0 - 360 . Sau đó sẽ đọc từng char xong file hình là encrypt theo công thức.
Sau khi hiểu cách hoạt động của program, mình bắt đầu vào viết code. Vì là code decrypt nên sẽ tiếp cận theo cách bottom-up.
Sau khi thử encrypt một file bình thường thì mình thấy sau khi encrypt thì từ 1 char ban đầu sẽ tăng lên 4 char, thì thế mình sẽ tách một đoạn 8 kí tự ra làm 2 phần. Sau đó giải pt tìm x và y. Rồi tiếp tục pack char đó lại về thành bs[i] và bs[i+1]. Sau khi decrypt, ta cần phải kiểm tra xem phải file hình không. Ban đầu mình kiểm tra header là ffd8ffe000 tuy nhiên k có file nào hợp lệ. Vì vậy đã giảm xuống ffd8ff. Tuy vậy nhưng vẫn decrypt được file như bình thường. 
Đây là code decrypt :
import sys
import math
import struct

z = lambda x: struct.unpack('f', x)[0]
t = lambda x: struct.pack('b', int(round(x)))


def cp(x): #check if x can pack with func t()
    if int(round(x))>127:
        return 0 
    elif int(round(x))<-128:
        return 0
    else:
        return 1


def decode(filee,key):
    de=''
    key=math.radians(int(key))
    sx=math.sin(key)
    cx=math.cos(key)
    for i in range(0,len(filee),8):
        a=z(filee[i:i+4]) 
        b=z(filee[i+4:i+8])
        y=((b*cx-a*sx)) 
        x=(a+y*sx)/cx
        if cp(x)==0 or cp(y)==0 :
            return 0
        xx=t(x)
        yy=t(y)
        de+=xx+yy
    if de.encode('hex')[:6]=='ffd8ff':
        return de
    else:
        return 0
def solve(filename):
    filee=open(filename,'rb').read()
    dc=open(filename + '.jpg','wb')
    for i in range(360): 
        if i!=0 and i!=90 and i!=270:
            if decode(filee,i)!=0 :
                print i
                dc.write(decode(filee,i))
solve(sys.argv[1])

Chủ Nhật, 28 tháng 8, 2016

[write-up][CTF(x)][For50] crash

Đề :

file : https://drive.google.com/file/d/0B8gJ0ijTg8_3Vk5meGhrNkJOQmM/view?usp=sharing
Sau khi tải về, unzip có 2 file. tuy nhiên file flag.txt rỗng. còn lại file .flag.txt.swp .
Tìm thử thông tin về file swp này thì ta biết nó là file vim swap file. Và command để recover file là 
vim -r .flag.txt.swp


flag :

ctf(v1m_is_be77er_than_3macs)

Thứ Bảy, 27 tháng 8, 2016

[write-up][CTF(x)] [Crypto50] λ (lambda)


I used this program to encrypt a flag. The output was:n1s4_t1An(f1ctdb@mpl_h3)m3lp3y__Eas


print (lambda j,m:(lambda f,t:t if len(t) <= 1 else j([f(f,x)for x in m(j,m(reversed,(lambda s:zip(*[iter(s)]*(len(s)/2)))(t+"\x01"*(len(t)%2))))]))(lambda f,t:t if len(t) <= 1 else j([f(f,x)for x in m(j,m(reversed,(lambda s: zip(*[iter(s)]*(len(s)/2)))(t+"\x01"*(len(t)%2))))]),raw_input("Plaintext:")))(''.join,map).replace("\x01","")

I realized it's a obfuscation code so it too hard to reverse code to readable. So i think a ez way to solve this challenge. I think this program will change pos of char so i will find the pos of each char before encypt.
First i check length of cipher:
len("n1s4_t1An(f1ctdb@mpl_h3)m3lp3y__Eas")=35

Then i encrypt this type of flag : 


ctf(ABCDEFGHIJKLMNOPQRSTUVWXYZ0123)

after i encrypted this type of flag. i would found the pos of each char in this type of flag in encrypted flag. Here is my decrypt code :

def
enc(plaintext): return (lambda j,m:(lambda f,t:t if len(t) <= 1 else j([f(f,x)for x in m(j,m(reversed,(lambda s:zip(*[iter(s)]*(len(s)/2)))(t+"\x01"*(len(t)%2))))]))(lambda f,t:t if len(t) <= 1 else j([f(f,x)for x in m(j,m(reversed,(lambda s: zip(*[iter(s)]*(len(s)/2)))(t+"\x01"*(len(t)%2))))]),plaintext))(''.join,map).replace("\x01","") def dcode(cipher): flag_type="ctf(ABCDEFGHIJKLMNOPQRSTUVWXYZ0123)" flag="" for x in flag_type: flag+=cipher[enc(flag_type).find(x)] return flag cip='n1s4_t1An(f1ctdb@mpl_h3)m3lp3y__Eas' print "\nFLAG : ", dcode(cip)


Input : n1s4_t1An(f1ctdb@mpl_h3)m3lp3y__Eas
FLAG : ctf(1@mbd4_1nsAn1ty_pl3asE_h3lp_m3)



[Write-up] [IceCTF] [For125] Intercepted Conversations Pt.2

Đề :


File đính kèm là pcapng. Sau khi mở file bằng wireshark ta thấy đại khái có 2 thằng nói chuyện với nhau. Và thằng A kêu không an toàn nên gửi cho thằng B cái tool là file encode.pyc

 Kéo xuống 1 chút ta có thể thấy phần data file đc gửi qua
Follow TCP stream rồi dump file đó ra.
Đây là file pyc nên ta sẽ decompiler file này. Sau đó có phần source code Encode như sau :

# Python 3.5 (decompiled from Python 2.7)# Embedded file name: encode.py# Compiled at: 2016-08-08 05:10:09import randomimport base64P = [27, 35, 50, 11, 8, 20, 44, 30, 6, 1, 5,
2, 33, 16, 36, 64, 3, 61, 54, 25, 12, 21,
26, 10, 57, 53, 38, 56, 58, 37, 43,
17, 42, 47, 4, 14, 7, 46, 34, 19, 23,
40, 63, 18, 45, 60, 13, 15, 22, 9, 62,
51, 32, 55, 29, 24, 41, 39, 49, 52, 48,
28, 31, 59]S = [68, 172, 225, 210, 148, 172, 72, 38, 208,
227, 0, 240, 193, 67, 122, 108, 252, 57, 174,
197, 83, 236, 16, 226, 133, 94, 104, 228, 135,
251, 150, 52, 85, 56, 174, 105, 215, 251, 111,
77, 44, 116, 128, 196, 43, 210, 214, 203, 109,
65, 157, 222, 93, 74, 209, 50, 11, 172, 247, 111,
80, 143, 70, 89]inp = input()inp += ''.join((chr(random.randint(0,47)) for _ in range(64 - len(inp) % 64)))ans = ['' for i in range(len(inp))]for j in range(0,len(inp),64):for i in range(64):ans[j + P[i] - 1] = chr((ord(inp[j + i]) + S[i]) % 256)

ans = ''.join(ans)print(base64.b64encode(ans.encode('utf8')).decode('utf8'))# okay decompiling encode.pyc

Bên cạnh đó theo dõi tiếp file pcapng thì 2 thằng còn gửi qua một tin có dạng mã base64. Mà dựa theo đoạn code trên thì sẽ in ra chuỗi đc encode base64 nên ta đoán tin này là flag sau khi được encode
Giờ việc cần làm là dịch ngược đoạn code trên và tin nhắn này để đưa về flag. Decode
import random

import base64

P = [27, 35, 50, 11, 8, 20, 44, 30, 6, 1, 5,
2, 33, 16, 36, 64, 3, 61, 54, 25, 12, 21,
26, 10, 57, 53, 38, 56, 58, 37, 43,
17, 42, 47, 4, 14, 7, 46, 34, 19, 23,
40, 63, 18, 45, 60, 13, 15, 22, 9, 62,
51, 32, 55, 29, 24, 41, 39, 49, 52, 48,
28, 31, 59]S = [68, 172, 225, 210, 148, 172, 72, 38, 208,
227, 0, 240, 193, 67, 122, 108, 252, 57, 174,
197, 83, 236, 16, 226, 133, 94, 104, 228, 135,
251, 150, 52, 85, 56, 174, 105, 215, 251, 111,
77, 44, 116, 128, 196, 43, 210, 214, 203, 109,
65, 157, 222, 93, 74, 209, 50, 11, 172, 247, 111,
80, 143, 70, 89]

ans="Wmkvw680HDzDqMK6UBXChDXCtC7CosKmw7R9w7JLwr/CoT44UcKNwp7DllpPwo3DtsOID8OPTcOWwrzDpi3CtMOKw4PColrCpXUYRhXChMK9w6PDhxfDicOdwoAgwpgNw5/Cvw=="

ans=(base64.b64decode((ans.encode('utf8')))).decode('utf8')inp=['' for i in range(64)]

for i in range(64):

inp[i]= chr((ord(ans[P[i]-1])-S[i])%256)inp=''.join(inp)print inp


FLAG :
IceCTF{4Lw4y5_US3_5s1_AnD_n3VR4r_mAKe_Y0ur_0wN_cRyp70}



[Write-up] [IceCTF] [Misc] Blue moon

Đề

Kiểm tra hex:
Đây là file midi. Nghe thử thì khá giống mã morse nhưng không phải do quá ngắn. 
Mình tìm thử thì thấy cái tool này http://flashmusicgames.com/midi/mid2txt.php
Upload file lên sau đó send. Nó trả về như sau ;
MFile 0 1 220MTrk0 On ch=1 n=73 v=100220 Off ch=1 n=73 v=0220 On ch=1 n=99 v=100440 Off ch=1 n=99 v=0440 On ch=1 n=101 v=100660 Off ch=1 n=101 v=0660 On ch=1 n=67 v=100880 Off ch=1 n=67 v=0880 On ch=1 n=84 v=1001100 Off ch=1 n=84 v=01100 On ch=1 n=70 v=1001320 Off ch=1 n=70 v=01320 On ch=1 n=123 v=1001540 Off ch=1 n=123 v=01540 On ch=1 n=72 v=1001760 Off ch=1 n=72 v=01760 On ch=1 n=65 v=1001980 Off ch=1 n=65 v=01980 On ch=1 n=99 v=1002200 Off ch=1 n=99 v=02200 On ch=1 n=107 v=1002420 Off ch=1 n=107 v=02420 On ch=1 n=49 v=1002640 Off ch=1 n=49 v=02640 On ch=1 n=110 v=1002860 Off ch=1 n=110 v=02860 On ch=1 n=57 v=1003080 Off ch=1 n=57 v=03080 On ch=1 n=95 v=1003300 Off ch=1 n=95 v=03300 On ch=1 n=109 v=1003520 Off ch=1 n=109 v=03520 On ch=1 n=85 v=1003740 Off ch=1 n=85 v=03740 On ch=1 n=53 v=1003960 Off ch=1 n=53 v=03960 On ch=1 n=73 v=1004180 Off ch=1 n=73 v=04180 On ch=1 n=99 v=1004400 Off ch=1 n=99 v=04400 On ch=1 n=95 v=1004620 Off ch=1 n=95 v=04620 On ch=1 n=87 v=1004840 Off ch=1 n=87 v=04840 On ch=1 n=49 v=1005060 Off ch=1 n=49 v=05060 On ch=1 n=55 v=1005280 Off ch=1 n=55 v=05280 On ch=1 n=104 v=1005500 Off ch=1 n=104 v=05500 On ch=1 n=95 v=1005720 Off ch=1 n=95 v=05720 On ch=1 n=109 v=1005940 Off ch=1 n=109 v=05940 On ch=1 n=73 v=1006160 Off ch=1 n=73 v=06160 On ch=1 n=68 v=1006380 Off ch=1 n=68 v=06380 On ch=1 n=49 v=1006600 Off ch=1 n=49 v=06600 On ch=1 n=53 v=1006820 Off ch=1 n=53 v=06820 On ch=1 n=95 v=1007040 Off ch=1 n=95 v=07040 On ch=1 n=76 v=1007260 Off ch=1 n=76 v=07260 On ch=1 n=51 v=1007480 Off ch=1 n=51 v=07480 On ch=1 n=116 v=1007700 Off ch=1 n=116 v=07700 On ch=1 n=53 v=1007920 Off ch=1 n=53 v=07920 On ch=1 n=95 v=1008140 Off ch=1 n=95 v=08140 On ch=1 n=72 v=1008360 Off ch=1 n=72 v=08360 On ch=1 n=52 v=1008580 Off ch=1 n=52 v=08580 On ch=1 n=118 v=1008800 Off ch=1 n=118 v=08800 On ch=1 n=69 v=1009020 Off ch=1 n=69 v=09020 On ch=1 n=95 v=1009240 Off ch=1 n=95 v=09240 On ch=1 n=97 v=1009460 Off ch=1 n=97 v=09460 On ch=1 n=95 v=1009680 Off ch=1 n=95 v=09680 On ch=1 n=114 v=1009900 Off ch=1 n=114 v=09900 On ch=1 n=52 v=10010120 Off ch=1 n=52 v=010120 On ch=1 n=118 v=10010340 Off ch=1 n=118 v=010340 On ch=1 n=51 v=10010560 Off ch=1 n=51 v=010560 On ch=1 n=125 v=10010780 Off ch=1 n=125 v=011780 Meta TrkEndTrkEnd
 Có 2 Phần On Off nhưng số n ở 2 phần tương tự nhau.
Nhận thấy phần n= x với x giống như dec trong bảng mã ascii. Kiểm tra thử thì 73 = I, 99 (c), 101 (e) …
Dịch hết thì được flag : IceCTF{HAck1n9_mU5Ic_W17h_mID15_L3t5_H4vE_a_r4v3}  

Thứ Ba, 16 tháng 8, 2016

[Write-up] IceCTF - Move Along

Xin chào mọi người, mình là delta. 

Bài write-up đầu tiên mình viết này là bài Move Along trong giải IceCTF.

"This site seems awfully suspicious, do you think you can figure out what they're hiding?"
Khi truy cập vào trang ta chỉ dòng chữ như trong hình:

 Theo thói quen trước tiên thì mình sẽ F12 xem trang được code như thế nào.
Để ý đường link của tấm hình nằm ở "http://move-along.vuln.icec.tf/move_along/nothing-to-see-here.jpg", ta thấy tấm hình nằm trong folder move_along.
Di chuyển trở ngược folder đó (xóa tên tấm hình đi), sẽ có folder 0f76da769d67e021518f05b552406ff6/, tiếp tục sẽ có file ảnh secrect.jpg, và đó là nơi chưa flag t cần tìm :))


Chúc các bạn thành công! :)



Thứ Bảy, 13 tháng 8, 2016

[Writeup]IceCTF-Scavenger Hun-Misc-20 pt

Đề bài:
There is a flag hidden somewhere on our website, do you think you can find it? Good luck! 

Dịch đề các bạn chắc cũng đã hiểu đề yêu cầu cái gì rồi chứ :D flag được giấu đâu trong  https://icec.tf/ ,việc của các bạn là tìm ra nó @@

Nhìn như kiểu mò kim đáy biển ấy nhỉ,nhưng chưa thử sao biết:>
Các bạn đi view-source hết các trang liên kết vs page xem sao :D

Quả không sai,mình cũng tìm được nó,ez =))

Flag:IceCTF{Y0u_c4n7_533_ME_iM_h1Din9}
bigb0y27