Tổng số lượt xem trang

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