{%hackmd @themes/orangeheart %}
# KCSC_TTV (Lê Thanh Trọng - AT19N0142 - MN)
## For
### VBS
Bài này thì có ta 1 file ``code.zip``, muốn unzip được file thì đã phải cần password. Do đó mình sử dụng ``fcrackzip`` để bruteforce password của file zip.

Sau khi tìm được password unzip thì mình tiếp tục dùng lệnh ``strings`` cho file ``code.vbs`` thì tìm được 1 đoạn sau.

Truy cập vào đường link của trang pastebin thì được 1 chuỗi base64

Cuối cùng chỉ cần decode nó ra là có flag
> KCSC{Vb4_h01_lor""_ae_th0ng_c4m_=(((}
## RE
### Real Warmup
Bỏ file ``chall.exe`` vào ida ta thấy có 1 chuỗi, decode chuỗi đó bằng base64 thì có được flag.

> KCSC{Ch40_M|_|n9`_D3N'_V01'_77\/_KCSC}
### Hide And Seek
Đầu tiên mình sử dụng ``strings`` vào file ``exe`` thì thấy được 1 chuỗi sau, đọc qua thì nó cho 1 mảng và cho từng phần tử trong mảng đó xor với ``0x55`` thì sẽ trả về FLAG

```
flagArray = [30, 22, 6, 22, 46, 43, 125, 11, 123, 10, 123, 124, 104, 11, 123, 10, 123, 11, 104, 125, 123, 10, 123, 11, 124, 43, 40]
flag = ''
for i in range(len(flagArray)):
flag += chr(flagArray[i] ^ 0x55)
print(flag)
```
> KCSC{~(^._.)=^._.^=(._.^)~}
### Awg Mah Back
source:
```
from pwn import *
with open('flag.txt', 'rb') as (f):
flag = f.read()
a = flag[0:len(flag) // 3]
b = flag[len(flag) // 3:2 * len(flag) // 3]
c = flag[2 * len(flag) // 3:]
a = xor(a, int(str(len(flag))[0]) + int(str(len(flag))[1]))
b = xor(a, b)
c = xor(b, c)
a = xor(c, a)
b = xor(a, b)
c = xor(b, c)
c = xor(c, int(str(len(flag))[0]) * int(str(len(flag))[1]))
enc = a + b + c
with open('output.txt', 'wb') as (f):
f.write(enc)
```
script:
```
from pwn import *
import base64
def decrypt():
with open("output.txt", 'rb') as f:
enc_flag = f.read()
a = enc_flag[0:len(enc_flag) // 3]
b = enc_flag[len(enc_flag) // 3:2 * len(enc_flag) // 3]
c = enc_flag[2 * len(enc_flag) // 3:]
c = xor(c, int(str(len(enc_flag))[0]) * int(str(len(enc_flag))[1]))
c = xor(b, c)
b = xor(a, b)
a = xor(c, a)
c = xor(b, c)
b = xor(a, b)
a = xor(a, int(str(len(enc_flag))[0]) + int(str(len(enc_flag))[1]))
dec_flag = a + b + c
return dec_flag
decrypted_flag = decrypt()
a = base64.b64decode(decrypted_flag)
b = base64.b64decode(a)
c = base64.b64decode(b)
print(c)
```
Bài này thì sau khi xor ngược lại theo source thì nó xuất hiện mấy đoạn mã giống base64, sau đó chỉ cần decode 3 lần là xong.
> KCSC{84cK_t0_BaCK_To_B4ck_X0r`_4nD_864_oM3g4LuL}
### Images
Bài này chỉ cần nhìn giá trị giống bảng mã ``ascii`` và giá trị của ``imul`` thì chính là vị trí của kí tự trong chuỗi sau đó ghép lại với nhau là ra flag =)))))))))))))))))
> KCSC{Cam_on_vi_da_kien_nhan_nhin_het_dong_anh_nay`}
## PWN
### A gift for pwners
Sau khi mở gift bằng ida ta tìm được 3 phần của flag và nối nó lại.



> KCSC{A_gift_for_the_pwners_0xdeadbeef}
### Linux command
source:
```
#include <stdio.h>
#include <string.h>
void hidden()
{
printf("Semicolon Operator in Linux");
printf("part 1: KCSC{Linux_");
}
int main()
{
setbuf(stdin, 0);
setbuf(stdout, 0);
setbuf(stderr, 0);
printf("What is your name: ");
char name[0x20];
scanf("%31s", name);
strncpy(name, "echo \"Welcome to KCSC\"", 22);
system(name);
}
```
part 1: ``KCSC{Linux_``
Ta có thể thấy biến ``name`` được khai báo với ``32byte`` nhưng nó chỉ nhận có ``31byte`` vào
```strncpy(name, "echo "Welcome to KCSC"", 22);```
Dòng này gán 22byte đầu vào name là ``echo "Welcome to KCSC"``, ở byte tiếp theo mình sẽ tạo shell
``aaaaaaaaaaaaaaaaaaaaaa;sh``

Ta nối các phần lại với nhau là xong
> KCSC{Linux_Commands_You_MUST_Know_bc6680c1a0d13d77_8d73c59185b1e412}
## CRYPTO
### Ez_Ceasar
source:
```
import string
import random
alphabet = string.ascii_letters + string.digits + "!{_}?"
flag = 'KCSC{s0m3_r3ad4ble_5tr1ng_like_7his}'
assert all(i in alphabet for i in flag)
key = random.randint(0, 2**256)
ct = ""
for i in flag:
ct += (alphabet[(alphabet.index(i) + key) % len(alphabet)])
print(f"{ct=}")
# ct='ldtdMdEQ8F7NC8Nd1F88CSF1NF3TNdBB1O'
```
script:
```
import string
import random
alphabet = string.ascii_letters + string.digits + "!{_}?"
ct = 'ldtdMdEQ8F7NC8Nd1F88CSF1NF3TNdBB1O'
key = 42
def decrypt(ciphertext, key):
plaintext = ""
for char in ciphertext:
if char in alphabet:
index = (alphabet.index(char) - key) % len(alphabet)
plaintext += alphabet[index]
else:
plaintext += char
return plaintext
decrypted_text = decrypt(ct, key)
print(f"Decrypted text: {decrypted_text}")
```
> KCSC{C3as4r_1s_Cl4ss1c4l_4nd_C00l}
## MISC
### Prog1: Max
```
from pwn import *
import json
def find_max_value(arr):
if not arr:
return None
max_value = arr[0]
for num in arr:
if num > max_value:
max_value = num
return max_value
f = remote("103.162.14.116", 14002)
for i in range(500):
f.recvuntil(b'arr = ')
a = json.loads(f.readline())
a = find_max_value(a)
f.sendlineafter("max = ", str(a).encode())
```
> KCSC{Ezzz_Programmingggg}
### Prog4: Requiem
```
from pwn import *
import json
def calc(n):
if n == 0:
return 1
elif n % 2 == 0:
return n * calc(n - 1)
else:
return n + calc(n - 1)
f = remote("103.162.14.116", 14005)
f.recv()
for i in range(500):
f.recvuntil("n = ")
recv = json.loads(f.recvline().decode().strip("\n"))
n = recv
# print(n)
a_n = calc(n)
f.sendlineafter("= ", str(a_n).encode())
f.recvline()
```
> KCSC{KOREGA_REQUIEM_DA!!!_WWHaaaaaa___}
## WEB
### Pokemon Hof Panel Level 1

Challenge này cho ta 1 form để nhập tên và chọn loại pokemon để bắt đầu, sau khi hoàn thành bước này thì trang web trả về là ``access denied``, tiếp tục check phần cookie và decode nó ra

Tiếp theo mình chỉ việc sửa ``b:0`` thành ``b:1`` sau đó encode nó lại và gửi request với cookie vừa encode
> KCSC{n0w_y0u_kn0w_s3r1al1z3_f0m4rt}
### Mi Tom Thanh Long

Challenge đưa ta vào 1 trang web pr trá hình, click vào phần ``FLAG`` thì có thể thấy thấy FLAG đang ở trong phần ``pages/flag.php``, tiếp theo mình test payload ``../../../etc/passwd`` lên phần tham số page, xuất hiện lỗi ``LFI``

Tiếp theo mình sẽ đọc phần nội dung chứa ``FLAG`` với payload ``php://filter/convert.base64-encode/resource=pages/flag.php``

Sau đó decode chuỗi base64 ra thì ta có được ``FLAG``
> KCSC{Lan_Dau_Tien_Trai_Thanh_Long_Co_Trong_KCSC:))}
### Apply To KCSC
Challenge này cho 1 form để điền và upload 1 file pdf, dự đoán đây có thể là ``upload file vuln``

Đầu tiên mình tạo 1 file ``php.php`` với nội dung như sau để test
```
<?php phpinfo(); ?>
```
Sau đó upload file lên trang web nhưng trang web chỉ nhận những file pdf, do đó ở phần ``Content-Type`` mình sửa thành ``pdf`` và thế là mình có thể upload file thoải mái

Tiếp theo mình list các file ra bằng hàm ``system``, và thấy được ở client trả về ``FLAG``

Cuối cùng chỉ sử dụng hàm ``system`` để ``cat /flag`` nữa là xong
> KCSC{W3lc0m3_T0_KCSC_2023____}
### WarmupPHP 01
Challenge đưa ta vào 1 trang web bình thường chả có gì ngoài tham số ``name`` trên URL, mình thử vào tệp ``robots.txt`` thì thấy có source trong này.

Sau khi test thử 1 vài payload thì mình thấy đây là lỗi ``SSTI`` và trong source có thư viện ``smarty`` nên mình nghĩ đấy là lỗi ``smarty SSTI``

Tiếp theo nhìn vào source ta thấy biến ``$flag1`` được chứa trong ``FLAG1``, do đó mình sẽ xuất ``FLAG1`` ra với ``{FLAG1}`` và có được flag
> KCSC{warmup01_begin_using_smarty}