Chủ Nhật, 28 tháng 6, 2015

OnePiece at UIT & ATTT

Từ phải qua: Trần Anh Khoa, Lê Huy Hoàng, Tạ Đình Sung, Nguyễn Thành Nguyên


Trước khi bắt đầu cuộc thi

Quá trình giải đề. Tiêu tốn 2 lon bò húc, 1 chai 0 độ và 1 vài chai Sting

 Kết quả :D

Cờ và cúp vô địch

OnePiece và pwn_the_world (trái), CLAY (Phải)

OnePiece và BTC Cuộc thi

Chúc mừng các đội và cảm ơn UIT đã tạo ra 1 cuộc thi vô cùng hay cho mình và các bạn sinh viên.

Thứ Sáu, 29 tháng 5, 2015

[Malware Analysis] BOTNET-NEW

Tình hình là tập tành phân tích Malware nên xin anh Phạm Việt Hòa (Levis) share cho vài mẫu Malware đơn giản.
Anh share cho mẫu trong tool ddos của 1 người post trên forum CEH.
Link: http://www.mediafire.com/download/dx8di7t24515w46/BOTNET-NEW.exe

OK. Download về tiến hành dịch ngược xem thế nào :D

Quăng vào IDA thì nhận được thông tin sau:
.NET :D Thật là tuyệt vời. .NET thì dễ xem source rồi

Quăng vào ILSpy tiến hành xem source code thôi :D


Như ta thấy trong Form1
Có 1 string khá lạ lùng là apha: tại sao lại có những ký tự loằng ngoằng mì tôm thế kia? Mục đích là gì?
Ta tiến hành xem xét tiếp các hàm trong Form1.
Hàm buttonAttack_Click_1 không có gì khả nghi. Chỉ là cho WebBrowser dùng bot tấn công vitim.
Tới hàm buttonBrowser_Click ta thấy có đoạn liên quan tới chuỗi apha ở trên:
string value = string.Concat(new string[]
    {
        this.apha[9].ToString(),
        this.apha[44].ToString(),
        this.apha[9].ToString(),
        this.apha[44].ToString(),
        this.apha[9].ToString(),
        this.apha[34].ToString(),
        this.apha[34].ToString(),
        this.apha[39].ToString(),
        this.apha[36].ToString(),
        this.apha[33].ToString(),
        this.apha[23].ToString(),
        this.apha[26].ToString(),
        this.apha[9].ToString(),
        this.apha[2].ToString(),
        this.apha[29].ToString(),
        this.apha[43].ToString(),
        this.apha[8].ToString(),
        this.apha[24].ToString(),
        this.apha[26].ToString()
    });
Vậy value sẽ được gán là gì?

Gmail ?
LOADBOT để ddos thôi tại sao có gmail ở đây?

Tiếp luôn.


Sau khi value được gán thì nó được đưa vào class mtp và gửi đi.
Ta coi tiếp hàm Send() của mtp:

Đã rõ. Như ở trên ta thấy danh sách bot được đưa vào chuỗi text. chuỗi text được đưa vào mtp gửi đi qua email ở trên.

Như vậy, chủ con malware này tung tool này để người ta đem bot đi ddos người khác nhưng hắn lại được cái list bot đó và có thể điều khiển đám bot đó đi tấn công người khác.

Sau khi phân tích xong thì thử google tìm ra cái link này:
http://forum.ceh.vn/Tool-load-bot-cua-KymLjnk-ko-biet-share-co-bi-gi-ko-thread-7156-post-26848.ceh#pid26848
Trong đó đã có một vài thím phân tích con này trước rồi :D

Cảm ơn anh Việt Hòa đã giúp đỡ em.

Thứ Tư, 6 tháng 5, 2015

[Writeup] Camsctf - Helix

