Tổng số lượt xem trang

Chủ Nhật, 26 tháng 10, 2014

[Whitehat Grindprix 2014] Net300 writeup

Hi bà con,

Net300: cấu hình dịch vụ để xem flag trên một địa chỉ đang bị chặn.

Network300 whitehat khá đơn giản, sau khi kết nối ssh băng một tài khỏan của BTC cung cấp, chúng ta sẽ bị jail shell ( không thể làm gì được nữa ). Nên trước tiên phải phá jail ra,

Đầu tiên ta thử: /bin/bash: permision denied => không vui rồi, /bin/sh : Bingo ok, đã sang shell mới, tuy nhiên shell này là chế độ postfix của bash shell nên các lệnh bash shell cấm thì nó cũng cấm, ta thử iptables -L => Operation not permitted : bingo, ta có thể thực hiện lệnh này để mở port, cho phép ip kết nối vào webserver đọc flag.

Ta thử sudo iptables -L => cho phép chạy lệnh, vậy ta có quyền sudo với iptabtles.

Ta xem public ip của mình trong trang myip. sau đó chạy lệnh:
Sudo iptables -I INPUT 1 -s myip -j ACCECPT

Bingo. vào web và kiểm tra lại, flag sẽ hiện ra.

Severus

[Whitehat Grindprix 2014] Forensic 300

Hi bà con,

Forensic 300 là một bài về phân tích bản backup của android.

Trước tiên ta dùng binwalk để xem các header file => Có ubicom và Troc filesystem là lạ, tuy nhiên đây chỉ là backup của firmware android. Ta có thể bỏ qua.

Việc đầu tiên là cần phải extract được tất cả các file trong backup, ta sử dụng công cụ Android backup extractor. Các bạn có thể tải tại địa chỉ sau:
http://sourceforge.net/projects/adbextractor/

Công cụ trên sẽ chuyển đổi từ định dạng backup của android sang định dạng nén tar. Sau đó ta dùng lệnh để extract ra toàn bộ các file:

tar xvf output_extract

Ta tiến hành tìm từ khóa whithat như sau:
grep -i whitehat . -r

Không có output không vui rồi, sau đó ta tìm xem trong các thư mục 0 sẽ có gì, thư mục apps không nên chứa flag vì đó là thư mục hệ thống, chứa các file cài đặt, vậy flag phải được giấu trong các định dạng nào đó như hình ảnh, db file.

Sau khi tìm kiếm các hình ảnh không khả thi vì sử dụng strings, outgess,... ta xem đến các file db,

ls -R | grep db

Ta thu được các file db trong đó có file msgstore.db.crypt7 của Whatapps, các file db khác có định dạng sqlite3 có thể đọc bằng lệnh strings, do grep không cho ra kết quả có thể bỏ qua.

Ta giả thiết rằng flag được giấu ở đây, việc cần làm là giải mã file trên.

Sau khi google ta phát hiện ra link sau:
http://stackoverflow.com/questions/24475815/how-to-convert-msgstore-db-crypt7-to-msgstore-db-from-whatsapp-in-android

Lúc này ta áp dụng các lệnh để giải mã,

hexdump -e '2/1 "%02x"' key | cut -b 253-316 > aes.txt
hexdump -e '2/1 "%02x"' key | cut -b 221-252 > iv.txt


dd if=msgstore.db.crypt7 of=msgstore.db.crypt7.nohdr ibs=67 skip=1

openssl enc -aes-256-cbc -d -nosalt -nopad -bufsize 16384 -in msgstore.db.crypt7.nohdr -K $(cat aes.txt) -iv $(cat iv.txt) > msgstore.db

Strings msgstore.db

Bingo ta đã tìm ra flag.
Severus


Thứ Hai, 29 tháng 9, 2014

TRIVIAL - CSAW 2014

TRIVIAL

Đây là 3 bài trivial mình đã giải trong kỳ CTF này và cũng muốn chia sẽ cách tư duy để có thể tìm ra. ( Mặc dù đa số ai cũng giải được rồi )

  1. This is a type of informal security meetup that has been gaining popularity in different cities over the last several years (citysec)          
  2. This is what geohot and other members of the CTF community are calling live streamed CTF competitions where spectators can watch competitors screens as they solve challenges.   (livectf)
  3. This is the Twitter handle of the student who runs CSAW CTF. (@poopsec)

Bài 1:
Theo như đề bài mình hiểu đây là 1 loại "informal security meetup" do đó mình search cụm từ này và ra 1 đống cái meetup như NYSEC, SAFBSec, …

