---
# System prepended metadata

title: '[109-1] Web Security Basic 3'
tags: [109-1 共筆]

---

# [109-1] Web Security Basic 3

###### tags: `109-1 共筆`

:::info
- 講者：[KaiBro](http://cv.kaibro.tw/)
- 共筆：https://hackmd.io/@NTUST-Hack/1091-2
- Slide: https://drive.google.com/file/d/1_Z4dOdoTrHV9TywdnLVOXLXzKN61D4V0/view
- YouTube: https://youtu.be/JTJ5iujvUyM
:::
## 序列化與反序列化
### 序列化
- 儲存資料的方法
- 常用在RPC RMI
![](https://i.imgur.com/dVM6BB5.png)
- 例子
    - php 的陣列(array)
    - xml json
### 反序列化
- 錯誤通常出現在反序列化
- 可以呼叫 method master
- 讓他執行你想要執行的function
- 每個程式序列化格式大同小異
- （不過呼叫的function才是重點）
#### 以php舉例
- 序列化機制
    - Object會對應到Class
    - Class必須被定義
- 資料型別
    - String
    - Interger
    - Boolean
    - Array
    - Object
        - O:class{1:1:1,2:2:2}
- 變數差異
    - public
    - private
        - null byte把Class name包起來
    - protected
        - null byte把*包起來
    - null byte是看不到的所以容易忘記
- PHP Magic Method
    - __wakeup()
        - 每當他反序列化
    - __destruct()
        - 銷毀物件時
    - __toString()
        - 轉成字串時
    - __call()
        - 不知到要呼叫什麼的時候
    - 還有很多...
    
> 反序列化題目通常會自己寫PHP code去生payload

#### POP Chain
* 串 Gadget 形成攻擊鏈拿來利用
- 白箱比較容易取得RCE
#### Phar
- 壓縮格式
- metadata會被反序列化

### python pickle
- 序列化: pickle.dumps()
- 反序列化: pickle.loads()
- stack base
- 直接丟class就能function了ㄛ
### java
- 很多第三方lib所以可以運用他來變成gadget chain
- [ysoserial](github.com/frohoff/ysoserial)
## SSRF
- 讓伺服器發送請求往內網發送請求
- 可以摸到內網資源
### XSPA
- Port Scan
- 內網ip scan
    - 127.0.0.1/8
    - 192.168.0.0/16
    - 10.0.0.0/8
    - 172.16.0.0/12
- XXE
- FFMPEG
- Database內建函數
- ImageMagick


## Gopher
- 可建構任意TCP封包




## 聊天區