Đề cho
Helix - 20
Hmmm, I wonder who Lord Helix is and what he wants with you.
Hint: TweakPNG may not be your friend sometimes.
Một số bạn coi writeup của camsctf trên: https://github.com/dannyqiu/camsctf-in-s-ane nhưng thật sự có một số writeup khá khó hiểu. Bài Helix chỉ có 20 điểm. Dễ nhưng số lượng team giải được là rất ít.
Sau đây là writeup cách mình giải:

Download về đưa vào TweakPNG kiểm tra các chunk

Dùng notepad đếm số zTXt chunk:
12136 chunks. Coi hết chắc đuối.

Kiểm tra sơ qua ta thấy hầu như các chunk giống hệt nhau. => Ta tiến hành loại bỏ các chunk giống nhau.

Đưa ảnh vào HxD:

Đoạn bôi đen là 1 chunk zTXT có key là Helix
Tiến hành Replace: Ctrl R (Search -> Replace)
Chú ý copy hex để replace chứ copy binary thì sẽ lỗi. Chọn All thay vì Forward để replace toàn bộ. Sau đó chọn Replace all.
Kết quả:
12136 chunks mà đã bỏ đi 12134 chunks. Ta còn lại 2 chunks.
OK save rồi qua TweakPNG reopen lại:
OK. Mở thử 2 chunk này thì phát hiện ở chunk thứ 2 có đoạn:

Flag là:
 {5p3nc3r_no0o0_st0p}

Thứ Ba, 5 tháng 5, 2015

[Writeup] UITCTF 2014 - Magic Hat

Vừa có thím quăng cho cái file magic_hat.rar kêu giải bài này. Chưa biết format flag nhưng cũng thử xem qua phát đã.
Giải nén ra ta được 1 file ảnh PNG

Vì là file PNG nên cứ đưa vào TweakPNG xem các chunk đã :D (Có thể sử dụng fotoforensic.com cũng được)
http://fotoforensics.com/analysis.php?id=5f14471a586479fdbcd66d42f842476831ab5aca.797660
Tham khảo về chunk của PNG tại đây: http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html


