# Cryptography
## interencdec

Chúng ta sẽ tải file trên về xem thử.
Trong file chỉ có một dòng kí tự được mã hóa.

Đây là kiểu mã hóa base64. Hãy dùng tool trực tuyến để giải mã.

Ta lại nhận đươc chuỗi base64 tiếp, tiếp tục decode.
Ta thu được chuỗi sau:
**wpjvJAM{jhlzhy_k3jy9wa3k_i204hkj6}**
Nhìn vào thấy giống format nên ta sẽ dùng rot để tìm flag:

Ta sẽ thu được flag là: **picoCTF{caesar_d3cr9pt3d_b204adc6}**
## Mod26

Chuỗi kí tự nhìn giống như bài trên đề còn nhắc tới rot13 vậy chúng ta sẽ dùng decode rot 13 để tìm flag:

flag là: **picoCTF{next_time_I'll_try_2_rounds_of_rot13_aFxtzQWR}**
## The numbers

Ta thu được tấm hình sau:

**16 9 3 15 3 20 6 { 20 8 5 14 21 13 2 5 18 19 13 1 19 15 14}**
Theo format lần lượt là picoCTF{}
Ta thấy kí tự 16 tương đương với p. xét theo bảng chữ cái alphabet ta có thể thấy nó trùng nhau
vậy nên ta sẽ giải theo hướng này

Ta sẽ thu được cụm bên trong là:
**THENUMBERSMASON**
## 13

Bài này giống bên trên. Làm tương tự ta được flag:

## Rotation

Trong file đó ta được:

Nó giống bài đầu tiên, làm tương tự:

Ta sẽ có flag là: **picoCTF{r0tat1on_d3crypt3d_4c71f5b0}**
## hide to see

Đây là file ảnh:

Nhìn có vẻ đây là kiểu mã hóa atbash
Dựa vào hint, chúng ta sẽ tìm cách giải nén một tấm ảnh
Dùng linux:

Ta thu được chuỗi:
**krxlXGU{zgyzhs_xizxp_zx751vx6}**
Đem đi giải mã atbash ta thu được:

Flag: **picoCTF{atbash_crack_ac751ec6}**
## ReadMyCert

Với bài này chúng ta phải dùng đến linux

Tải file về và xem bên trong nó có gì
Bây giờ, hãy thu thập tất cả thông tin chi tiết của CSR bằng cách sử dụng lệnh sau:
`openssl req -in readmycert.csr -text -noout `
Lệnh này sẽ hiển thị các chi tiết của CSR, bao gồm subject (chủ thể), organization (tổ chức), common name (tên chung), và các thông tin liên quan khác.
Hãy tìm hiểu từng phần trong câu lệnh trên:
**openssl:** Gọi chương trình OpenSSL, một công cụ dùng để quản lý chứng chỉ và mã hóa.
**req:** Chỉ định rằng ta đang làm việc với một yêu cầu chứng chỉ (Certificate Signing Request - CSR).
**-in readmycert.csr:** Xác định tệp đầu vào là readmycert.csr, tức là tệp chứa CSR mà bạn muốn kiểm tra thông tin.
**-text:** Hiển thị nội dung chi tiết của CSR dưới dạng văn bản dễ đọc, bao gồm các thông tin như subject (chủ thể), common name (tên chung), public key, các extension (mở rộng) nếu có, v.v.
**-noout:** Chỉ hiển thị thông tin CSR mà không xuất ra bản mã hóa của CSR.
Ta sẽ thu được như sau:

Có thể thấy ở dòng Subject:, ta thấy được flag của đề bài là:
**picoCTF{read_mycert_5aeb0d4f}**
## Ceasar

Hãy tải file chall về xem thử:

Ta thấy flag là
**picoCTF{gvswwmrkxlivyfmgsrhnrisegl}**
Thử submit xem có đúng không.

Vậy đây là flag sai. Nhìn kỹ lại, kết hợp mô tả của bài, ta hãy thử giải mã lại cụm trong ngoặc bằng mật mã caesar.

Ta thấy một dòng khá là có nghĩa:
**crossingtherubicondjneoach**
Hãy thử nộp xem có đúng flag không.
Sau khi nộp thì nó đúng là flag bài yêu cầu.
## New Caesar

Dưới đây là mã nguồn của file đề cho
```python
import string
LOWERCASE_OFFSET = ord("a")
ALPHABET = string.ascii_lowercase[:16]
def b16_encode(plain):
enc = ""
for c in plain:
binary = "{0:08b}".format(ord(c))
enc += ALPHABET[int(binary[:4], 2)]
enc += ALPHABET[int(binary[4:], 2)]
return enc
def shift(c, k):
t1 = ord(c) - LOWERCASE_OFFSET
t2 = ord(k) - LOWERCASE_OFFSET
return ALPHABET[(t1 + t2) % len(ALPHABET)]
flag = "redacted"
key = "redacted"
assert all([k in ALPHABET for k in key])
assert len(key) == 1
b16 = b16_encode(flag)
enc = ""
for i, c in enumerate(b16):
enc += shift(c, key[i % len(key)])
print(enc)
```
Đọc qua ta thấy đây là một mã caesar nhưng được custom lại bằng cách lấy 16 chữ cái đầu tiên của bảng chữ cái alphabet (a-p)
Sau đó chuyển từng kí tự flag thành mã nhị phân 8 bit và chia thành 2 phần 4 bit. Từ đó chuyển từng phần 4 bit về kí tự trong bảng mã 16 kí tự ban đầu.
Nó dịch chuyển kí tự theo khóa bẳng cách cộng giá trị của ký tự với giá trị của khóa.
Như vậy chúng ta chỉ cần làm ngược lại so với cách mã hóa thì sẽ thu được flag.
Code dịch ngược mã nguồn:
```python
# import string
import string
# constants
LOWERCASE_OFFSET = ord("a")
ALPHABET = string.ascii_lowercase[:16]
# decode function
def b16_decode(cipher):
dec = ""
# loop through the cipher 2 characters at a time
for c in range(0, len(cipher), 2):
# turn the two characters into one binary string
b = ""
b += "{0:04b}".format(ALPHABET.index(cipher[c]))
b += "{0:04b}".format(ALPHABET.index(cipher[c + 1]))
# turn the binary string to a character and add
dec += chr(int(b, 2))
# return
return dec
# unshift the text
def unshift(c, k):
t1 = ord(c) - LOWERCASE_OFFSET
t2 = ord(k) - LOWERCASE_OFFSET
return ALPHABET[(t1 - t2) % len(ALPHABET)]
# encrypted flag
enc = "dcebcmebecamcmanaedbacdaanafagapdaaoabaaafdbapdpaaapadanandcafaadbdaapdpandcac"
# loop through all possible keys
for key in ALPHABET:
# initialize string
s = ""
# loop through the encrypted text
for i, c in enumerate(enc):
# unshift it based on key
s += unshift(c, key[i % len(key)])
# decode
s = b16_decode(s)
# print key
print(s)
```
Ta thu được một số flag như sau:
```
2
!001ûüó ñ/üôõþ/ýðÿô þ.ÿþòüü!ôÿ /þ.ü!ñ
/
/ ê
ëâàëãäíìïîãíîíáëëãîíëà
ÜÚß
ÈèÉÀýÎüÉÁÂËüÊÍÌÁýËûÌËÏÉÉþÁÌýüËûÉþÎ
íü×üý·×¸¿ì½ë¸°±ºë¹¼»°ìºê»º¾¸¸í°»ìëºê¸í½
ÜëÆëì¦Æ§®Û¬Ú§¯ ©Ú¨«ª¯Û©Ùª©§§Ü¯ªÛک٧ܬ
ËÚµÚÛµÊÉÉÊÈËÊÉÈË
ºÉ¤Éʤ
¹¸
¸¹·
º¹¸·
º
©¸¸¹st{¨y§t|}v§uxw|¨v¦wvztt©|w¨§v¦t©y
§§¨bcjhckledgfkefeicckfech
qQqRYW
RZ[T
SVUZTUTXRRZU
TRW
v
`
@`AHuFtAIJCtBEDIuCsDCGAAvIDutCsAvF
et_tu?_07d5c0892c1438d2b32600e83dc2b0e5
TcNcd.N/&S$R/'(!R #"'S!Q"!%//T'"SR!Q/T$
CR=RS=BAAB@CBA@C
```
Trong đám này thì ta chỉ thấy một chuỗi khả nghi nhất
**et_tu?_07d5c0892c1438d2b32600e83dc2b0e5**
Thử thì đây đúng là flag.
**picoCTF{et_tu?_07d5c0892c1438d2b32600e83dc2b0e5}**
# Forensic
## Verify

Ở đây chúng ta sẽ làm những thứ như sau:
```
ls
```
Nó sẽ hiện ra 3 thư mục sau:

Chúng ta sẽ thử xem bên trong từng file có những gì bằng lệnh
```
cat <ten file>
```
```
ctf-player@pico-chall$ cat checksum.txt
b09c99c555e2b39a7e97849181e8996bc6a62501f0149c32447d8e65e205d6d2
```
```
ctf-player@pico-chall$ cat decrypt.sh
#!/bin/bash
# Check if the user provided a file name as an argument
if [ $# -eq 0 ]; then
echo "Expected usage: decrypt.sh <filename>"
exit 1
fi
# Store the provided filename in a variable
file_name="$1"
# Check if the provided argument is a file and not a folder
if [ ! -f "/home/ctf-player/drop-in/$file_name" ]; then
echo "Error: '$file_name' is not a valid file. Look inside the 'files' folder with 'ls -R'!"
exit 1
fi
# If there's an error reading the file, print an error message
if ! openssl enc -d -aes-256-cbc -pbkdf2 -iter 100000 -salt -in "/home/ctf-player/drop-in/$file_name" -k picoCTF; then
echo "Error: Failed to decrypt '$file_name'. This flag is fake! Keep looking!"
fi
```
Riêng mục files thì nó chính là thư mục nên không sử dụng cat được, chúng ta sẽ xem bên trong thư mục đó có gì bằng câu lệnh **ls**
```
ctf-player@pico-chall$ ls files
0QFPjDGl 2pIUNmB1 4l0tWwNc 8KKJnhNd 9sJDOYFY D5EzyM4s FCJb9D8b HlXjxzfY L06xBBN8 Nel9Qkh9 Psk7CJHK SIFatJfR UujEEh69 XQmQCztH cBV6POlr hB16cKX4 kgbulnT1 n61Ajy0l p9czQWyi u6AnP5n8 w17zkUuj yqCsXOqL
0wKPM7Vk 2zYguKpI 5Dpo5Lpk 8XAFnxGx 9wIEX6Ap D7AhYHSs FVtBZjMA Iv7SD7gz Lomzo8KF NqHkUxDY PuKmA1eP SVB3p5ql UzINJ2WT XmhfK5Aq cLQTUGHU hEGhq5DP kqKs9dUN nB8BgvEZ pZmUSlts u8hC52SO wBzvlLFE z28RdHqr
10tptfxh 34fINKgc 5b3OmDaM 8mDcrT5i AW7wekIn DduIkX8T FomVLBE8 IvHedMU7 LpfjpjFP NvZsOWbG Q99Jg4Jp SeCAw3kn V3VqDddi Y08kAtsE cWmXM172 hL8N2SgO kzYNVanR nEgEYBGO pmvuhDPp uEMcyj1c wIqKXeki zIiqnki2
119zBIIk 3AGK4MB5 5gbVyEtu 8vIsQrBk AeWfGlLB DhaIB5aS FsqsVy3q J2C3jKRR LrwcukXM OAqU3ZEC QDL15MCI T9fmDPnm V63YcFAp YObSF7u7 cakrE5Le hOTod2wC l1I9SlrE nU1oL2aA qLRvinCQ uPw05ctW wRApz452 zQ8S4zxx
19TB8pZ3 3MI3phiM 5oIfd9IJ 8vPNDGew ApzPkEpG E5Y6zplS G7Jl9HbP J2taODo4 Lwf6P5Kj OYPSxPCM QHLGtwDe TE8FU1FG VDQTXMlu ZLIAqMxY cf4lMuNt hv37OPgb lJ0BQ2Wq nYYUwHcx r8rSf0xW uS8ThjW5 wlgmaCgQ zTraYrZH
1OUKnRjk 3VvoBZaT 60q4LDsH 8wqM09n0 AxDAiV2s EMW8xsyg G8ZDeoVW J5TeIktX Lz03kcSk OcFa3rqO QUSFNv4Q TPG0sahr VEPlKaaH ZT5qZdGA dDawndt3 hvIjwsas lLGVJakI nYqk1CS8 ro6pmtK2 uXM7xQLM wuh7Cgbl zVojuqQn
1P1L0ygq 3f9IBKbV 65hhdaTN 96lBoWaU BPRXW4rK EUrDQxDU GCr8IGJ3 JQE8B4Up MPLtzWsV OhmnsfSS QVvIXef5 TY6AsyPx VYprzg0m ZvqyoPUN ddo7McIO izhGFAI2 lNCXHhQD ngGtZvlW rprBM8iU uY6oCo6R x5pSIkgV zeT6ehJv
1WcKHuTD 3uK74LSS 6HSJkEvn 98tbiuSQ BS2al2Fb EZUfAdt0 GEcq4lun Jq1cYZ8g MQCiGgtX OkPLXtNq QZ5JwuqX TaBG0B2a Voj9jP6c aWo9YugC ewYxe6yI j1UdH57T lP1vtSZx o5TDRZjh rrNGwJSR ucYToezK xTT3GfqC
1ylhS7Z6 451fd69b 6SsAocNZ 9Lg5sIdT BS3exq10 EwszjufH GSeAwi8t JvzvG7Vc MTVTG4gg OonPniJj R1hA1txm TcrKRBQh VpCCDBvS agEHnOGT fAijPDvG jHDEMmlj la1Cjzyx oCABmA5i sNGrPNW9 uhL7kMRa xkDmEj9c
1zs9Zs50 4AVsbijj 6kiru4ve 9LyIv77J Bm8zsl99 Exys8oSP GYNiwrKN JwS9q7vh MjMbgBEF PEZRi3Qx R7FAFiUX Tmbnqy9u W6HJyLNP aoamig9W flHrhjvC jIKe6Zfx ld5v1JVF oLkVCEIL srFcLJ99 vCDimHt8 yCAhbvDl
295tU6Ga 4GLVcGAT 7JZPNEfJ 9WLdePls COSVSvXt EyBcl2bB GaLnr2As KCldRqWv N7Su3TaZ PTIOjUAO R9PUBlcL Tz0v6vYA W6injFLn bjT6NSbK fmPAeitt jmfr71Fv ml8BheQF ojutsLQ9 sx2fH87w vIvKsEXP yNyu2uzv
2TcWPeh8 4J715L0D 7jb2Imqm 9XyOtfBh CUpZfKDA FAUDGtqU H61uqmwe KWhAd048 NP3YFw2T PdjdvRzf RMO0PzgH UB35i7KM Wraq7ZVn bpIGPWgD gGs1IK8o k41e31GY mpB3SJWA otrltBmC tHu44y2r vg9T5LbS yQ6gSAs0
2VOltutT 4KcKU6Xa 7ndywIni 9b7gQszB CZAKNO37 FC37odB0 HBsJejHU KYU5dJBV NPoWK5Mi PerdXdmX S0ZumPXR UeppfEJC XNYpvkxx c7U1KrcA gKBJEwGs kHJFs8HF mydpiMHQ p44Dq1SO tNRgqUFc viE4fMXT yao0qUIY
2p5KxTdA 4S7OA4S1 8EQoMwiP 9d8nFwcg CcSCdqM1 FCHv0zyb HNkAl0Wv KuP4CIgp Nc49l2EU PrXtVj8G SC2gThOs UnO02Frc XP1tFwB7 cAyG03oe gnoyjDG7 kUvLqJ4G n1vcSeUf p4ngbycR tyOIINiW vu8ZQzXa yokR4dAH
```
Hướng đi của chúng ta bây giờ là check từng file trong thư mục files sao cho mã sha256 của nó trùng thì chính là file cần tìm
Có mã hash ở trên thì ta sẽ dùng câu lệnh như sau:
`sha256sum file/* | grep b09c99c555e2b39a7e97849181e8996bc6a62501f0149c32447d8e65e205d6d2`
Với **sha256sum file/*** nó sẽ chuyển đổi các file về mã sha256
| dùng để chuyển đầu ra của câu lệnh trước thành input cho dữ liệu của câu lệnh phía sau
grep .... là so sánh mã sha256 với giá trị trước đó xem cái nào trùng.
Sau khi chạy lệnh trên thì nó sẽ in ra màn hình:
```
b09c99c555e2b39a7e97849181e8996bc6a62501f0149c32447d8e65e205d6d2 files/451fd69b
```
Ta thu được tên file là **451fd69b**
bây giờ bằng gợi ý của đề bài, ta nhập câu lệnh
```
ctf-player@pico-chall$ ./decrypt.sh files/451fd69b
```
ta thu được flag là:
**picoCTF{trust_but_verify_451fd69b}**

## Scan Surprise

Làm theo từng bước của đề bài, ta thu được một cái mã QR.

Hãy quét thử nó xem ra gì:

Vậy là ta đã có flag: **picoCTF{p33k_@_b00_3f7cf1ae}**
## Secret of the Polyglot

Hãy thử tải file đó về:
Trong file đó ta thu được nửa flag:

Hint của bài kêu thử mở bằng một cách khác, hãy thử xem cta có thể làm gì
Thử xem cat có được gì không

ta hãy thử chuyển nó sang file png xem có gì xảy ra không. tôi đã tìm được cách chuyển nó, hãy xem thử nó có hoạt động không


Ta xem thử ảnh nó được không:

Dưới đây là những câu lệnh:
```bash
convert flag2of2-final.pdf flag2of2-final.png
//.pdf là file đầu vào, .png là file đầu ra.
open flag2of2-final.png
//mở file đó lên
```
Vậy là ta đã thu được nửa đầu của flag. Ghép chúng lại ta sẽ thu được:
**picoCTF{f1u3n7_1n_pn9_&_pdf_724b1287}**
## CanYouSee

Trong file đó chỉ có một tấm ảnh

Giờ chúng ta sẽ giải nén nó và sử dụng mấy câu lệnh thông thường như cat, string hay exiftool để kiểm tra thông tin.

Ở dòng attribution url ta thấy có đoạn nó giống như mã base64. Hãy thử decode nó:

Vậy ta đã thu được flag của bài này là:
```
picoCTF{ME74D47A_HIDD3N_a6df8db8}
```
## Information

hãy tải bức ảnh xuống r làm như trên xem ta thu được gì:

Lúc này ở phần license ta thấy chuỗi ký tự giống base64. Hãy decode nó:

Vậy flag chính là: **picoCTF{the_m3tadata_1s_modified}**
## Glory of the garden

Đề có nhắc tới hex editor, vậy chúng ta sẽ theo đó làm
sử dụng câu lệnh:
```
xxd <tên file> // ở đây là xxd garden.jpg với garden.jpg là file đề cho
```
Kéo xuống dưới ta thu được:

**Here is a flag "picoCTF{more_than_m33ts_the_3y3eBdBd2cc}"**
0000 45 00 00 37 00 01 00 00 40 11 7c b3 7f 00 00 01 E..7....@.|.....
0010 7f 00 00 01 00 35 00 35 00 23 2e cd 69 42 77 61 .....5.5.#..iBwaWNvQ1RGe1Flag is close=
## PcapPoisoning

Bên trong file này là các gói tin của wireshark

Xem ra có khá nhiều dữ liệu trong đây, chúng ta sẽ thử gõ vào thanh tìm kiếm xem
```
tcp contains "pico" rồi nhấn enter
```
Và may là chúng ta đã tìm thấy flag trong đống dữ liệu đó

Có một cách làm khác nhanh hơn, đó là

Vậy cuối cùng flag ta thu được sẽ là:
`picoCTF{P64P_4N4L7S1S_SU55355FUL_5b6a6061}`
## Lookey here

Đây là file chall bài cho:

Ta có thể thấy đây là một đoạn văn bản rất dài, bạn có thể đọc để kiếm flag ở trong đó, nhưng tôi sẽ làm một cách nhanh hơn
Gõ câu lệnh sau:
```
strings anthem.flag.txt| grep picoCTF
```

Vậy flag ta thu được là:
```
picoCTF{gr3p_15_@w3s0m3_4c479940}
```
## Hide me

Sau khi thử hết mọi thứ để kiểm tra dữ liệu bị giấu trong tấm ảnh thì tôi không thấy gì cả

Chợt tôi nhận ra có thể giấu dữ liệu trong một bức ảnh trong file ẩn. Vì thế nên tôi sẽ thử binwalk xem ra file ẩn nào không.

Lệnh đầu để check, lệnh thứ 2 để tải tất cả file ẩn đó về
Trong file đó tôi tìm thấy một mục tên secret

Click vào đó tôi thấy một tấm ảnh bên trong nó là flag

Vậy flag ta thu được là:
```
picoCTF{Hiddinng_An_imag3_within_@n_ima9e_85e04ab8}
```
## Sleuthkit Intro

Sau khi file được tải về thì ta thấy nó có chấm đuôi gz đằng sau nữa
Vậy nên ta phải dùng lệnh sau:
```
gunzip disk.img.gz
```
Lúc này file sẽ được giải nén và ta sẽ sử dụng câu lệnh bài cho để xem thông tin ổ đĩa:
```
mmls disk.img
```
Dưới đây là kết quả:

Sau khi xem thông tin ổ đĩa, hãy connect tới server và nhập giá trị của nó. Khi nhập đúng thì server sẽ trả về giá trị của flag.
Và flag ta thu được sẽ là:
`picoCTF{mm15_f7w!}`
## Packets Primer

Sau khi tải file và mở file đó lên, ta sẽ vào phần mềm wireshark.
Bấm từng packet field xem thông tin và trong số đó tôi đã thấy được dòng có chứa flag.

Ta có thể thấy được flag chính là:
```
picoCTF{p4ck37_5h4rk_01b0a0d6}
```
## Redaction gone wrong

File đề cho là một file pdf đã bị bôi đen đi một số chỗ(trong đó có thể có flag)

Nhiệm vụ của ta bây giờ là phải tìm cách đọc được đoạn bị bôi đen đó.
Sau khi tìm kiếm trên gg thì tôi biết được một cách là chuyển nó về text để có thể đọc được
Các bạn gõ lệnh sau:
```
pdftotext Financial_Report_for_ABC_Labs.pdf text1.txt
// với pdftotext là câu lệnh để chuyển định dạng file
//Financial... .pdf là file đầu vào
//text1.txt là nơi lưu text vào
```
Dưới đây là cách làm:

Sau khi gõ lệnh open text1.txt thì nó sẽ hiện cho ta thấy được nội dung được lưu vào đó

Vậy tôi đã đúng, trong phần bị bôi đen có flag và nó là:
```
picoCTF{C4n_Y0u_S33_m3_fully}
```
## Mob psycho

File chall đề cho cần phải giải nén. Để giải nén thì ta chỉ cần thực hiện lệnh sau:
```
unzip <tên file>
```
Sau khi giải nén thì ta thu được 2 thư mục có nhiều thư mục con bên trong đó là META-INF và res

Tôi nghĩ bên trong folder đó có thể có flag
vậy nên tôi sẽ thử tìm kiếm trong đống đó.
Nhập dòng lệnh sau:
```
find | gep "flag"
```

Ngoài những file flag của các chall trước ra thì ta còn tìm thấy một dòng có chứa folder res
Chúng ta sẽ xem bên trong đó có gì

Dòng này nhìn như đã bị mã hóa bằng hexandecimal, chúng ta sẽ giải mã chúng bằng cách sử dụng các công cụ trên internet

Vậy đó chính là flag
Và flag ta thu được là:
```
picoCTF{ax8mC0RU6ve_NX85l4ax8mCl_85dbd215}
```
## MSB

Đây là bức ảnh

Nó bị lỗi phần trên không thể đọc được
Chúng ta có thể sử dụng công cụ stegsolve để kiểm tra xem bên trong ảnh có gì bằng cách phân tích các bit RGB
Cách cài đặt như link github dưới đây
```
https://github.com/zardus/ctf-tools/blob/master/stegsolve/install
```
Để mở cửa sổ tool, di chuyển tới thư mục có chứa tool đó rồi nhập lệnh: `java -jar stegsolve.jar`

Chọn data extract, lúc này sẽ mở ra cửa sổ cho bạn chọn

Bấm những mục như tôi, xong bấm review thì sẽ hiện ra một bản xem trước, ta có thể thấy bên cạnh là những từ có thể dọc được, vì vậy tôi sẽ lưu thành một file text để tìm flag trong đó dễ hơn.

Xem ra flag này chưa đủ rồi, chúng ta sẽ phải làm một bước nữa
```
cat text2 | less
/pico
```
Lúc này terminal sẽ đưa bạn đến mục có chứa dòng pico đó

Vậy flag cuối cùng ta thu được là:
```
picoCTF{15_y0ur_que57_qu1x071c_0r_h3r01c_572ad5fe}
```
## Find and open

Ta sẽ vào trong file trace trước để tìm thông tin
Ở packet thứ 48 tôi thấy có gì đó bất thường

Thử xem cái data của nó ra gì, nhìn giống mã hex

Nó ra kết quả như một mã base64
Tiếp tục decode

Thử xem cái **picoCTF{R34DING_LOKd_** có phải key để unzip file kia không

Vậy ta đã đúng, thử xem bên trong nó có gì

Vậy flag của bài này là:
```
picoCTF{R34DING_LOKd_fil56_succ3ss_cbf2ebf6}
```
## St3g0

Đây là bức ảnh của đề

Giờ chúng ta sẽ dùng những công cụ đã biết để check xem flag có không

Các lệnh thông thường đều không có kết quả, mà còn một tool chúng ta chưa thử, đó là zsteg

Coi bộ chúng ta đã có flag, nhưng nếu bạn muốn biết vị trí của nó nằm ở đâu thì gõ tiếp lệnh sau
```
zsteg -a -v pico.flag.png | less
/pico
```
Lúc này nó sẽ đưa bạn đến đoạn bạn cần tìm

Như các bạn có thể thấy, và trong bài nó cũng có nói là sẽ kết thúc bằng **$st3go**
Vậy flag của chúng ta là:
```
picoCTF{7h3r3_15_n0_5p00n_a9a181eb}
```
## Enhance

Đây là ảnh của nó

Hãy thử qua các tool thường gặp:

Nó không trả về kết quả gì cả. Nhưng nhờ chatgpt tôi nhận ra

Vì theo như gpt nói thì đây là loại văn bản thuần nên ta có thể sử dụng lệnh cat
```
cat drawing.flag.svg
```
Kéo xuống dưới ta có thể thấy được flag nhưng nó không có liền mạch

Những phần tôi khoanh là những phần của flag
Vậy cuối cùng flag ta thu được là:
```
picoCTF{3nh4nc3d_d0a757bf}
```
## Matryoshka doll

Đây là ảnh của bài

Như chúng ta đã biết thì để kiểm tra file ẩn trong bức ảnh thì có thể dùng binwalk để check
Thêm vào đó với tiêu đề của bài là Matryoshka doll (hay còn gọi là Russian nesting doll) là một loại búp bê gỗ truyền thống của Nga, được làm theo kiểu xếp chồng nhau. Những chiếc búp bê này có hình dáng giống phụ nữ mặc trang phục truyền thống của Nga, và mỗi chiếc búp bê có thể chứa một hoặc nhiều búp bê nhỏ hơn bên trong, tạo thành một bộ.
Tôi nghĩ mỗi lần extract bằng binwalk thì sẽ có một file bên trong và ta sẽ phải extr nó nhiều lần thì mới thu được flag
Hướng đi đã có, giờ chúng ta bắt tay vào làm
```
──(applemeomeo㉿kali)-[~/Downloads/picoCTF]
└─$ binwalk -e dolls.jpg
/usr/lib/python3/dist-packages/binwalk/core/magic.py:431: SyntaxWarning: invalid escape sequence '\.'
self.period = re.compile("\.")
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 PNG image, 594 x 1104, 8-bit/color RGBA, non-interlaced
3226 0xC9A TIFF image data, big-endian, offset of first image directory: 8
272492 0x4286C Zip archive data, at least v2.0 to extract, compressed size: 378956, uncompressed size: 383938, name: base_images/2_c.jpg
651614 0x9F15E End of Zip archive, footer length: 22
┌──(applemeomeo㉿kali)-[~/Downloads/picoCTF/_dolls.jpg.extracted]
└─$ ls
4286C.zip base_images
┌──(applemeomeo㉿kali)-[~/Downloads/picoCTF/_dolls.jpg.extracted]
└─$ cd base_images
┌──(applemeomeo㉿kali)-[~/Downloads/picoCTF/_dolls.jpg.extracted/base_images]
└─$ ls
2_c.jpg
┌──(applemeomeo㉿kali)-[~/Downloads/picoCTF/_dolls.jpg.extracted/base_images]
└─$ binwalk -e 2_c.jpg
/usr/lib/python3/dist-packages/binwalk/core/magic.py:431: SyntaxWarning: invalid escape sequence '\.'
self.period = re.compile("\.")
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 PNG image, 526 x 1106, 8-bit/color RGBA, non-interlaced
3226 0xC9A TIFF image data, big-endian, offset of first image directory: 8
187707 0x2DD3B Zip archive data, at least v2.0 to extract, compressed size: 196043, uncompressed size: 201445, name: base_images/3_c.jpg
383805 0x5DB3D End of Zip archive, footer length: 22
383916 0x5DBAC End of Zip archive, footer length: 22
┌──(applemeomeo㉿kali)-[~/Downloads/picoCTF/_dolls.jpg.extracted/base_images]
└─$ ls
2_c.jpg _2_c.jpg.extracted
┌──(applemeomeo㉿kali)-[~/Downloads/picoCTF/_dolls.jpg.extracted/base_images]
└─$ cd _2_c.jpg.extracted
┌──(applemeomeo㉿kali)-[~/…/picoCTF/_dolls.jpg.extracted/base_images/_2_c.jpg.extracted]
└─$ ls
2DD3B.zip base_images
┌──(applemeomeo㉿kali)-[~/…/picoCTF/_dolls.jpg.extracted/base_images/_2_c.jpg.extracted]
└─$ cd base_images
┌──(applemeomeo㉿kali)-[~/…/_dolls.jpg.extracted/base_images/_2_c.jpg.extracted/base_images]
└─$ ls
3_c.jpg
┌──(applemeomeo㉿kali)-[~/…/_dolls.jpg.extracted/base_images/_2_c.jpg.extracted/base_images]
└─$ binwalk -e 3_c.jpg
/usr/lib/python3/dist-packages/binwalk/core/magic.py:431: SyntaxWarning: invalid escape sequence '\.'
self.period = re.compile("\.")
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 PNG image, 428 x 1104, 8-bit/color RGBA, non-interlaced
3226 0xC9A TIFF image data, big-endian, offset of first image directory: 8
123606 0x1E2D6 Zip archive data, at least v2.0 to extract, compressed size: 77651, uncompressed size: 79808, name: base_images/4_c.jpg
201423 0x312CF End of Zip archive, footer length: 22
┌──(applemeomeo㉿kali)-[~/…/_dolls.jpg.extracted/base_images/_2_c.jpg.extracted/base_images]
└─$ ls
3_c.jpg _3_c.jpg.extracted
┌──(applemeomeo㉿kali)-[~/…/_dolls.jpg.extracted/base_images/_2_c.jpg.extracted/base_images]
└─$ cd _3_c.jpg.extracted
┌──(applemeomeo㉿kali)-[~/…/base_images/_2_c.jpg.extracted/base_images/_3_c.jpg.extracted]
└─$ ls
1E2D6.zip base_images
┌──(applemeomeo㉿kali)-[~/…/base_images/_2_c.jpg.extracted/base_images/_3_c.jpg.extracted]
└─$ cd base_images
┌──(applemeomeo㉿kali)-[~/…/_2_c.jpg.extracted/base_images/_3_c.jpg.extracted/base_images]
└─$ ls
4_c.jpg
┌──(applemeomeo㉿kali)-[~/…/_2_c.jpg.extracted/base_images/_3_c.jpg.extracted/base_images]
└─$ binwalk -e 4_c.jpg
/usr/lib/python3/dist-packages/binwalk/core/magic.py:431: SyntaxWarning: invalid escape sequence '\.'
self.period = re.compile("\.")
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 PNG image, 320 x 768, 8-bit/color RGBA, non-interlaced
3226 0xC9A TIFF image data, big-endian, offset of first image directory: 8
79578 0x136DA Zip archive data, at least v2.0 to extract, compressed size: 64, uncompressed size: 81, name: flag.txt
79786 0x137AA End of Zip archive, footer length: 22
┌──(applemeomeo㉿kali)-[~/…/_2_c.jpg.extracted/base_images/_3_c.jpg.extracted/base_images]
└─$ ls
4_c.jpg _4_c.jpg.extracted
┌──(applemeomeo㉿kali)-[~/…/_2_c.jpg.extracted/base_images/_3_c.jpg.extracted/base_images]
└─$ cd _4_c.jpg.extracted
┌──(applemeomeo㉿kali)-[~/…/base_images/_3_c.jpg.extracted/base_images/_4_c.jpg.extracted]
└─$ ls
136DA.zip flag.txt
┌──(applemeomeo㉿kali)-[~/…/base_images/_3_c.jpg.extracted/base_images/_4_c.jpg.extracted]
└─$ cat flag.txt
picoCTF{336cf6d51c9d9774fd37196c1d7320ff}
```
Cứ làm liên tục thì cuối cùng ta sẽ thu được một file có tên là flag.txt, đọc nội dung bên trong thì ta sẽ thu được flag, đó chính là:
```
picoCTF{336cf6d51c9d9774fd37196c1d7320ff}
```
## Torrent Analyze

Hint 1: Download and open the file with a packet analyzer like Wireshark.
Hint 2: You may want to enable BitTorrent protocol (BT-DHT, etc.) on Wireshark. Analyze -> Enabled Protocols
Hint 3: Try to understand peers, leechers and seeds.
Hint 4: The file name ends with .iso
Mở file ra thì chúng ta thấy rất nhiều packet ở đây

Trước tiên đọc gợi ý của đề bài, ta hãy thử dùng bộ lọc lọc bt-dht:
Ở đây ta sẽ thấy nó có khá nhiều gói liên quan tới hash:

Cũng có thể file sẽ được chuyển thành hash nên ta sẽ lọc lại những hash có thể được
```
bt-dht contains "info_hash"
```

Sau khi tổng hợp lại thì ta có:
```
e2467cbf021192c241367b892230dc1e05c0580e
d59b1ce3bf41f1d282c1923544629062948afadd
7af6be54c2ed4dcb8d17bf599516b97bb66c0bfd
17d62de1495d4404f6fb385bdfd7ead5c897ea22
078e18df4efe53eb39d3425e91d1e9f4777d85ac
17c1e42e811a83f12c697c21bed9c72b5cb3000d
```
Trong đó e2467... xuất hiện nhiều nhất, sau khi check trên gg thì nó thuộc về file **ubuntu-19.10-desktop-amd64.iso**
vậy flag nó sẽ là:
```
picoCTF{ubuntu-19.10-desktop-amd64.iso}
```
## RED

Bài này thuộc về steganography nên ta sẽ sử dụng các công cụ phổ biến để xem.

2 tool này đều không thu được gì hiệu quả, vậy hãy thử tool của zsteg.
Cách cài đặt:
Để cài đặt **zsteg** trên Kali Linux, bạn có thể làm theo các bước sau:
1. **Cài đặt Ruby**: Zsteg yêu cầu Ruby để hoạt động. Bạn có thể cài đặt Ruby bằng lệnh:
```bash
sudo apt-get install ruby
```
2. **Cài đặt gem**: Gem là trình quản lý gói cho Ruby. Đảm bảo rằng bạn đã cài đặt gem:
```bash
sudo apt-get install rubygems
```
3. **Cài đặt zsteg**: Sử dụng gem để cài đặt zsteg:
```bash
sudo gem install zsteg
```
4. **Kiểm tra cài đặt**: Sau khi cài đặt, bạn có thể kiểm tra xem zsteg đã được cài đặt thành công chưa bằng cách chạy:
```bash
zsteg --help
```

Ta đã thấy một dòng lặp lại 1 chuỗi base64, hãy thử decode nó bằng lệnh sau:
```
echo <chuỗi b64> | base64 -d
```

Vậy ta đã thu được flag, flag của bài này là:
**picoCTF{r3d_1s_th3_ult1m4t3_cur3_f0r_54dn355_}**
## Ph4nt0m 1ntrud3r

Giờ ta sẽ xem trong đó có gì.

Nhìn chung nó chỉ khác nhau về độ dài, lần lượt xem các gói tin có độ dài 4, 8 và 12 xem chúng có gì.



Sau khi decode base64 thì ta thấy chỉ có packet có độ dài 4 và 12 là cho ra kí tự có nghĩa, vậy ta chỉ cần lọc ra những packet có độ dài này.
```
tcp.len==12 || tcp.len==4
```

Giờ ta chỉ cần sắp xếp lại theo thời gian rồi decode là xong.
Đây là chuỗi đã lọc ra:

Giờ đem đi debug là xong

**picoCTF{1t_w4snt_th4t_34sy_tbh_4r_8e10e839}**
## Flags are stepic

Khi click vào link thì nó sẽ hiện cờ của các nước, với hint là tập trung vào cờ không có thật

Kéo xuống dưới ta sẽ thấy một lá cờ không tồn tại.

Giờ hãy tải nó xuống, và dựa vào đề bài, ta sẽ sử dụng công cụ có tên là stepic
Tải xuống:

Rồi nhập lệnh

Lúc này nó sẽ decode bức ảnh rồi đưa ra message đã bị ẩn đi trong đó
## DISKO_1

Tải file về kết hợp gợi ý dùng string để tìm flag
`Nhớ được format flag là picoCTF{}`
> Vậy câu lệnh là **strings <tên file> | grep "pico"**
> Nếu file có .gz thì ta phải giải nén nó ra với câu lệnh sau
> gunzip <tên tệp.gz>

Như hình ta đã thu được flag là **picoCTF{1t5_ju5t_4_5tr1n9_be6031da}**
## DISKO_2

Đây sẽ là dạng nâng cao hơn so với phần 1. Hãy thử tải file về xem

Xem thử bên trong nó có gì
Weo, cta đã có flag nhưng mà là 1 đống flag

Có thể 1 trong số này là thật, hoặc tất cả đều fake. Lúc này ta sẽ dựa vào gợi ý của đề bài để xem nên làm gì ở bước tiếp theo
Bây giờ ta sẽ dùng lệnh mmls để đọc phân vùng của ổ đĩa, tương tự disk managerment bên windowns.
```
mmls disko-2.dd
```
nó sẽ trả về kết quả như sau:
```
Slot Start End Length Description
000: Meta 0000000000 0000000000 0000000001 Primary Table (#0)
001: ------- 0000000000 0000002047 0000002048 Unallocated
002: 000:000 0000002048 0000053247 0000051200 Linux (0x83)
003: 000:001 0000053248 0000118783 0000065536 Win95 FAT32 (0x0b)
004: ------- 0000118784 0000204799 0000086016 Unallocated
```
Cta sẽ thấy các phân vùng của ổ đĩa này, quay lại đề bài, ta thấy có dòng: ***The right one is Linux! One wrong step and its all gone!***
Dựa vào đó chúng ta sẽ lấy phân vùng linux để tìm flag.
Bây giờ ta sẽ tính toán 1 xíu
```
Start = 2048
Length = 51200 sectors
Sector size = 512 byte
→ Offset = 2048 × 512 = 1048576
→ Kích thước = 51200 × 512 = 26214400 byte (≈ 25 MB)
```
có được kết quả, ta nhập lệnh sau:
`dd if=image.dd of=linux_partition.img bs=512 skip=2048 count=51200`
> Trong đó
> - dd → là lệnh dùng để chuyển đổi và sao chép dữ liệu thô (low-level copying).
> - if=image.dd → input file, tức là nguồn dữ liệu đến từ file image.dd.
> - of=linux_partition.img → output file, là file đích nơi dữ liệu được ghi vào.
> - bs=512 → block size là 512 byte. Mỗi lần dd xử lý một khối 512 byte.
> - skip=2048 → bỏ qua 2048 block đầu tiên trong file nguồn (image.dd) trước khi bắt đầu sao chép. Với mỗi block là 512 byte thì bỏ qua tổng cộng 2048 × 512 = 1,048,576 byte (hay 1 MiB).
> - count=51200 → sao chép 51200 block từ file nguồn sau khi skip. Tổng dữ liệu được sao chép là 51200 × 512 = 26,214,400 byte (khoảng 25 MiB).
--> Ý nghĩa: Dòng lệnh này sử dụng công cụ dd trong hệ điều hành Unix/Linux để sao chép một phần dữ liệu từ file ảnh đĩa image.dd sang file linux_partition.img.
Tiếp theo ta thực hiện các phần sau
```
┌──(applemeomeo㉿applemeomeo)-[~/Downloads/picoctf]
└─$ dd if=disko-2.dd of=linux_partition.img bs=512 skip=2048 count=51200
51200+0 records in
51200+0 records out
26214400 bytes (26 MB, 25 MiB) copied, 0.167836 s, 156 MB/s
┌──(applemeomeo㉿applemeomeo)-[~/Downloads/picoctf]
└─$ mkdir mnt_linux
sudo mount linux_partition.img mnt_linux
[sudo] password for applemeomeo:
┌──(applemeomeo㉿applemeomeo)-[~/Downloads/picoctf]
└─$ ls
disko-1.dd disko-2.dd index.html linux_partition.img mnt_linux myNetworkTraffic.pcap red.png upz.png
┌──(applemeomeo㉿applemeomeo)-[~/Downloads/picoctf]
└─$ cd mnt_linux
┌──(applemeomeo㉿applemeomeo)-[~/Downloads/picoctf/mnt_linux]
└─$ ls
bin lost+found
```
Cái này để check xem thư mục mnt_linux có được tạo không và bên trong nó có gì không
Tiếp theo, ta sẽ liệt kê các file để xem có mục nào chứ flag.txt hoặc file đại loại như thế
```
ls -laR mnt_linux
```
> .:
> total 22
> drwxr-xr-x 4 root root 1024 Mar 30 07:51 .
> drwxrwxr-x 3 applemeomeo applemeomeo 4096 Jul 17 18:13 ..
> drwxr-xr-x 2 root root 5120 Mar 30 07:51 bin
> drwx------ 2 root root 12288 Mar 30 01:13 lost+found
>
> ./bin:
> ls: cannot access './bin/setmetamode': Bad message
> total 21792
> drwxr-xr-x 2 root root 5120 Mar 30 07:51 .
> drwxr-xr-x 4 root root 1024 Mar 30 07:51 ..
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 2to3-2.7
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 VGAuthService
> -rwxr-xr-x 1 root root 14792 Mar 30 07:51 appres
> -rwxr-xr-x 1 root root 18752 Mar 30 07:51 apt
> -rwxr-xr-x 1 root root 96648 Mar 30 07:51 apt-cache
> -rwxr-xr-x 1 root root 22920 Mar 30 07:51 apt-cdrom
> -rwxr-xr-x 1 root root 26944 Mar 30 07:51 apt-config
> -rwxr-xr-x 1 root root 51592 Mar 30 07:51 apt-get
> -rwxr-xr-x 1 root root 28256 Mar 30 07:51 apt-key
> -rwxr-xr-x 1 root root 67976 Mar 30 07:51 apt-mark
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 attr
> lrwxrwxrwx 1 root root 21 Mar 30 07:51 awk -> /etc/alternatives/awk
> -rwxr-xr-x 1 root root 1298416 Mar 30 07:51 bash
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 busctl
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 bzdiff
> -rwxr-xr-x 1 root root 36072 Mar 30 07:51 cabextract
> lrwxrwxrwx 1 root root 3 Mar 30 07:51 captoinfo -> tic
> -rwxr-xr-x 1 root root 14920 Mar 30 07:51 chvt
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 clear
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 clear_console
> -rwxr-xr-x 1 root root 52176 Mar 30 07:51 cmp
> -rwxr-xr-x 1 root root 14752 Mar 30 07:51 codepage
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 colrm
> lrwxrwxrwx 1 root root 25 Mar 30 07:51 compare -> /etc/alternatives/compare
> lrwxrwxrwx 1 root root 29 Mar 30 07:51 compare-im6 -> /etc/alternatives/compare-im6
> -rwxr-xr-x 1 root root 15375 Mar 30 07:51 corelist
> -rwxr-xr-x 1 root root 8360 Mar 30 07:51 cpan
> -rwxr-xr-x 1 root root 8381 Mar 30 07:51 cpan5.40-x86_64-linux-gnu
> -rwxr-xr-x 1 root root 162680 Mar 30 07:51 cpio
> -rwxr-xr-x 1 root root 129736 Mar 30 07:51 dash
> -rwxr-xr-x 1 root root 1380 Mar 30 07:51 dbilogstrip
> -rwxr-xr-x 1 root root 6206 Mar 30 07:51 dbiprof
> -rwxr-xr-x 1 root root 5394 Mar 30 07:51 dbiproxy
> -rwxr-xr-x 1 root root 14560 Mar 30 07:51 dbus-cleanup-sockets
> -rwxr-xr-x 1 root root 244288 Mar 30 07:51 dbus-daemon
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 dbus-launch
> -rwxr-xr-x 1 root root 30952 Mar 30 07:51 dbus-monitor
> -rwxr-xr-x 1 root root 14568 Mar 30 07:51 dbus-run-session
> -rwxr-xr-x 1 root root 30944 Mar 30 07:51 dbus-send
> -rwxr-xr-x 1 root root 14560 Mar 30 07:51 dbus-update-activation-environment
> -rwxr-xr-x 1 root root 14560 Mar 30 07:51 dbus-uuidgen
> -rwxr-xr-x 1 root root 14568 Mar 30 07:51 dccleancrw
> -rwxr-xr-x 1 root root 18680 Mar 30 07:51 dcfujigreen
> -rwxr-xr-x 1 root root 14568 Mar 30 07:51 dcfujiturn
> -rwxr-xr-x 1 root root 14568 Mar 30 07:51 dcfujiturn16
> -rwxr-xr-x 1 root root 67664 Mar 30 07:51 dcparse
> -rwxr-xr-x 1 root root 457000 Mar 30 07:51 dcraw
> -rwxr-xr-x 1 root root 14880 Mar 30 07:51 deallocvt
> -rwxr-xr-x 1 root root 24358 Mar 30 07:51 deb-systemd-helper
> -rwxr-xr-x 1 root root 7135 Mar 30 07:51 deb-systemd-invoke
> -rwxr-xr-x 1 root root 1198 Mar 30 07:51 dh_perl_dbi
> -rwxr-xr-x 1 root root 155248 Mar 30 07:51 diff
> -rwxr-xr-x 1 root root 68752 Mar 30 07:51 diff3
> lrwxrwxrwx 1 root root 8 Mar 30 07:51 dnsdomainname -> hostname
> lrwxrwxrwx 1 root root 8 Mar 30 07:51 domainname -> hostname
> -rwxr-xr-x 1 root root 179336 Mar 30 07:51 dumpkeys
> -rwxr-xr-x 1 root root 75376 Mar 30 07:51 editres
> -rwxr-xr-x 1 root root 41 Mar 30 07:51 egrep
> -rwxr-xr-x 1 root root 41953 Mar 30 07:51 enc2xs
> -rwxr-xr-x 1 root root 3065 Mar 30 07:51 encguess
> -rwxr-xr-x 1 root root 22840 Mar 30 07:51 fc-cache
> -rwxr-xr-x 1 root root 18744 Mar 30 07:51 fc-cat
> -rwxr-xr-x 1 root root 14648 Mar 30 07:51 fc-conflist
> -rwxr-xr-x 1 root root 14648 Mar 30 07:51 fc-list
> -rwxr-xr-x 1 root root 14872 Mar 30 07:51 fgconsole
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 fgrep
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 find
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 getfattr
> -rwxr-xr-x 1 root root 14880 Mar 30 07:51 getkeycodes
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 grep
> -rwxr-xr-x 1 root root 28826 Mar 30 07:51 h2ph
> -rwxr-xr-x 1 root root 60934 Mar 30 07:51 h2xs
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 hostname
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 hostnamectl
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 infocmp
> lrwxrwxrwx 1 root root 3 Mar 30 07:51 infotocap -> tic
> -rwxr-xr-x 1 root root 4373 Mar 30 07:51 instmodsh
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 journalctl
> -rwxr-xr-x 1 root root 5021 Mar 30 07:51 json_pp
> -rwxr-xr-x 1 root root 7013 Mar 30 07:51 json_xs
> -rwxr-xr-x 1 root root 15176 Mar 30 07:51 kbd_mode
> -rwxr-xr-x 1 root root 14880 Mar 30 07:51 kbdinfo
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 keyctl
> lrwxrwxrwx 1 root root 10 Mar 30 07:51 ldapadd -> ldapmodify
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 ldapcompare
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 ldapdelete
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 ldapexop
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 ldapmodify
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 ldapmodrdn
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 ldappasswd
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 ldapsearch
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 ldapurl
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 ldapwhoami
> -rwxr-xr-x 1 root root 15778 Mar 30 07:51 libnetcfg
> -rwxr-xr-x 1 root root 1198 Mar 30 07:51 lightdm-gtk-greeter-settings
> -rwxr-xr-x 1 root root 15208 Mar 30 07:51 listres
> -rwxr-xr-x 1 root root 220504 Mar 30 07:51 loadkeys
> -rwxr-xr-x 1 root root 39800 Mar 30 07:51 loadunimap
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 look
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 lowntfs-3g
> -rwxr-xr-x 1 root root 14648 Mar 30 07:51 lzmainfo
> -rwxr-xr-x 1 root root 273944 Mar 30 07:51 m4
> -rwxr-xr-x 1 root root 35672 Mar 30 07:51 mapscrn
> -rwxr-xr-x 1 root root 16163 Mar 30 07:51 mk_modmap
> -rwxr-xr-x 1 root root 63880 Mar 30 07:51 mount
> -rwxr-xr-x 1 root root 89752 Mar 30 07:51 mt-gnu
> -rwxr-xr-x 1 root root 8480 Mar 30 07:51 ncurses6-config
> -rwxr-xr-x 1 root root 8483 Mar 30 07:51 ncursesw6-config
> lrwxrwxrwx 1 root root 8 Mar 30 07:51 nisdomainname -> hostname
> -rwxr-xr-x 1 root root 23688 Mar 30 07:51 openvt
> -rwxr-xr-x 1 root root 14752 Mar 30 07:51 perl5.40-x86_64-linux-gnu
> -rwxr-xr-x 1 root root 45593 Mar 30 07:51 perlbug
> -rwxr-xr-x 1 root root 125 Mar 30 07:51 perldoc
> -rwxr-xr-x 1 root root 10867 Mar 30 07:51 perlivp
> -rwxr-xr-x 1 root root 45593 Mar 30 07:51 perlthanks
> -rwxr-xr-x 1 root root 8360 Mar 30 07:51 piconv
> lrwxrwxrwx 1 root root 16 Mar 30 07:51 pidof -> ../sbin/killall5
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 ping
> lrwxrwxrwx 1 root root 4 Mar 30 07:51 ping4 -> ping
> -rwxr-xr-x 1 root root 4536 Mar 30 07:51 pl2pm
> -rwxr-xr-x 1 root root 4041 Mar 30 07:51 pod2html
> -rwxr-xr-x 1 root root 18898 Mar 30 07:51 pod2man
> -rwxr-xr-x 1 root root 13112 Mar 30 07:51 pod2text
> -rwxr-xr-x 1 root root 4107 Mar 30 07:51 pod2usage
> -rwxr-xr-x 1 root root 3730 Mar 30 07:51 podchecker
> -rwxr-xr-x 1 root root 13677 Mar 30 07:51 prove
> lrwxrwxrwx 1 root root 9 Mar 30 07:51 psfaddtable -> psfxtable
> -rwxr-xr-x 1 root root 31352 Mar 30 07:51 psfxtable
> -rwxr-xr-x 1 root root 3566 Mar 30 07:51 ptar
> -rwxr-xr-x 1 root root 2645 Mar 30 07:51 ptardiff
> -rwxr-xr-x 1 root root 4395 Mar 30 07:51 ptargrep
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 pyfiglet
> -rwxr-xr-x 1 root root 945 Mar 30 07:51 python3-qr
> lrwxrwxrwx 1 root root 34 Mar 30 07:51 python3.11-config -> x86_64-linux-gnu-python3.11-config
> -rwxr-xr-x 1 root root 6696960 Mar 30 07:51 python3.12
> lrwxrwxrwx 1 root root 4 Mar 30 07:51 rbash -> bash
> lrwxrwxrwx 1 root root 4 Mar 30 07:51 reset -> tset
> -rwxr-xr-x 1 root root 27448 Mar 30 07:51 resizecons
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 rgrep
> -rwxr-xr-x 1 root root 97280 Mar 30 07:51 rpcgen
> -rwxr-xr-x 1 root root 35216 Mar 30 07:51 rpcinfo
> -rwxr-xr-x 1 root root 14816 Mar 30 07:51 screendump
> -rwxr-xr-x 1 root root 56416 Mar 30 07:51 sdiff
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 setfattr
> -rwxr-xr-x 1 root root 60312 Mar 30 07:51 setfont
> -rwxr-xr-x 1 root root 14872 Mar 30 07:51 setkeycodes
> -rwxr-xr-x 1 root root 19000 Mar 30 07:51 setleds
> -rwxr-xr-x 1 root root 14872 Mar 30 07:51 setlogcons
> -????????? ? ? ? ? ? setmetamode
> -rwxr-xr-x 1 root root 15000 Mar 30 07:51 setvtrgb
> -rwxr-xr-x 1 root root 31760 Mar 30 07:51 setxkbmap
> lrwxrwxrwx 1 root root 4 Mar 30 07:51 sh -> dash
> -rwxr-xr-x 1 root root 9982 Mar 30 07:51 shasum
> -rwxr-xr-x 1 root root 27208 Mar 30 07:51 showconsolefont
> -rwxr-xr-x 1 root root 19016 Mar 30 07:51 showkey
> -rwxr-xr-x 1 root root 19459 Mar 30 07:51 splain
> -rwxr-xr-x 1 root root 14736 Mar 30 07:51 splitfont
> -rwxr-xr-x 1 root root 6781664 Mar 30 07:51 sqlitebrowser
> -rwxr-xr-x 1 root root 8061 Mar 30 07:51 streamzip
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 stunnel3
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 stunnel4
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 tabs
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 tic
> -rwxr-xr-x 1 root root 22616 Mar 30 07:51 tightvncpasswd
> -rwxr-xr-x 1 root root 1082088 Mar 30 07:51 tmux
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 toe
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 tput
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 tset
> -rwxr-xr-x 1 root root 35200 Mar 30 07:51 umount
> -rwxr-xr-x 1 root root 2772 Mar 30 07:51 unicode_start
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 unicode_stop
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 unrar-nonfree
> lrwxrwxrwx 1 root root 2 Mar 30 07:51 unxz -> xz
> -rwxr-xr-x 1 root root 32368 Mar 30 07:51 viewres
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 vm-support
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 vmhgfs-fuse
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 vmtoolsd
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 vmware-alias-import
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 vmware-checkvm
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 vmware-hgfsclient
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 vmware-namespace-cmd
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 vmware-rpctool
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 vmware-toolbox-cmd
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 vmware-vgauth-cmd
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 vmware-vmblock-fuse
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 vmware-xferlogs
> lrwxrwxrwx 1 root root 23 Mar 30 07:51 which -> /etc/alternatives/which
> -rwxr-xr-x 1 root root 1006512 Mar 30 07:51 x86_64-linux-gnu-cpp-13
> -rwxr-xr-x 1 root root 3156 Mar 30 07:51 x86_64-linux-gnu-python3.11-config
> -rwxr-xr-x 1 root root 0 Mar 30 07:51 xargs
> -rwxr-xr-x 1 root root 40648 Mar 30 07:51 xdpyinfo
> -rwxr-xr-x 1 root root 14744 Mar 30 07:51 xdriinfo
> -rwxr-xr-x 1 root root 35872 Mar 30 07:51 xev
> -rwxr-xr-x 1 root root 37408 Mar 30 07:51 xfd
> -rwxr-xr-x 1 root root 49792 Mar 30 07:51 xfontsel
> -rwxr-xr-x 1 root root 14824 Mar 30 07:51 xkbbell
> -rwxr-xr-x 1 root root 222144 Mar 30 07:51 xkbcomp
> -rwxr-xr-x 1 root root 43800 Mar 30 07:51 xkbevd
> -rwxr-xr-x 1 root root 97032 Mar 30 07:51 xkbprint
> -rwxr-xr-x 1 root root 23928 Mar 30 07:51 xkbvleds
> -rwxr-xr-x 1 root root 23992 Mar 30 07:51 xkbwatch
> -rwxr-xr-x 1 root root 14880 Mar 30 07:51 xkill
> -rwxr-xr-x 1 root root 14816 Mar 30 07:51 xlsatoms
> -rwxr-xr-x 1 root root 18992 Mar 30 07:51 xlsclients
> -rwxr-xr-x 1 root root 27304 Mar 30 07:51 xlsfonts
> -rwxr-xr-x 1 root root 28224 Mar 30 07:51 xmessage
> -rwxr-xr-x 1 root root 50312 Mar 30 07:51 xprop
> -rwxr-xr-x 1 root root 5167 Mar 30 07:51 xsubpp
> -rwxr-xr-x 1 root root 18912 Mar 30 07:51 xvinfo
> -rwxr-xr-x 1 root root 48112 Mar 30 07:51 xwininfo
> -rwxr-xr-x 1 root root 92840 Mar 30 07:51 xz
> lrwxrwxrwx 1 root root 2 Mar 30 07:51 xzcat -> xz
> lrwxrwxrwx 1 root root 6 Mar 30 07:51 xzcmp -> xzdiff
> -rwxr-xr-x 1 root root 7588 Mar 30 07:51 xzdiff
> lrwxrwxrwx 1 root root 6 Mar 30 07:51 xzegrep -> xzgrep
> lrwxrwxrwx 1 root root 6 Mar 30 07:51 xzfgrep -> xzgrep
> -rwxr-xr-x 1 root root 10413 Mar 30 07:51 xzgrep
> -rwxr-xr-x 1 root root 2383 Mar 30 07:51 xzless
> -rwxr-xr-x 1 root root 2234 Mar 30 07:51 xzmore
> lrwxrwxrwx 1 root root 8 Mar 30 07:51 ypdomainname -> hostname
> -rwxr-xr-x 1 root root 236604 Mar 30 07:51 zipdetails
> ls: cannot open directory './lost+found': Permission denied
Coi bộ kết quả trả về không rõ ràng, vậy giờ ta sẽ dò flag bằng strings như ở phần 1.
Nhập lệnh sau:
`strings linux_partition.img | grep picoCTF`
Màn hình kết quả trả về 2 chuỗi flag giống nhau.

Sau khi đem submit thử thì nó là flag của bài, vậy flag của bài này là:
**picoCTF{4_P4Rt_1t_i5_a93c3ba0}**
**P/s:** Flag không nằm trong file hệ thống, mà có thể nằm ở vùng trống (slack space) hoặc trong file đã bị xóa. Việc dùng strings trên ảnh phân vùng là một cách phổ biến trong forensic để tìm dữ liệu rò rỉ hoặc chưa được xóa hoàn toàn.
## BITLOCKER_1

Sau khi tải file bitlocker về, chúng ta sẽ
```
┌──(applemeomeo㉿applemeomeo)-[~/Downloads/picoctf]
└─$ bitlocker2john -i bitlocker-1.dd > bitlocker2.hash
Signature found at 0x3
Version: 8
Invalid version, looking for a signature with valid version...
Signature found at 0x2195000
Version: 2 (Windows 7 or later)
VMK entry found at 0x21950c5
VMK encrypted with Recovery Password found at 0x21950e6
Searching AES-CCM from 0x2195102
Trying offset 0x2195195....
VMK encrypted with AES-CCM!!
VMK entry found at 0x2195241
VMK encrypted with User Password found at 2195262
VMK encrypted with AES-CCM
Signature found at 0x2c1d000
Version: 2 (Windows 7 or later)
VMK entry found at 0x2c1d0c5
VMK entry found at 0x2c1d241
Signature found at 0x373a000
Version: 2 (Windows 7 or later)
VMK entry found at 0x373a0c5
VMK entry found at 0x373a241
┌──(applemeomeo㉿applemeomeo)-[~/Downloads/picoctf]
└─$ cat bitlocker2.hash
Encrypted device bitlocker-1.dd opened, size 100MB
Salt: 2b71884a0ef66f0b9de049a82a39d15b
RP Nonce: 00be8a46ead6da0106000000
RP MAC: a28f1a60db3e3fe4049a821c3aea5e4b
RP VMK: a1957baea68cd29488c0f3f6efcd4689e43f8ba3120a33048b2ef2c9702e298e4c260743126ec8bd29bc6d58
UP Nonce: d04d9c58eed6da010a000000
UP MAC: 68156e51e53f0a01c076a32ba2b2999a
UP VMK: fffce8530fbe5d84b4c19ac71f6c79375b87d40c2d871ed2b7b5559d71ba31b6779c6f41412fd6869442d66d
User Password hash:
$bitlocker$0$16$cb4809fe9628471a411f8380e0f668db$1048576$12$d04d9c58eed6da010a000000$60$68156e51e53f0a01c076a32ba2b2999afffce8530fbe5d84b4c19ac71f6c79375b87d40c2d871ed2b7b5559d71ba31b6779c6f41412fd6869442d66d
Hash type: User Password with MAC verification (slower solution, no false positives)
$bitlocker$1$16$cb4809fe9628471a411f8380e0f668db$1048576$12$d04d9c58eed6da010a000000$60$68156e51e53f0a01c076a32ba2b2999afffce8530fbe5d84b4c19ac71f6c79375b87d40c2d871ed2b7b5559d71ba31b6779c6f41412fd6869442d66d
Hash type: Recovery Password fast attack
$bitlocker$2$16$2b71884a0ef66f0b9de049a82a39d15b$1048576$12$00be8a46ead6da0106000000$60$a28f1a60db3e3fe4049a821c3aea5e4ba1957baea68cd29488c0f3f6efcd4689e43f8ba3120a33048b2ef2c9702e298e4c260743126ec8bd29bc6d58
Hash type: Recovery Password with MAC verification (slower solution, no false positives)
$bitlocker$3$16$2b71884a0ef66f0b9de049a82a39d15b$1048576$12$00be8a46ead6da0106000000$60$a28f1a60db3e3fe4049a821c3aea5e4ba1957baea68cd29488c0f3f6efcd4689e43f8ba3120a33048b2ef2c9702e298e4c260743126ec8bd29bc6d58
```

## Riddle Registry

Theo đề bài thì ta sẽ tìm flag ở trong một file pdf bị bôi đen phần quan trọng, và nó ở cấp độ easy nên chúng ta sẽ suy nghĩ đơn giản
đầu tiên mở file ra check xem

Có vẻ lại bị đề bài lừa chỗ bôi đen. giờ ta sẽ dùng exiftool xem metadata có gì đáng ngờ không

Ta thu được 1 dòng có vẻ là mã base64, hãy decode nó xem ra gì

Vậy ta đã thu được flag của bài này.
**picoCTF{puzzl3d_m3tadata_f0und!_ee454950}**
## Hidden in plainsight

Giờ ta sẽ tải về và mở ra xem nó như nào

Check metadata của nó

Sau khi đem giải mã ta thu được 2 thông điệp
```
steghide:cEF6endvcmQ=
pAzzword
```
Có thể Cái dưới là password paraphase cho tool steghide được gợi ý ở trên.
Hãy thử làm theo

để giải nén lấy file ta nhập
```shell
steghide extract -sf img.jpg
```

Vậy flag là:
**picoCTF{h1dd3n_1n_1m4g3_871ba555}**
## Corrupted file

Đọc mô tả thì chúng ta phải sửa file jpeg bị lỗi sao cho khôi phục về ban đầu
Đầu tiên ta phải check header và tail để xem có đúng định dạng không

Thường file jpeg thì bắt đầu từ **FF D8** và kết thúc là **FF D9**
Ở đây là thấy Nó bắt đầu từ 5c 78, vậy nên sai header.
Ta sửa như sau:
```
printf '\xFF\xD8' | dd of=file bs=1 count=2 conv=notrunc
```

Vô xem file ảnh đã khôi phục:

Vậy flag là: **picoCTF{r3st0r1ng_th3_by73s_efd8c6c0}**