---
# System prepended metadata

title: Write-up PTIT-CTF 2023

---

# Write-up PTIT-CTF 2023
## Họ và tên: Đặng Trung Kiên 
## MSV: B22DCCN426

### Challenge 1: For1
![](https://i.imgur.com/nCXWsX5.png)
Chúng ta nhận được một file nén dưới dạng .rar. Chúng ta tiến hành tải và giải nén file:

Sau khi giải nén file ta nhận được một thư mục. Dùng lệnh **tree** ta thấy được trong thư mục chứa rất nhiều thư mục con và trong các thư mục con lại chứa nhiều file .txt
![](https://i.imgur.com/qNuWkUr.png)
Vì flag có dạng **ATTT{This_is_Flag}** nên ta dùng lệnh:
```bash
$ grep -r ATTT
```
để tìm flag trong tất cả các thư mục. Sau khi chạy lệnh thì ta nhận được cờ:
![](https://i.imgur.com/fGaXGb4.png)
```
Flag: ATTT{https://www.youtube.com/watch?v=4qNALNWoGmI}
```
Submit flag ta nhận được thông báo CORRECT => REAL_FLAG

### Challenge 2: Crypto1 
#### Point: 100
![](https://i.imgur.com/DMHycyG.png)
Ở đây chúng ta nhận được 2 file **bases.txt** và **enc.cpp**

Mở file **bases.txt** ta được một loạt các ký tự
```
101 84 54 84 173 77 65 111 167 95 6d 101 157 119 5f 109 145 111 77 95 155 101 6f 119 137 116 72 97 137 108 61 105 137 116 61 109 137 116 72 105 137 116 6f 105 137 100 61 121 175
```
Mở file **enc.cpp** ta được đoạn code mã hoá
```cpp
#include <iostream>                                                                                                                     
#include <string>
using namespace std;

#define EL printf("\n")

string flag = "ATTT{fake_flag}";

void bases(string &s) {
    for (int i = 0; i < s.size(); i += 4)
        printf("%o %u %x %u ", (unsigned char) s[i], (unsigned char) s[i + 1], (unsigned char) s[i + 2], (unsigned char) s[i + 3]);
    EL;
}

int main() {
    freopen("bases.txt", "w", stdout);
    bases(flag);

    return 0;
}
```
Đọc đoạn code trên ta thấy hàm **base** là hàm mã hoá. Hàm này sẽ đọc từng ký tự của **s** và chuyển nó theo các định dạng là `%o %u %x %u ` rồi in vào file **bases.txt**

Như vậy chúng ta chỉ cần viết một đoạn code để chuyển từ các định dạng trên trong file **bases.txt** về dạng ký tự thì chúng ta sẽ được flag

```c
#include<stdio.h>                                                                                                                       
#include<stdlib.h>

int main() {
    FILE *f;
    f = fopen("bases.txt", "r");
    int a;
    int i = 1;
    while (!feof(f)) {
        if ( i % 4 == 1) fscanf(f, "%o ", &a);
        if ( i % 2 == 0) fscanf(f, "%u ", &a);
        if ( i % 4 == 3) fscanf(f, "%x ", &a);
        printf("%c", a);
        i++;
    }
    fclose(f);
    printf("\n");
    return 0;
}

```
Trên đây là một đoạn code ví dụ. Sau khi chạy đoạn code này chúng ta sẽ thu được flag
![](https://i.imgur.com/qb0D3ww.png)
```
Flag: ATTT{Meow_meow_meow_meow_tra_lai_tam_tri_toi_day}
```
Submit flag ta nhận được thông báo CORRECT => REAL_FLAG