Khá nhiều chunk nhưng đa phần toàn chunk liên quan tới ảnh. Để ý cái chunk iTXt ta thấy có 1 đoạn base64 (vì có = ở cuối. Xem thêm ở đây để hiểu vì sao có dấu = trong base64 http://en.wikipedia.org/wiki/Base64 )

eJwL9QxxDnGrzjVJz0yOh5CuZalFleUZqUWpirUAsEsLdQ==
Đưa vào hackbar trên firefox decode base64 thử thì được như sau:

Nhìn rối chả biết đằng nào mà lần.
Thôi thì ghi vào file rồi binwalk thử.



Ố ồ. Gzip decode thôi :D http://i-tools.org/gzip

UITCTF{m4gic_m4gic_Everywhere!}

Chủ Nhật, 3 tháng 5, 2015

[Writeup] VolgaCTF 2015 - Captcha

Thứ Bảy, 25 tháng 4, 2015

[WriteUp] WhiteHat Contest 9 - Steg200


Steg200

http://material.wargame.whitehat.vn/contests/9/steg200_f2f6d2f2773301a5246507e25225349d.jpg
Đề cho ta mỗi cái hình:
http://material.wargame.whitehat.vn/contests/9/steg200_f2f6d2f2773301a5246507e25225349d.jpg

Sau khi thử bằng binwalk, http://fotoforensics.com/, tweakpng thì ta không phát hiện được điều gì đặc biệt
Tìm thử ảnh gốc nó để so sánh xem khác nhau không?
Let search
Kích thước ảnh là 900 × 582
Google hình ảnh ta có:

http://www.twinkfish.com/al/SilentRuinsGrayscale.jpg

Nhìn sơ thì không khác nhau là mấy.
OK vậy code thử:
Nếu chỗ nào khác nhau ta gán màu đen (0,0,0) và giống nhau ta gán màu trắng (255,255,255) ở hệ màu RGB

from PIL import Image
img = Image.open("SilentRuinsGrayscale.jpg")
img2 = Image.open("steg200_f2f6d2f2773301a5246507e25225349d.jpg")
pix = img.load()
pix2 = img2.load()
for i in xrange(img.size[0]):
for j in xrange(img.size[1]):
if pix[i,j]!=pix2[i,j]:
pix2[i,j]=(0,0,0)
else:
pix2[i,j]=(255,255,255)
img2.save("result.jpg")

Lại là QR code... Ám ảnh

Cắt ra fix lại decode ta được:

Flag:
WhiteHat{2fda0b6199b0465b61fde1f43c6a721038c7f3a0} 

[WriteUp] WhiteHat Contest 9 - Crypto300

Crypto300

Một mạch có đầu vào 8bit và đầu ra 8 bit tương ướng với plaintext và ciphertext (đã được base64)
cipher = 4BauKt+udK5gx34Wkyq03/Wurqb1336+3zSu37S+kyq037u0u5Mq9X7fx776w99grqaupjSuYN9+Frt+334Wrt+7k2BqIrsqrt9+u4uu9d++ICDfu7S7kyr1ft9+Fq7f4JMqKsPfKr5+3+CTfhbfk37L

Flag = WhiteHat{sha1(plaintext)}

Schematic của mạch mã hóa được vẽ bằng mô phỏng proteus như sau:
http://material.wargame.whitehat.vn/contests/9/crypto300_354a0de71625c782906783139bb8fb72.bmp

OK nhìn vào mạch ta có thể đoán được như sau:
Đầu vào là 8 bit = 1 byte = 1 char
Đầu ra cũng 8 đèn led = 8 bit = 1 byte = 1 char cipher

Trong mạch rất đơn giản chỉ có 2 loại cổng là NAND và XOR

Đầu vào là plaintext nên ta bruteforce các kí tự in được từ chr(32) -> chr(126)
Coi thêm tại http://asciitable.com/

OK Bắt tay vào code
import base64
def NAND(a,b):
a=int(a)
b=int(b)
if not (a&b):
return 1
return 0

def XOR(a,b):
a=int(a)
b=int(b)
if a != b:
return 1
else:
return 0
def N1(a):
return NAND(a[0],a[1])
def N2(a):
return NAND(a[2],a[3])
def N3(a):
return NAND(a[4],a[5])
def N4(a):
return NAND(a[6],a[7])
def N5(a):
return NAND(a[0],a[2])
def N6(a):
return NAND(a[1],a[3])
def N7(a):
return NAND(a[4],a[6])
def N8(a):
return NAND(a[5],a[7])

def X11(a):
return XOR(N1(a),a[1])
def X12(a):
return XOR(N2(a),a[1])
def X13(a):
return XOR(N3(a),a[2])
def X14(a):
return XOR(N4(a),a[3])
def X15(a):
return XOR(N5(a),a[4])
def X16(a):
return XOR(N6(a),a[5])
def X17(a):
return XOR(N7(a),a[6])
def X18(a):
return XOR(N8(a),a[7])
def X21(a):
return XOR(X11(a),a[6])
def X22(a):
return XOR(X12(a),a[3])
def X23(a):
return XOR(X13(a),a[4])
def X24(a):
return XOR(X14(a),a[5])
def X25(a):
return XOR(X15(a),a[6])
def X26(a):
return XOR(X16(a),a[7])
def X27(a):
return XOR(X17(a),a[0])
def X28(a):
return XOR(X18(a),a[1])
def toChar(a):
a = char2binary(a)
bin = str(X21(a))
bin += str(X22(a))
bin += str(X23(a))
bin += str(X24(a))
bin += str(X25(a))
bin += str(X26(a))
bin += str(X27(a))
bin += str(X28(a))
return bin
def char2binary(a):
x=format(ord(a),'b').zfill(8)
return x

cipher = base64.b64decode("4BauKt+udK5gx34Wkyq03/Wurqb1336+3zSu37S+kyq037u0u5Mq9X7fx776w99grqaupjSuYN9+Frt+334Wrt+7k2BqIrsqrt9+u4uu9d++ICDfu7S7kyr1ft9+Fq7f4JMqKsPfKr5+3+CTfhbfk37L")
key = []
for n in xrange(0,len(cipher)):
k = []
c = char2binary(cipher[n])
for i in xrange(32,126): 
res = toChar(chr(i))
if res==c:
k.append(chr(i))
key.append(k)
if len(k)==0:
print "Fail"
exit(1)
flag = ""
for i in xrange(len(key)):
flag+=key[i][0]
print i,key[i]
print flag

Run it:
Kết quả là Fail
Why? Bởi vì có kí tự output mà không tìm được kí tự input nào
Xem xét kỹ ta thấy có thể đề đã sai. Tinh tế hơn ta để ý ở X21. Ta thử sửa thành
def X21(a):
# return XOR(X11(a),a[6])
return XOR(X11(a),a[7])
Run tiếp:
C:\Users\phieu lang\Desktop\WH9>crypto300.py
0 ['W']
1 ['H', '|']
2 ['E']
3 ['D', 'N', 'z']
4 [' ', '[']
5 ['E']
6 ['V']
7 ['E']
8 ['R']
9 ['Y']
10 ['T', '^']
11 ['H', '|']
12 ['I']
13 ['D', 'N', 'z']
14 ['G']
15 [' ', '[']
16 ['S']
17 ['E']
18 ['E']
19 ['M']
20 ['S']
21 [' ', '[']
22 ['T', '^']
23 ['O']
24 [' ', '[']
25 ['B']
26 ['E']
27 [' ', '[']
28 ['G']
29 ['O']
30 ['I']
31 ['D', 'N', 'z']
32 ['G']
33 [' ', '[']
34 ['A']
35 ['G']
36 ['A']
37 ['I']
38 ['D', 'N', 'z']
39 ['S']
40 ['T', '^']
41 [' ', '[']
42 ['Y']
43 ['O']
44 ['U']
45 [',']
46 [' ', '[']
47 ['R']
48 ['E']
49 ['M']
50 ['E']
51 ['M']
52 ['B']
53 ['E']
54 ['R']
55 [' ', '[']
56 ['T', '^']
57 ['H', '|']
58 ['A']
59 ['T', '^']
60 [' ', '[']
61 ['T', '^']
62 ['H', '|']
63 ['E']
64 [' ', '[']
65 ['A']
66 ['I']
67 ['R']
68 ['+', 'P']
69 ['L', 'x']
70 ['A']
71 ['D', 'N', 'z']
72 ['E']
73 [' ', '[']
74 ['T', '^']
75 ['A']
76 ['K']
77 ['E']
78 ['S']
79 [' ', '[']
80 ['O']
81 ['F']
82 ['F']
83 [' ', '[']
84 ['A']
85 ['G']
86 ['A']
87 ['I']
88 ['D', 'N', 'z']
89 ['S']
90 ['T', '^']
91 [' ', '[']
92 ['T', '^']
93 ['H', '|']
94 ['E']
95 [' ', '[']
96 ['W']
97 ['I']
98 ['D', 'N', 'z']
99 ['D', 'N', 'z']
100 [',']
101 [' ', '[']
102 ['D', 'N', 'z']
103 ['O']
104 ['T', '^']
105 [' ', '[']
106 ['W']
107 ['I']
108 ['T', '^']
109 ['H', '|']
110 [' ', '[']
111 ['I']
112 ['T', '^']
113 ['$', '.']
WHED EVERYTHIDG SEEMS TO BE GOIDG AGAIDST YOU, REMEMBER THAT THE AIR+LADE TAKES OFF AGAIDST THE WIDD, DOT WITH IT$
Fix lại 1 số chỗ ta được key chính xác là:
 WHEN EVERYTHING SEEMS TO BE GOING AGAINST YOU, REMEMBER THAT THE AIRPLANE TAKES OFF AGAINST THE WIND, NOT WITH IT.
OK giờ ta có flag:
 WhiteHat{5ad8000a22f19c27cba191e4e6812c1833141138}