---
# System prepended metadata

title: 'Imaginary-CTF 2023 '
tags: ['@write_up']

---

# Challenges 

| Category  | Challenge Name    | Difficulty |
| --------- | ----------------- | ---------- |
| Forensics | web               | Easy       |
| Forensics | blurry            | Easy       |
| Forensics | rev               | Easy       |
| Forensics | crypto            | Medium     |
| Forensics | foren             | Medium     |

## Web

### Des : 

![](https://hackmd.io/_uploads/Hy8pn--i3.png)


### Sol : 

+ Đề cung cấp cho ta 1 file zip chứa thư mục mozilla. Nó được tạo và sử dụng bởi trình duyệt web Mozilla Firefox để lưu trữ nhiều dữ liệu, cấu hình và cài đặt dành riêng cho người dùng.
+ oke bây giờ mình sẽ bắt đầu vào phân tích nó.Đối với bài này mình có 2 tool để phân tích nó : 

1. Firefox_decrypt : https://github.com/unode/firefox_decrypt 
2. Dumpzilla : https://www.dumpzilla.org/

+ Đầu tiên dùng firefox_decrypt để giải mã thư mục .firefox  trước. 

+ Và mình nhận được 1 url kèm theo pass của nó : 

![image](https://github.com/KMANVK/Cm_Linux/assets/94669750/08ae2c64-f5a9-490e-a65a-387ab248ea8e)

+ Nhưng cái này khá mơ hồ khi mình không kiếm được gì từ nó cả ngoài trừ cái pass. 
+ Tiếp theo mình dùng Dumpzilla để tìm kiếm chính xác URL mà mình cần. 

![image](https://github.com/KMANVK/Cm_Linux/assets/94669750/4390005a-8246-4931-933e-70b9427920fd)

+ Và Url mà mình quan tâm là `https://yoteachapp.com/password/64ab39b5b13dfb00148ea72f`

+ => truy cập vào và nhập pass tìm được ở trên. 

+ ![image](https://github.com/KMANVK/Cm_Linux/assets/94669750/c0cca4bb-3f47-4137-aae1-3ce3839fe282)

#flag : `ictf{behold_th3_forensics_g4untlet_827b3f13}`

## blurry 

### Des : 

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

### Sol : 

+ Bài này ta chỉ cần ném file ảnh lên cyber với operation là `Sharpen image` 

![image](https://github.com/KMANVK/Cm_Linux/assets/94669750/c5174e77-15ca-4e77-8e58-ee5141da0492)

=> Quét QR  bằng app Zalo :vv 

#flag : `ictf{blurR1ng_is_n0_m4tch_4_u_2ab140c2}`

## rev 

### Des : 

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

### Sol : 

+ Bài này cung cấp cho mình 2 file `img1`,`img2`
+ Mình mở file `img1` lên xem thì mình thấy 

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

=> File `img1` thực chất là 1 file ảnh 

=> Dùng HxD fix nó lại và mình có được flag : 

+ 1.Dùng Select block => xóa từ offset `0` đến offset `48BFFF`
+ 2.Tương tự như vậy xóa từ offset 4A4F36 đến offset cuối cùng 

=> ![image](https://github.com/KMANVK/imaginary_ctf_2023/assets/94669750/13ec75a6-1d0b-49db-8d1c-fa85b0e1c5c1)

## crypto 

### Des : 
![image](https://github.com/KMANVK/imaginary_ctf_2023/assets/94669750/3bffdf52-a762-4791-82ef-290ee83e2a40)

### Sol : 

+ Bài này cung cấp cho ta 4 file là : 

![image](https://github.com/KMANVK/imaginary_ctf_2023/assets/94669750/0269b143-1596-42a4-9b38-0c5a00832cd9)

+ Mình phân tích 2 file py trước thì nhận thấy : 
+ 1.File script.py : đọc nội dung của tệp `private.pem` và nhập khóa riêng RSA bằng cách sử dụng tệp `RSA.importKey()`
+ 2.File gen.py : thực hiện một số thao tác trên tệp nhị phân có tên core.raw(thay `private.pem bằng chuỗi ký tự "A"`) và ghi nội dung được thao tác vào một tệp mới có tên `core`. Sau đó, nó sử dụng openssl rsautl để mã hóa `flag.txt` bằng khóa công khai RSA từ `public.pem` và đầu ra được mã hóa được lưu vào một tệp mới có tên `flag.enc`.

=> file `core` chứa toàn bộ nội dung core.raw(bao gồm các key và khóa chính) 

=> Dùng tool `rsakeyfind` để tìm p(Prime 1), q(Prime 2), e(Public Key).

```
FOUND PRIVATE KEY AT 3b4110
version =
00
modulus =
00 b7 08 18 ad 85 12 1d 67 36 0f 49 71 3b 6c 06
50 e3 d9 88 b7 76 27 07 b2 9f b2 32 33 c3 2e 77
ae e3 bb 62 d7 05 74 8b 4a ff d2 57 06 eb 48 58
b8 eb 73 06 78 f2 11 15 2b 07 bf 24 40 61 ab 24
2a 38 ea 40 8c 31 b9 4f 63 90 d5 17 e2 b3 d6 6e
d1 71 af 64 69 63 f8 0d 6a 0e 72 81 94 31 a1 e2
10 92 c4 65 b8 90 b2 3c 37 eb 37 ec 9d 3d 88 31
87 26 f5 aa b5 bd b4 e9 52 0c b7 89 ee cc 60 0f
c6 28 3a 9b b1 3b 03 39 6c 27 ea ff 92 41 ba 0c
a3 a8 2d f5 a9 fa e6 b2 6d 1b c8 a0 ef 55 9a 3a
39 ff 0f f5 60 a3 af f6 f4 1f 6f fb c0 87 8a e7
15 1e b2 6b 52 ca b4 b9 c9 d4 9c 4e aa b1 3f 20
77 50 e8 a2 ed 5c aa f1 e6 4e c8 01 df ef df 91
6d 2f 7f 5f 98 d2 6d 61 04 b0 3e 10 1b be 13 83
89 cc 1b 14 0a 46 8e 05 d0 43 28 08 91 49 6f 70
7d d4 7a e7 2f 84 10 2a 90 73 f6 5d 42 18 9e e6
69 e6 bd be 1d 39 d2 1a 9d c4 1c b3 3c 00 7c d6
e4 05 a8 4a 9b 3c a6 db 52 e4 e0 1c 5a 61 b0 7b
5c ee 53 47 0d 57 15 71 fe bc 21 25 bd ad e1 18
e5 36 3e 72 01 40 71 dc af 41 26 82 0c 57 3d b1
a2 5a c8 34 79 12 0e 1a 23 bb 99 49 d5 ef 62 0f
c0 dc 2c 37 48 10 55 6e fb f3 78 10 e0 14 ed 40
3e 34 2a dc 58 dc 3d 08 a0 72 4a 03 4a a0 5f 04
dd 72 98 f5 c2 6e c4 a9 a2 6a 0b 65 06 eb a7 f2
77 d4 d1 28 2e 19 b8 ae 69 b9 7c 30 0c 66 54 42
47 7a c6 78 71 ec bd 4b 4c fc ea de bb 4f 8d 89
a7 ee ae a1 55 9d 0f ee 23 99 76 7d b3 3d 72 0e
33 96 a7 04 ca 7d 13 60 e9 09 5f 40 1d 7a 2d 25
7d 9f 34 82 b2 dc 36 a0 49 95 8f 1f a2 d1 81 62
bd e8 95 99 37 b4 0f 19 dc 9c b2 4d 33 79 7f 9d
ac b4 47 e7 8a 54 ee 4f 0b d7 8d 3e a9 e7 8b 91
d7 7c 7f fe 6a 6d 01 73 1b 9f ab 0b 69 03 bb d7
c9
publicExponent =
01 00 01
privateExponent =
4e d4 b7 60 40 e0 98 f6 63 93 b8 f3 82 7e d7 c7
8e 23 1a 9d bd cf 38 a3 07 e2 05 7a 42 d5 e8 29
54 9f 58 06 39 2c c5 73 a3 74 32 14 62 50 d2 19
af 1a e7 0e 3f 5f f9 28 83 d9 20 e1 73 cf 74 af
94 bc db d9 25 ef 64 d0 82 c8 2c d5 f0 d3 e9 fd
de 43 86 f1 57 63 b6 4f 57 f2 9c 79 b9 d8 b9 d7
9e 86 e5 32 d5 6b 56 c1 54 d7 4c db 3a 6d c6 bb
29 9e 04 8c eb 2c 98 93 44 b3 e6 3e 0a 1b 53 9f
ea a2 b7 7c e1 68 55 9a 8e 24 ca 37 71 84 92 be
08 08 e7 76 73 00 5a 97 e0 b0 0c 14 98 df 68 b5
a2 f3 fa 20 c9 cf 57 83 34 69 14 5a 8b 66 59 79
c0 b3 62 c3 11 58 3e 6e bd da 26 8d a0 f2 89 e6
a9 db d0 94 7f e5 86 73 45 ba 22 08 93 b5 4c 5a
e4 ea ac bf 52 de 56 3b 61 37 11 d4 09 0d 39 89
a7 75 80 2f 9e cc bb 97 43 dd 61 b7 45 94 30 34
99 c7 e7 7b 91 1b 2f 61 f0 f8 0a 99 95 a6 16 a1
8a 58 27 c6 94 25 aa f9 d7 04 d9 f1 7b 29 32 c8
32 a7 4a 0c 15 a9 eb 5f 58 23 e6 fd b0 04 dd d5
e8 d7 ee 2b 15 35 37 1a fe 27 7e 4c 61 96 35 1c
fa 58 82 c8 37 13 51 6c eb 56 05 b0 9e 7d 39 9d
6a a2 c7 56 5a 0b 55 b4 0c e9 dc 54 6d f1 06 23
f0 2c f2 20 95 15 bf 70 b9 f1 26 b9 6b 4c 3c fa
6c 8e 48 80 45 3d e9 47 63 26 ff cb 56 59 99 f5
79 c4 10 fe d8 6f f4 d5 36 ff e7 63 b2 a5 4a 38
eb 49 ad c7 8b 5f 0c 68 58 b9 5f 41 ad fc 56 c0
10 e2 0f df e5 fc e5 9d 56 09 19 f3 4e 25 fa 82
63 18 51 5d 2a 0e dc a5 ee 56 b4 8d d8 26 3a fd
cf f4 0d 0d c6 be 74 4e b9 46 e6 34 e7 61 a8 5f
ea 6f 8a ca b6 e3 9a 25 ea 47 64 39 ee 63 f4 37
b5 84 a4 a7 f8 26 8e c6 c3 6d 81 b6 98 76 a6 59
de df 53 0b 45 9b 61 25 11 12 49 f7 63 64 7d c8
b5 1c 15 84 2a 73 da 3b 9b b1 96 ed f1 a4 e6 73
prime1 =
00 e3 35 02 0b d3 81 a7 42 7b 52 f8 6e 43 a8 90
1e 5e 13 94 6f 05 01 94 79 8c a7 4f 58 d9 c8 4b
b4 30 f9 39 8d ac a2 ac aa c1 ad ba a3 c8 ba 19
4e 1b 7f 21 ab 1f 6e e2 3f 6c 0b 22 19 4d 49 86
97 d8 b6 56 e7 5a 26 d4 b2 78 d0 41 e5 80 bf 22
ea d8 ab 24 89 e2 5b fa c5 55 46 46 4c 1e dd 5d
47 77 b9 15 35 83 3e a7 d0 b9 21 b4 41 d6 c2 1c
a7 45 31 ef be 1d 2a 38 05 0a 71 43 d1 7e ce c9
c6 6d 1d 53 08 e2 10 c1 27 ac 31 d9 f8 29 6f 54
a4 d0 cf 52 f9 c1 d9 ff 30 62 84 cc 35 8f 92 42
df 49 78 13 4a 3c 2a fd 78 fb 45 46 59 6b 74 f4
38 77 34 65 4b 8a c0 ff c2 1b b5 09 7d 81 36 ca
13 00 64 89 63 b5 f5 ec bc 66 30 de 71 16 6a f2
4b b7 50 4d 6c 88 2d 62 69 cc b1 b7 f3 8e 61 ed
1d 3a 20 80 1c a5 3e ea de c8 ab 65 8c 60 4c b2
46 f1 7e 56 49 10 3a 22 9c 53 73 2f 71 23 01 90
9f
prime2 =
00 ce 39 f5 e2 44 26 db 57 bf 4d 46 21 76 30 99
90 5a 92 6c 9d a2 4c 5a c6 dd 8b b3 05 64 f7 5d
83 11 61 ce 9a 05 db 65 ed bf cb 46 63 94 cc e5
4e 20 8f 9b 6c dc e8 94 dd 8e ac 7d af dc 0a 78
14 9f 71 b0 80 71 2b 33 12 bd fb 44 ed cb 86 cd
ef c3 7e 26 6c 65 e7 2a 43 f6 fb 3c a0 4d f7 78
10 95 77 67 ad 39 70 73 13 1d 60 59 7f 5a 09 3a
f3 af d6 e8 2b 83 5f b9 b8 5d a3 2f c5 fb c6 45
df 47 4a b0 7a dd 20 c4 23 4c f4 cb 00 a1 c8 79
a2 08 4a 9f c9 13 e4 df dd 80 32 91 1c 59 12 6d
f2 72 19 a1 f3 bf a6 f0 6e bb 71 d5 30 f9 56 03
52 08 20 75 39 7c 34 03 ae 26 31 a4 ca 0c b3 96
f7 52 56 bd 6a 9d 5f 83 be fd a5 7d ae 28 9c a3
b8 0d 78 5f b5 8f 81 5a 99 e7 9a 69 f5 c7 3c 1e
98 8b 6c cc cc 1b 7c fe 91 02 d3 5d 21 16 e0 2d
58 e9 65 01 e2 60 05 4f d2 6a 6e 71 5f cd f2 36
97
exponent1 =
00 a6 d9 63 72 49 d5 19 7e 11 d0 61 4d 9f f3 e6
39 d6 be 2c 2f c7 0e 5c f9 51 d7 ff c5 f0 d0 4c
ff bb 43 1a 07 b7 32 12 f8 a6 98 2c ca 5f fa 81
e0 c1 02 80 38 09 32 45 85 6b 93 55 6c 1d 3c 94
51 68 3c a6 de e8 6e 41 9d fa 68 7d 2b cb 7b 11
6a 42 c8 93 61 8a 50 1f 7c d0 5d 75 fc 2a 62 47
40 d7 63 9c 76 9a b5 e5 48 ba db 4c 63 59 11 5d
37 5c f2 09 eb a3 c1 40 38 3b 6d e7 ee ad 5f af
ff 3e 5b dd 81 55 7a 16 4e 4a fe a4 e1 bf 93 d9
25 db 8d 94 92 82 cf d2 bd b6 6b 6d 07 1c 32 bd
56 f9 bd ea f4 85 f0 d0 09 0b 04 d9 5f 8b 30 ec
b3 96 9e 6c 90 a8 09 89 08 03 8e d3 b4 4d b2 6d
7c bc ba 17 c6 98 76 4b 6e 22 e1 5a 48 d3 bc 9f
c8 08 8b 39 00 2d 94 9e 83 b1 65 05 00 1f 9c 3c
23 4d 6f 56 85 32 b8 5c 84 53 fa c1 ec ef 3f 03
60 63 b1 72 2d df 73 c1 bc e8 ef 5a 74 8b cf 77
63
exponent2 =
08 7a fb b0 85 4a ef c4 28 fa bd 82 8c c0 ac df
f1 c9 89 ab e5 cb ac 03 f7 82 52 27 4b a2 9c 76
d2 55 2a 50 cd 22 db 8b 2e 52 e6 9f 1b b4 5d 4d
9c 2b 2b a2 0b 67 89 0f 9f 59 5a 85 cb cf a6 66
7a b4 0b 25 0d 02 50 c4 59 89 a6 a8 fc b0 9b 71
5b a1 a9 64 d5 bf ee ce 02 af 0c 2c 2f 68 98 c8
5d cd 1e 37 52 60 5c 6b 11 cf 2f 7e fc 2d da fd
c0 62 5f 03 c3 10 41 ab e2 35 de b6 0e 87 75 c2
1b c5 67 82 75 eb 6e 05 61 99 c3 6b 50 3b d5 3c
a3 88 a6 0f 77 c0 f6 af be 20 d6 34 cb 38 e5 ca
8d 84 9e 53 4e b3 47 b9 d5 fd 75 5d e1 32 f7 49
fd 49 90 68 7f c2 07 d0 b6 83 5e 1a 6c f1 49 a8
fb fa d3 29 3a 35 7e 4e 71 51 c7 dc 4c 91 3c 6e
4a 27 84 10 0c 49 ae 77 1b be 0e d3 6b 90 fe 55
19 8e ac d1 4b e4 14 f7 d3 9c eb 7c 7b db 56 22
0c de f9 77 dc a8 fb 42 54 dc 1b cf 6b c1 a5 1b
coefficient =
00 9f 7d 85 a4 54 59 cc df 30 d0 11 a5 b7 5f b1
6f e4 7a 80 b7 1a 1b 5f 26 7e ff e1 3e c5 8f 00
5b ca 25 a8 86 e2 d0 89 ee 74 b5 17 91 dc 27 83
92 e3 00 14 dd 78 60 e1 6e 51 74 ac ac 41 19 34
a3 26 ec fc 63 0f 1f c3 ed c6 92 aa 18 80 bd 21
9f f1 59 34 46 fe b1 7f ec fc fd 5a f5 04 a3 11
cd 2a e1 35 c2 5e ff 0e e9 a8 f9 7d 3a 6c 52 39
7b 12 e6 df ee 48 b9 02 a5 09 1b 20 d8 bc a9 27
3c 1b cf 74 46 42 4c 5a dc 00 ed 0e 59 53 06 cc
1e 39 91 8c 00 dc e5 dd 22 fd b8 d0 eb 40 84 8d
66 ff d8 7d 5f 83 4d c8 5e c4 8c 79 c3 05 69 34
a6 81 f8 b4 57 8a b3 8b c7 23 8d 5d e8 f2 08 21
3f 4f 77 04 69 b6 d8 c4 a1 40 37 94 f7 c6 21 79
ce 44 d7 53 dd 8c e0 94 d0 66 9e 36 93 7e dd 1c
30 3e 25 dd 07 38 00 ee d7 71 c9 ce c3 c7 22 45
0b 32 de 93 05 6a b3 9c a6 1a c0 26 3e cf b5 32
7a
```

+ Oke bây giờ mình đã có prime1 với 2 và cả e nữa.

+ Bây giờ mình sẽ viết script để giải mã file `flag.enc` kia 

```
from Crypto.Util.number import *


f=open("flag.enc", "rb").read()
c=bytes_to_long(f)

p="ce39f5e24426db57bf4d4621763099905a926c9da24c5ac6dd8bb30564f75d831161ce9a05db65edbfcb466394cce54e208f9b6cdce894dd8eac7dafdc0a78149f71b080712b3312bdfb44edcb86cdefc37e266c65e72a43f6fb3ca04df77810957767ad397073131d60597f5a093af3afd6e82b835fb9b85da32fc5fbc645df474ab07add20c4234cf4cb00a1c879a2084a9fc913e4dfdd8032911c59126df27219a1f3bfa6f06ebb71d530f9560352082075397c3403ae2631a4ca0cb396f75256bd6a9d5f83befda57dae289ca3b80d785fb58f815a99e79a69f5c73c1e988b6ccccc1b7cfe9102d35d2116e02d58e96501e260054fd26a6e715fcdf23697"
q="e335020bd381a7427b52f86e43a8901e5e13946f050194798ca74f58d9c84bb430f9398daca2acaac1adbaa3c8ba194e1b7f21ab1f6ee23f6c0b22194d498697d8b656e75a26d4b278d041e580bf22ead8ab2489e25bfac55546464c1edd5d4777b91535833ea7d0b921b441d6c21ca74531efbe1d2a38050a7143d17ecec9c66d1d5308e210c127ac31d9f8296f54a4d0cf52f9c1d9ff306284cc358f9242df4978134a3c2afd78fb4546596b74f4387734654b8ac0ffc21bb5097d8136ca1300648963b5f5ecbc6630de71166af24bb7504d6c882d6269ccb1b7f38e61ed1d3a20801ca53eeadec8ab658c604cb246f17e5649103a229c53732f712301909f"

p=int(p,16)
q=int(q,16)
n=p*q
e=65537
phi=(p-1)*(q-1)
d=inverse(e,phi) #(pow(e,-1)%phi)==(e^-1)%phi
m=pow(c,d,n)  #(c^d) % n
print(long_to_bytes(m))
# print(d)
```

![image](https://github.com/KMANVK/imaginary_ctf_2023/assets/94669750/7898c187-94d1-4773-be22-e3842c5b08ea)

#flag : `ictf{oops_looks_l1ke_i_didn\'t_scrub_the_key_completely_out_of_memory}`

## foren 

### Des : 

![image](https://github.com/KMANVK/imaginary_ctf_2023/assets/94669750/a510777f-24e6-4ad8-b799-f479cb37f4a9)

### Sol : 

+ Đề cung cấp cho ta 2 file : 1 file pcap và 1 sslkeylog.
+ Nhưng file pcap đã bị hỏng @@. 

![image](https://github.com/KMANVK/imaginary_ctf_2023/assets/94669750/90575c54-bc39-4525-8708-84b6e8747848)

+ Tìm kiếm một chút về cách fix pcap trên gg thì mình tìm được [link này](https://www.netresec.com/?page=Blog&month=2022-10&post=What-is-a-PCAP-file) 

+ Dựa vào format pcap thì nó bị sai ở header và các Packet Header. 

![image](https://github.com/KMANVK/imaginary_ctf_2023/assets/94669750/d973cf59-00bb-4f5f-a20c-19a02605e661)

![image](https://github.com/KMANVK/imaginary_ctf_2023/assets/94669750/b2f2918b-315d-4127-bd09-59a47ea5f061)


+ Bây giờ có 2 cái mà chúng ta cần fix là : 
+ 1.Pcap Header : `D4 C3 B2 A1 02 00 04 00 00 00 00 00 00 00 00 00`
+ 2.Packet Header : `6E 00 00 00 6E 00 00 00`(1 ví dụ), chỉnh hết cả file. 

+ Oke bây giờ mình sẽ viết kịch bản cho nó : 

```
start_point = b'\x58\xAB\x64' # lấy gốc 

with open("forensics.pcap", 'rb') as file:
    content = bytearray(file.read())
content[:16]= b'\xD4\xC3\xB2\xA1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00'

i = 0
while i < len(content) - 11:
    if content[i:i+3] == start_point:
        content[i+7:i+11] = content[i+11:i+15] # Nếu tìm thấy đúng pattern, thay thế 4 byte tiếp theo bằng 4 byte tiếp theo sau đó
    i += 1

with open("fixed.pcap", 'wb') as file:
    file.write(content)
```

=> Mở file pcap => Export HTTP => save secret.png => nhận flag. 

![image](https://github.com/KMANVK/imaginary_ctf_2023/assets/94669750/7eace8cf-926f-46a1-b5a2-d77482795582)
