---
# System prepended metadata

title: picoCTF

---

# Cryptography
## interencdec
![image](https://hackmd.io/_uploads/BkXvbbbWkg.png)
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.
![image](https://hackmd.io/_uploads/H1pGGZZbyl.png)
Đây là kiểu mã hóa base64. Hãy dùng tool trực tuyến để giải mã.
![image](https://hackmd.io/_uploads/Sy0IfbZ-yl.png)
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:
![image](https://hackmd.io/_uploads/SyEZX-b-yl.png)
Ta sẽ thu được flag là: **picoCTF{caesar_d3cr9pt3d_b204adc6}**
## Mod26
![image](https://hackmd.io/_uploads/Sk6wQZWZyl.png)
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:
![image](https://hackmd.io/_uploads/SJwhmZbZye.png)
flag là: **picoCTF{next_time_I'll_try_2_rounds_of_rot13_aFxtzQWR}**
## The numbers
![image](https://hackmd.io/_uploads/BylgNW-Zyl.png)
Ta thu được tấm hình sau:
![image](https://hackmd.io/_uploads/SyhbEbWZ1g.png)
**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
![image](https://hackmd.io/_uploads/ryi04bbbyl.png)
Ta sẽ thu được cụm bên trong là:
**THENUMBERSMASON**
## 13
![image](https://hackmd.io/_uploads/B17VSb-b1e.png)
Bài này giống bên trên. Làm tương tự ta được flag:
![image](https://hackmd.io/_uploads/SkbOHZZ-1g.png)

## Rotation
![image](https://hackmd.io/_uploads/rkF2Sb-bJl.png)
Trong file đó ta được:
![image](https://hackmd.io/_uploads/B1HArZWWJg.png)
Nó giống bài đầu tiên, làm tương tự:
![image](https://hackmd.io/_uploads/Hk2bI-ZZ1l.png)
Ta sẽ có flag là: **picoCTF{r0tat1on_d3crypt3d_4c71f5b0}**

## hide to see
![image](https://hackmd.io/_uploads/r1EVfzbW1g.png)
Đây là file ảnh:
![image](https://hackmd.io/_uploads/By3SMfWb1l.png)
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:
![image](https://hackmd.io/_uploads/HJ_5GGWZkl.png)
Ta thu được chuỗi:
**krxlXGU{zgyzhs_xizxp_zx751vx6}**
Đem đi giải mã atbash ta thu được:
![image](https://hackmd.io/_uploads/Sy3_7Gb-yx.png)
Flag: **picoCTF{atbash_crack_ac751ec6}**

## ReadMyCert 
![image](https://hackmd.io/_uploads/ByWmO9vW1x.png)
Với bài này chúng ta phải dùng đến linux
![image](https://hackmd.io/_uploads/SkgIu9PZJx.png)
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:
![image](https://hackmd.io/_uploads/rkRcF9PZkx.png)
Có thể thấy ở dòng Subject:, ta thấy được flag của đề bài là: 
**picoCTF{read_mycert_5aeb0d4f}**

## Ceasar
![image](https://hackmd.io/_uploads/Sk-mq9v-1x.png)
Hãy tải file chall về xem thử:
![image](https://hackmd.io/_uploads/r1QL95Pb1l.png)
Ta thấy flag là 
**picoCTF{gvswwmrkxlivyfmgsrhnrisegl}**
Thử submit xem có đúng không.
![image](https://hackmd.io/_uploads/SJatcqwZ1g.png)
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.
![image](https://hackmd.io/_uploads/By_bo5DZyg.png)
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

![image](https://hackmd.io/_uploads/S1sKoqwZ1l.png)


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
qQqRYWRZ[TSVUZTUTXRRZUTRW
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
![image](https://hackmd.io/_uploads/r1HS-GXQyx.png)
Ở đây chúng ta sẽ làm những thứ như sau:
```
ls 
```
Nó sẽ hiện ra 3 thư mục sau:

![image](https://hackmd.io/_uploads/Bka74fQ71x.png)

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}**

![image](https://hackmd.io/_uploads/B1Z27zmmkl.png)

## Scan Surprise
![image](https://hackmd.io/_uploads/SktQOzXmyx.png)
Làm theo từng bước của đề bài, ta thu được một cái mã QR. 


![image](https://hackmd.io/_uploads/Sk4b_MXXke.png)
Hãy quét thử nó xem ra gì:
![image](https://hackmd.io/_uploads/HkctuG771x.png)
Vậy là ta đã có flag: **picoCTF{p33k_@_b00_3f7cf1ae}**

## Secret of the Polyglot
![image](https://hackmd.io/_uploads/SklMYMX7yg.png)
Hãy thử tải file đó về:
Trong file đó ta thu được nửa flag:
![image](https://hackmd.io/_uploads/SJQwKMX7Jg.png)

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
![image](https://hackmd.io/_uploads/SyIaFMQQ1e.png)

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
![image](https://hackmd.io/_uploads/HkUXRf7Xye.png)


![image](https://hackmd.io/_uploads/S1R60GQmye.png)

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

![image](https://hackmd.io/_uploads/HkAJkm77Je.png)

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

![image](https://hackmd.io/_uploads/ryfSNiHm1x.png)

Trong file đó chỉ có một tấm ảnh
![image](https://hackmd.io/_uploads/BykF4sS7yl.png)
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.

![image](https://hackmd.io/_uploads/rymzSiBXye.png)

Ở dòng attribution url ta thấy có đoạn nó giống như mã base64. Hãy thử decode nó:
![image](https://hackmd.io/_uploads/ry8UBjBm1l.png)
Vậy ta đã thu được flag của bài này là:
```
picoCTF{ME74D47A_HIDD3N_a6df8db8}
``` 

## Information
![image](https://hackmd.io/_uploads/BkzpSjBQ1l.png)

hãy tải bức ảnh xuống r làm như trên xem ta thu được gì:
![image](https://hackmd.io/_uploads/rJU4LjrmJl.png)

Lúc này ở phần license ta thấy chuỗi ký tự giống base64. Hãy decode nó:
![image](https://hackmd.io/_uploads/Bk5s8sSQyl.png)

Vậy flag chính là: **picoCTF{the_m3tadata_1s_modified}**

## Glory of the garden

![image](https://hackmd.io/_uploads/BJ5fvsrXke.png)

Đề 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:
![image](https://hackmd.io/_uploads/rJ1FOjHXyx.png)

**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

![image](https://hackmd.io/_uploads/H1Y1hjHm1g.png)

Bên trong file này là các gói tin của wireshark
![image](https://hackmd.io/_uploads/H1gNhjSQye.png)

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 đó
![image](https://hackmd.io/_uploads/r1U3isSXJx.png)

Có một cách làm khác nhanh hơn, đó là
![image](https://hackmd.io/_uploads/BkFyTorQkl.png)
Vậy cuối cùng flag ta thu được sẽ là:
`picoCTF{P64P_4N4L7S1S_SU55355FUL_5b6a6061}`

## Lookey here
![image](https://hackmd.io/_uploads/ByhcIcumJe.png)

Đây là file chall bài cho:
![image](https://hackmd.io/_uploads/rkS68c_mkg.png)

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
```
![image](https://hackmd.io/_uploads/SJrXDcdm1x.png)

Vậy flag ta thu được là:
```
picoCTF{gr3p_15_@w3s0m3_4c479940}
```
## Hide me
![image](https://hackmd.io/_uploads/r17dvcOXye.png)

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ả
![image](https://hackmd.io/_uploads/r1-WgiOXyx.png)

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.

![image](https://hackmd.io/_uploads/HJO1bjOXJx.png)

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

![image](https://hackmd.io/_uploads/B14BZj_m1g.png)

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

![image](https://hackmd.io/_uploads/SyldbsdXJg.png)

Vậy flag ta thu được là:
```
picoCTF{Hiddinng_An_imag3_within_@n_ima9e_85e04ab8}
```
## Sleuthkit Intro
![image](https://hackmd.io/_uploads/rkToLod71g.png)

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ả:

![image](https://hackmd.io/_uploads/Hy54Pj_X1g.png)

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
![image](https://hackmd.io/_uploads/HkZVYsdQJl.png)

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.
![image](https://hackmd.io/_uploads/rJ1tYj_7kg.png)
Ta có thể thấy được flag chính là:
```
picoCTF{p4ck37_5h4rk_01b0a0d6}
```
## Redaction gone wrong
![image](https://hackmd.io/_uploads/ryd73sOmye.png)
File đề cho là một file pdf đã bị bôi đen đi một số chỗ(trong đó có thể có flag)

![image](https://hackmd.io/_uploads/BJlu3oumyx.png)

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:
![image](https://hackmd.io/_uploads/ByEfaiOXJe.png)

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 đó
![image](https://hackmd.io/_uploads/SJ_BpiOQ1g.png)

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
![image](https://hackmd.io/_uploads/SysiEItm1x.png)

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
![image](https://hackmd.io/_uploads/Skg-rUK71l.png)
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"
```
![image](https://hackmd.io/_uploads/Hki9H8K7kl.png)
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ì
![image](https://hackmd.io/_uploads/BJ1e88tQJe.png)

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
![image](https://hackmd.io/_uploads/H1MXU8KX1l.png)
Vậy đó chính là flag
Và flag ta thu được là:
```
picoCTF{ax8mC0RU6ve_NX85l4ax8mCl_85dbd215}
```

## MSB
![image](https://hackmd.io/_uploads/ryVC5LFXkx.png)
Đây là bức ảnh
![image](https://hackmd.io/_uploads/r194sLtm1e.png)
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`
![image](https://hackmd.io/_uploads/S1mKJvYX1l.png)
Chọn data extract, lúc này sẽ mở ra cửa sổ cho bạn chọn
![image](https://hackmd.io/_uploads/BkYh1PFQyl.png)
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.
![image](https://hackmd.io/_uploads/ByCugvYXyg.png)
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 đó
![image](https://hackmd.io/_uploads/SJOMbwFX1x.png)
Vậy flag cuối cùng ta thu được là:
```
picoCTF{15_y0ur_que57_qu1x071c_0r_h3r01c_572ad5fe}
```
## Find and open
![image](https://hackmd.io/_uploads/r1dgwwtm1l.png)
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
![image](https://hackmd.io/_uploads/H1F4wPFQkg.png)
Thử xem cái data của nó ra gì, nhìn giống mã hex
![image](https://hackmd.io/_uploads/S1TFwPK71g.png)
Nó ra kết quả như một mã base64
Tiếp tục decode

![image](https://hackmd.io/_uploads/SJCsvvFXJx.png)
Thử xem cái **picoCTF{R34DING_LOKd_** có phải key để unzip file kia không

![image](https://hackmd.io/_uploads/rkhldPtQkx.png)
Vậy ta đã đúng, thử xem bên trong nó có gì
![image](https://hackmd.io/_uploads/BkfV_wYQyg.png)
Vậy flag của bài này là:
```
picoCTF{R34DING_LOKd_fil56_succ3ss_cbf2ebf6}
```

## St3g0
![image](https://hackmd.io/_uploads/SJZxHiRmke.png)
Đây là bức ảnh của đề
![image](https://hackmd.io/_uploads/Hk_DrsR7ye.png)

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

![image](https://hackmd.io/_uploads/SJLW8iCX1g.png)

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

![image](https://hackmd.io/_uploads/HJPHIsAQyx.png)

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

![image](https://hackmd.io/_uploads/rJ48DiCQ1g.png)
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
![image](https://hackmd.io/_uploads/rywUQ307Jx.png)
Đây là ảnh của nó
![image](https://hackmd.io/_uploads/HyZ9X2RQ1e.png)

Hãy thử qua các tool thường gặp:
![image](https://hackmd.io/_uploads/ryETQ3CX1x.png)
Nó không trả về kết quả gì cả. Nhưng nhờ chatgpt tôi nhận ra
![image](https://hackmd.io/_uploads/Hy9xV2A71l.png)

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

![image](https://hackmd.io/_uploads/rJWnVnAXkl.png)
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
![image](https://hackmd.io/_uploads/SysaSh07Je.png)

Đây là ảnh của bài
![image](https://hackmd.io/_uploads/HybxInCmyg.png)

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  
![image](https://hackmd.io/_uploads/SJKWC98Syl.png)
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
![image](https://hackmd.io/_uploads/Sk5t1iLByx.png)

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:
![image](https://hackmd.io/_uploads/SkWJljUHyl.png)
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"
```
![image](https://hackmd.io/_uploads/HJ8LxiIH1l.png)
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
![image](https://hackmd.io/_uploads/H1lcIj7pkg.png)
Bài này thuộc về steganography nên ta sẽ sử dụng các công cụ phổ biến để xem.
![image](https://hackmd.io/_uploads/Hk-eviQTye.png)
 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
   ```

![image](https://hackmd.io/_uploads/H1Y8PjmTJg.png)
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
```
![image](https://hackmd.io/_uploads/rkvjviXpyg.png)
Vậy ta đã thu được flag, flag của bài này là:
**picoCTF{r3d_1s_th3_ult1m4t3_cur3_f0r_54dn355_}**
## Ph4nt0m 1ntrud3r
![image](https://hackmd.io/_uploads/SJ6cs2QTkl.png)

Giờ ta sẽ xem trong đó có gì.
![image](https://hackmd.io/_uploads/HkZbh276Je.png)
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ì.
![image](https://hackmd.io/_uploads/rkbE237T1x.png)
![image](https://hackmd.io/_uploads/Sy0VnhQa1x.png)
![image](https://hackmd.io/_uploads/BkxLnnQa1x.png)

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
```
![image](https://hackmd.io/_uploads/r161ahXpkl.png)
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:
![image](https://hackmd.io/_uploads/rkoMZ6Qake.png)



Giờ đem đi debug là xong
![image](https://hackmd.io/_uploads/HyTbZpQayg.png)


**picoCTF{1t_w4snt_th4t_34sy_tbh_4r_8e10e839}**


## Flags are stepic
![image](https://hackmd.io/_uploads/Bk_SI3Txxe.png)
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
![image](https://hackmd.io/_uploads/B1Wi_Aaegl.png)
Kéo xuống dưới ta sẽ thấy một lá cờ không tồn tại.
![image](https://hackmd.io/_uploads/rkf0d0pege.png)
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:
![image](https://hackmd.io/_uploads/SJslPnalex.png)
Rồi nhập lệnh
![image](https://hackmd.io/_uploads/SyobP3Txge.png)

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

## DISKO_1
![image](https://hackmd.io/_uploads/Bk681IU8ll.png)

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>
![image](https://hackmd.io/_uploads/Sky21ILLxl.png)

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

## DISKO_2
![image](https://hackmd.io/_uploads/ByChl8ILgl.png)

Đây sẽ là dạng nâng cao hơn so với phần 1. Hãy thử tải file về xem
![image](https://hackmd.io/_uploads/SJN4ZIL8xl.png)

Xem thử bên trong nó có gì
Weo, cta đã có flag nhưng mà là 1 đống flag
![image](https://hackmd.io/_uploads/r18YWI8Llg.png)
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.
![image](https://hackmd.io/_uploads/BJmcWPUUxg.png)
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
![image](https://hackmd.io/_uploads/Bkq_t58Leg.png)
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

```

![image](https://hackmd.io/_uploads/ryKN5qUUll.png)



## Riddle Registry

![image](https://hackmd.io/_uploads/S1KSEXMRle.png)

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
![image](https://hackmd.io/_uploads/SkEjV7MRgx.png)
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
![image](https://hackmd.io/_uploads/BJx0EmzRxg.png)

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

![image](https://hackmd.io/_uploads/ryhBSQfCel.png)
Vậy ta đã thu được flag của bài này.
**picoCTF{puzzl3d_m3tadata_f0und!_ee454950}**    

## Hidden in plainsight
![image](https://hackmd.io/_uploads/S1mKBQz0el.png)
Giờ ta sẽ tải về và mở ra xem nó như nào
![image](https://hackmd.io/_uploads/Bki6BQzAee.png)
Check metadata của nó
![image](https://hackmd.io/_uploads/HJc6wXzRlx.png)

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 
![image](https://hackmd.io/_uploads/r19NdmGCxg.png)
để giải nén lấy file ta nhập
```shell
steghide extract -sf img.jpg
```
![image](https://hackmd.io/_uploads/SkpC_mM0ll.png)
Vậy flag là:
**picoCTF{h1dd3n_1n_1m4g3_871ba555}**

## Corrupted file
![image](https://hackmd.io/_uploads/H1SMDi4Cxg.png)
Đọ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
![image](https://hackmd.io/_uploads/BkHNds4Aeg.png)

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

```
![image](https://hackmd.io/_uploads/BkOAusERxx.png)

Vô xem file ảnh đã khôi phục:
![image](https://hackmd.io/_uploads/HkR1toECeg.png)
Vậy flag là: **picoCTF{r3st0r1ng_th3_by73s_efd8c6c0}**