Nhung submit các kiểu thì mấy cái đó cũng đâu đúng đâu.
Từ đó mình phải tìm keyword khác để search. Từ đó mình chú ý đển cụm "popularity in different cities" vì mình chưa sử dụng nó và nó khá quan trọng vì theo mình hiểu là nhiều thành phố sử dụng nó.
Từ đó mình có cụm keyword là "informal security meetup popularity in different cities"
Mình search key word  như trên và tìm được citysec và thử submit và thành công ( vì thấy có chữ city rất khả nghi )

Bài 2:
Lúc mình làm bài này mình ko hiểu geohot là gì ( do én lịt ngu ngu nữa nên hiểu sai ý mà mình sẽ ko để cập cái vụ đó :v )
Nói chung sau 1 hồi biết geohot là 1 siêu nhân hacker ( đại loại thế ) mình mới coi kỹ và hiểu nội dung là: geohot và các ng chơi CTF khác giao tiếp với nhau qua 1 kênh nào như stream ( do mình mỗi tối hay coi chơi dota2 nên mình cũng khá rành vụ này. Từ đó mình nghĩ ngay đến 1 kênh stream trên Twitch )
Keyword: "geohot and players ctf communica live stream"
và ta ra kết quả: livectf.

Bài 3:
Bài này mình bay vào làm liền lun. Do nó nói khá rõ là 1 sv ( student ) ng tổ chức CSAW CTF mình vào ngay cái judges chỗ menu để xem thông tin ng tổ chức và thấy có Twitter và mình bấm vào xem thôi và submit thử cái URL của Twitter nhưng không được :(
Cái mình nghĩ đến cái @poopsec thử xem và thế là thành công :P 

Kinh nghiệm rút được là nên rút trích những keyword theo mình là quan trọng và chú ý search đầy đủ thông tin đừng nên bỏ sót 1 manh mối nào cả :3 vì tất cả cho là đủ dùng :D

Thứ Hai, 15 tháng 9, 2014

Writeup bài immiscible NCN quals 2014


Mở bằng Winhex ta thấy magic number là 1F 8B
OK Vậy nó là file Gzip. Sử dụng 7zip để extract file ta được file ctf.py


Mở file ctf.py ra đọc thì thấy cú pháp tùm lum. Có dòng quan trọng là # -*- coding: rot13 -*-
Vậy ta sử dụng Rot13 để lấy plain text


#!/hfe/ova/rai clguba
# -*- pbqvat: ebg13 -*-
import os
import marshal
import new


global flag


def f():
global flag
flag = "Nope!".decode("ebg13")


bytecode = """
YwAAAAAAAAAAAwAAAEAAAABzlwAAAGQAAGQBAGwAAG0BAFoBAAFkAABkAgBsAgBtAwBaAwABZQMA
ZAMAZAQAgwIAZAUAawIAcpMAZAYAYQQAdAQAZAcAN2EEAHQEAGQIADdhBAB0BABkCQA3YQQAdAQA
agUAZAoAZAQAgwIAYQQAdAQAagYAZAsAgwEAYQQAZAwAZQEAdAQAgwEAagcAgwAAF2EEAG4AAGQN
AFMoDgAAAGn/////KAEAAABzBAAAAHNoYTEoAQAAAHMGAAAAZ2V0ZW52cwsAAABOT19DT05fTkFN
RXMAAAAAcwEAAABZczEAAAAgNTcgNjggNjEgNzQgMjAgNjkgNzMgMjAgNzQgNjggNjUgMjAgNjEg
NjkgNzIgMmQgczEAAAAgNzMgNzAgNjUgNjUgNjQgMjAgNzYgNjUgNmMgNmYgNjMgNjkgNzQgNzkg
MjAgNmYgczEAAAAgNjYgMjAgNjEgNmUgMjAgNzUgNmUgNmMgNjEgNjQgNjUgNmUgMjAgNzMgNzcg
NjEgcxAAAAAgNmMgNmMgNmYgNzcgM2YgcwEAAAAgcwMAAABoZXhzAwAAAE5DTk4oCAAAAHMHAAAA
aGFzaGxpYnMEAAAAc2hhMXMCAAAAb3NzBgAAAGdldGVudnMEAAAAZmxhZ3MHAAAAcmVwbGFjZXMG
AAAAZGVjb2RlcwkAAABoZXhkaWdlc3QoAAAAACgAAAAAKAAAAABzCAAAADxzdHJpbmc+cwgAAAA8
bW9kdWxlPgIAAABzEgAAABABEAEVAgYBCgEKAQoBEgEPAQ==
"""


if __name__ != "__main__".decode("ebg13"):
codeobj = marshal.loads(bytecode.decode("ebg13"))
f = new.function(codeobj, globals(), "f".decode("ebg13"), None, None)


f()


print flag


Chỉnh sửa lại 1 chút:
Ở bytecode ta nhận ra nó là giá trị base64 encode
Vì vậy ở codeobj ta sửa ebg13 thành base64
Ở main không quan trọng ta bỏ luôn dòng này
hàm f cũng không có gì
Vậy flag sẽ nằm ở bytecode. Bytecode được load vào codeobj thành object
Ta Disassemble object này ra: (import dis và sử dụng dis.dis(codeobj)




E:\CTF\Noconname\immiscible~>ctf.py
2 0 LOAD_CONST 0 (-1)
3 LOAD_CONST 1 (('sha1',))
6 IMPORT_NAME 0 (hashlib)
9 IMPORT_FROM 1 (sha1)
12 STORE_NAME 1 (sha1)
15 POP_TOP


3 16 LOAD_CONST 0 (-1)
19 LOAD_CONST 2 (('getenv',))
22 IMPORT_NAME 2 (os)
25 IMPORT_FROM 3 (getenv)
28 STORE_NAME 3 (getenv)
31 POP_TOP


4 32 LOAD_NAME 3 (getenv)
35 LOAD_CONST 3 ('NO_CON_NAME')
38 LOAD_CONST 4 ('')
41 CALL_FUNCTION 2
44 LOAD_CONST 5 ('Y')
47 COMPARE_OP 2 (==)
50 POP_JUMP_IF_FALSE 147


6 53 LOAD_CONST 6 (' 57 68 61 74 20 69 73 20 74 68 65 20 61 69 72 2d ')
56 STORE_GLOBAL 4 (flag)


7 59 LOAD_GLOBAL 4 (flag)
62 LOAD_CONST 7 (' 73 70 65 65 64 20 76 65 6c 6f 63 69 74 79 20 6f ')
65 INPLACE_ADD
66 STORE_GLOBAL 4 (flag)


8 69 LOAD_GLOBAL 4 (flag)
72 LOAD_CONST 8 (' 66 20 61 6e 20 75 6e 6c 61 64 65 6e 20 73 77 61 ')
75 INPLACE_ADD
76 STORE_GLOBAL 4 (flag)


9 79 LOAD_GLOBAL 4 (flag)
82 LOAD_CONST 9 (' 6c 6c 6f 77 3f ')
85 INPLACE_ADD
86 STORE_GLOBAL 4 (flag)


10 89 LOAD_GLOBAL 4 (flag)
92 LOAD_ATTR 5 (replace)
95 LOAD_CONST 10 (' ')
98 LOAD_CONST 4 ('')
101 CALL_FUNCTION 2
104 STORE_GLOBAL 4 (flag)


11 107 LOAD_GLOBAL 4 (flag)
110 LOAD_ATTR 6 (decode)
113 LOAD_CONST 11 ('hex')
116 CALL_FUNCTION 1
119 STORE_GLOBAL 4 (flag)


12 122 LOAD_CONST 12 ('NCN')
125 LOAD_NAME 1 (sha1)
128 LOAD_GLOBAL 4 (flag)
131 CALL_FUNCTION 1
134 LOAD_ATTR 7 (hexdigest)
137 CALL_FUNCTION 0
140 BINARY_ADD
141 STORE_GLOBAL 4 (flag)
144 JUMP_FORWARD 0 (to 147)
>> 147 LOAD_CONST 13 (None)
150 RETURN_VALUE
None


Như vậy flag sau khi gán và INPLACE_ADD ta có: 57 68 61 74 20 69 73 20 74 68 65 20 61 69 72 2d 73 70 65 65 64 20 76 65 6c 6f 63 69 74 79 20 6f 66 20 61 6e 20 75 6e 6c 61 64 65 6e 20 73 77 616c 6c 6f 77 3f
Tiếp theo flag sẽ được replace các kí tự trắng. Và decode hex ra.
Flag = ‘What is the air-speed velocity of an unladen swallow?’
Tiếp theo: ta có flag = ‘NCN’ + sha1(flag) = NCN6ceeeff26e72a40b71e6029a7149ad0626fcf310
Submit thôi :D


Phiêu Lãng – KQCQ