---
# System prepended metadata

title: HKCERT CTF
tags: [KCSC]

---

# HKCERT CTF

## New Free Lunch

![image](https://hackmd.io/_uploads/BJ-6fKTb1l.png)

- chúng ta cần có trên 300 điểm để lấy flag 
### Phân tích 

Sau khi bạn hoàn thành trò chơi, Điểm sẽ được cập nhật vào cơ sở dữ liệu qua /update_score.php

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

- để ý mã nguồn khi endgame 
- em thấy chuỗi hash được gửi lên server có chứa secretKey(đã biết), username va điểm sau khi kết thúc lượt chơi và chúng được cộng chuỗi rồi hash theo sha256


![image](https://hackmd.io/_uploads/HJO9Vtp-1e.png)


- vậy để update số điểm của mình trên 300 em chỉ cần tạo ra chuỗi hash theo các bước tương tự và thay đổi điểm



### Khai thác 

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


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

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

## Webpage to PDF (1)

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

### Phân tích 

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


- web nhận vào 1 url và trả về bản pdf từ trang html của url

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

- đọc đoạn code xử lý em thấy file pdf được tạo ra bằng cách chuyển đổi file html qua pdf bởi lệnh wkhtmltopdf
- với tên file được lấy từ trong cookie do người dùng kiểm soát và có thể khai thác command injection tại đây

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

### Khai thác 

- tuy nhiên khi em chèn command thấy thực thi lỗi 

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

- khai thác theo hướng LFI
- khi ứng dụng nhận vào 1 file html chúng ta có thể chèn thẻ ```<iframe src="file:///flag.txt" height="500" width="500">``` để thử chèn các file local vào tài liệu html biết flag nằm ở ```/```

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

- để tạo trang html em dùng https://jsbin.com/?html,output

![image](https://hackmd.io/_uploads/B1Snh5T-yx.png)

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

- tuy nhiên khi gửi tài liệu này suất hiện lỗi block access to file 

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

- và lý do bởi wkhtmltopdf sẽ tắt truy cập vào local file theo mặc định 
- và để giải quyết vẫn đề này chúng ta chỉ cần thêm  cờ ```--enable-local-file-access``` vào lệnh wkhtmltopdf 
- mà chúng ta có thể chèn thêm cờ này thông qua cookie

![image](https://hackmd.io/_uploads/BkMKTqa-kx.png)


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


- Chức năng chuyển hướng bị hỏng vì tệp này  sẽ được tạo tại {session_id}.pdf. Xóa khỏi --enable-local-file-access%20URL, sau đó bạn có thể lấy được cờ


![image](https://hackmd.io/_uploads/HkqEPqT-1g.png)



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



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


## Webpage to PDF (2)


![image](https://hackmd.io/_uploads/r1kWZoa-yg.png)

### Phân tích 

- tương tự lab trên thì ứng dụng chuyển trang html sang pdf nhưng lần này có sử dụng thư viện để thực hiện thay vì gọi lệnh hệ thống như trước 

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

- và theo mặc định  khi chuyển đổi sang pdf thì pdfkit sẽ tắt truy cập local file và muốn thực hiện điều này thì phải cấu hình trong source code

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

- em lên tải source code của thư viện này về phân tích 

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

- đáng chú ý có đoạn code sử lý html chúng ta chuyền tới 


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

- Đoạn code này trích xuất thông tin từ các thẻ ```<meta>``` trong nội dung HTML (content). Cụ thể, nó tìm kiếm các thẻ ```<meta>``` có thuộc tính name bắt đầu với một tiền tố 

![image](https://hackmd.io/_uploads/SJ730oa-1e.png)

sau đó lấy giá trị content tương ứng. Kết quả sẽ là một dictionary chứa các cặp name và content từ các thẻ ```<meta>``` phù hợp.
- Trả về dictionary found, chứa các cặp name và content từ các thẻ ```<meta>``` phù hợp.

![image](https://hackmd.io/_uploads/H1YUWnT-1e.png)

-  đoạn mã này nhằm mục đích khởi tạo self.options và cập nhật nó với các tùy chọn tìm thấy từ hàm _find_options_in_meta nếu self.source là một chuỗi.

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

- option sẽ được truyền vào và thực thi 


### Khai thác 

- vậy em tạo trang html với ```<meta name="pdfkit---enable-local-file-access" content="">``` để cho bật cờ ```--enable-local-file-access``` cho phép đọc file local


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


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


