CTF[1]
Web.
Claire
- 北資一六社長 x 網管
- 競程是舊愛 而且我很爛
- 新歡大概是資安
- 但我都只打水題
樹枝爆肝仔
Who am I

1
Intro
3
Tools
5
Practice
2
Web
4
Vulnerabilities
Index
Intro
Intro
-
Web:網站
-
尋找+利用網頁有的漏洞(vulnerablility)
-
-
常用技術
-
command/code injection(指令注入)
-
SQL injection
-
XSS (Cross-site scripting)
-
Basic Concepts
Frontend & Backend
- 點餐出餐
- 使用者理所當然只能接觸到點餐的部分
- 後端負責處理各種要求
Frontend
- 所有東⻄都會直接顯⽰給使⽤者
- HTML、CSS、JS
-
ctf 很常可以從 js 裡看
或通靈出你需要找的東西
Backend
- 顧客(Client)去找提供服務端(Server)的餐廳服務生
- 提出需求要喝水(Request),服務生拿水回應需求(Response)
Frontend & Backend

Database
- 儲存與管理網站的各種資料
- 管理資料、管理權限、控制效能與備份資料
- 後端透過 SQL 指令向資料庫查詢、寫入、更新、刪除資料
HTTP/HTTPS
- Hypertext Transfer Protocal
- 向伺服器請求資料
- 用戶端-伺服器通訊的協定
HTTP
- OSI 網路通訊模型中的應用層通訊協定
-
HTTP request:
- GET:取得資料,例如打開網頁、查資料
- POST:送出資料,例如表單提交、登入操作
- HEAD、PUT、DELETE...
GET / HTTP/1.1
Host: www.google.comHTTPS
-
從獨立的憑證認證機構取得 SSL/TLS 憑證
- 數位物件
-
驗證身分後使用 SSL/TLS 協定
- 加密連線後 只有用戶端和 Web 伺服器才能看到
- 資訊回應(100~199)
- 成功回應(200~299)
- 重新導向訊息(300~399)
- 用戶端錯誤回應(400~499)
- 伺服器錯誤回應(500~599)
Web

Server Conf. Settings
robots.txt
- 指示搜尋引擎爬蟲
- 網站根目錄/robots.txt
- 不想被外界看到的隱藏路徑或檔案
- 來看看IKEA
.htaccess
- Apache目錄級設定檔
- 控制權限 重寫網址 密碼保護
- 設定規則若被公開 可能洩露進攻方向或特殊目錄資訊
.htpasswd
- 與.htaccess配合的密碼檔
- 存放帳號與加密密碼
- 嘗試破解?
.git
- Git版本控制目錄
- 版本紀錄、原始碼
- 下載完整程式碼
.DS_Store
- MacOS資料夾設定檔
- 目錄結構、隱藏資訊
Internet
-
Interconnected networks 網際網路
- Internet:網路組成的網路
- network:連接多個計算機、設備或系統使其能彼此通信
-
Protocols:裝置間互相溝通的規則
- ex. HTTP、DNS、IP、TCP、UDP
Internet Standards
- RFC:各種 protocols 的書面標準
-
IETF:網際網路工程工作小組
- 修訂 protocols 的協會
IP
- IP 位址(Internet Protocol Address)
-
分類:
- 公網 IP(Internet)
- 私網 IP(區域網路)
LAN
- 區域網路,Local Area Network
- 在同一個 network 裡
- 連到同一個 router
-
私有 IP 位址:
- 192.168.0.0–192.168.255.255
- 172.16.0.0–172.31.255.255
- 10.0.0.0–10.255.255.255
Port
- 通訊埠
-
格式:
IP:Port(ex. 192.168.1.12:8080) -
常見 Port:
-
0~1023:特定的網路服務
- 80:HTTP
- 443:HTTPS
- 22:SSH
- 53:DNS
- 1024~49151:特定的應用程式或專有軟體
- 3306:MySQL 資料庫
- 49152~65535:Public Ports
- 當用戶端連接到伺服器時,系統會自動分配一個動態端口來處理回應
-
0~1023:特定的網路服務
DNS
- 網域名稱系統 Domain Name System
- 將人們可讀取的網域名稱轉換為機器可讀取的 IP 地址
- 查詢 DNS
$ nslookup google.com
Packet
- Internet 傳資料切成很多小塊:封包
- 網路傳輸的最小單位
- 封包包含:來源 IP、目的 IP、協定、內容
- 資料傳輸:送出封包,對方收到後再組合回完整內容
Tools
F12
Elements
- 查看、編輯HTML
- 隱藏文字、註解、元素屬性
- 修改對當前的頁面渲染生效
- ctrl(cmd)+f找flag
Console
- js錯誤、輸出
- js指令試驗
- 控制台日誌:console.log()
Sources
- 當前網頁的所有源文件
- ctrl(cmd)+f
F12
Network
- 監控網頁載入請求、回放
- 查看各個資源內容、回應數據,另存為文件進行分析
- preserve log:重整不會清除
Application
- 管理網站資料
-
Cookie:
- 儲存網站資料的小型文字檔
- 記錄狀態、設定
- 造訪網站 伺服器HTTP回應Set-Cookie
- 同一網站請求自動附帶Cookie
-
修改Cookie內容嘗試權限提升
- 修改後刷新頁面
curl
curl [options...] <url>
-d, --data <data> # HTTP POST data
-f, --fail # HTTP 回傳錯誤(4xx / 5xx)時不輸出內容
-i, --include # 在輸出中包含 HTTP Response Headers
-o, --output <file> # 將回應內容輸出到 <file>
-s, --silent # 不要進度/錯誤訊息(for 大量測試)
-T, --upload-file <file> # 上傳檔案
-u, --user <user:password> # HTTP Basic Auth
-v, --verbose # 顯示完整請求和回應過程-
透過 HTTP Protocol上傳/下載的指令
-
Web 安全測試工具
-
kali 有預設裝好 community 版的 burp


commands
- 確認能否到達目標
- 看延遲、有沒有封包遺失
- timeout:無法到達
- ICMP 網際網路控制訊息協定
$ ping google.com- Netcat
- TCP/UDP 網路程式
- 可以做網路連線和其他客戶端或伺服器端連線
$ nc <ip> <port>
- 用來看封包長什麼樣子
-
可以用 Filter 過濾協定、內容...
- 點封包會有 Packet List、Packet Details、Packet Bytes


Vulnerabilities
XSS
- 輸入欄位或沒被驗證的參數被嵌入在網頁的程式碼
- 使用者瀏覽頁面時觸發輸入中的惡意程式
Reflected XSS
- 將惡意程式會藏在網址列裡
-
User 點擊 URL 攻擊才會生效
- 短網址、HTML Encoder
http://www.example.com/upload.asp?id=<script>alert(1);</script>
XSS
Stored XSS
- 將 Javascript 儲存在伺服器的資料庫中
- 注入留言板,網頁會載入留言板使 User 受到攻擊
DOM XSS
- 將惡意程式會藏在網址列裡
- User 點擊 URL 攻擊才會生效
<img src=# onerror=”alert(1)”>
我是壞人! <script>alert(1);</script>SQLi
- \SQL 的註解:
- 單行 --
- /* 包住 */
<?php
$username = $_GET['username']; // 輸入 ' OR 1=1" --
$result = mysql_query("SELECT * FROM users WHERE username='' OR 1=1" -- '");
?><?php
$student = $_GET['student']; // claire
$result = mysql_query("SELECT * FROM users WHERE student='claire'");
?>CRLF
-
空行 CR+LF:\r+\n
-
在可以插入字串的地方插入 CRLF
-
欺騙伺服器告訴這裡我們這邊提早換行
-
在後面插入惡意的 payload
-
如果 Hacker 能操縱 Server Client 傳輸的 header
-
302 Found => redirect
-
把 reflected XSS url 塞在"\r\n"後面
-
得到 cookie & session
-
-
把釣魚連結塞在"\r\n"後面
-
-
-
預防方法
-
對要 redirect 的內容 urlEncode
-
檢查 respond header 的內容 過濾掉多的"\r\n"
-
CSRF
- 跨站請求偽造 Cross Site Request Forgery
- 強迫使用者在已驗證身份的網站中執行惡意的偽造操作
-
範例流程:
- 使用者成功登入銀行,代表使用者身份的 cookie 在本地保存
- 惡意網站有程式碼
<img
src="http://bank.com/transfer.do?acct=BadGuy&amount=100000 HTTP/1.1"
width="0"
height="0"
/>
CSRF
- 預防方式
- 比較危險的操作增加一些驗證
-
不要用
GET來做關鍵操作-
POST請求需要使用者的提交動作才能觸發
-
- 辨識請求來自哪個網站
-
CSRF token
- 伺服器端為每個請求或每個 session 生成一次
- 客戶端可以在表單中用隱藏字段儲存
- SameSite cookies
- HTTP 回應標頭中的
Set-Cookie的屬性 - Strict 限制其他 Domain 來的任何請求都不帶上 Cookie
- Lax 限制
POST、DELETE、PUT都不帶上 Cookie,GET會帶上 Cookie
- HTTP 回應標頭中的
Command Injection
-
可以透過這個漏洞去執行伺服器的命令
-
可以做到遠端程式碼執行
-
ex :
-
php
-
python :
-
os.system()
-
subprocess.call()
-
os.popen()
-
-
-
常發生於 ping 測試
-
IOT 設備常用
-
Command Injection
命令連接
- 作業系統中執行命令可以連續執行多個命令
-
;:命令終止符號 -
&:讓指令在後台運行 -
|:pipe,將前項命令的輸出當成後項命令的輸入 -
||:第一個命令失敗才執行下一個 -
&&:第一個命令失敗不再執行下一個 -
`:讓 ping 失敗 - 常用的 Payload
Command Injection
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv) {
char cat[] = "cat ";
char *command;
size_t commandLength;
commandLength = strlen(cat) + strlen(argv[1]) + 1;
command = (char *) malloc(commandLength);
strncpy(command, cat, commandLength);
strncat(command, argv[1], (commandLength - strlen(cat)) );
system(command);
return (0);
}$ ./catWrapper Story.txt
When last we left our heroes...- 正常使用
Command Injection
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv) {
char cat[] = "cat ";
char *command;
size_t commandLength;
commandLength = strlen(cat) + strlen(argv[1]) + 1;
command = (char *) malloc(commandLength);
strncpy(command, cat, commandLength);
strncat(command, argv[1], (commandLength - strlen(cat)) );
system(command);
return (0);
}$ ./catWrapper "Story.txt; ls"
When last we left our heroes...
Story.txt doubFree.c nullpointer.c
unstosig.c www* a.out*
format.c strlen.c useFree*
catWrapper* misnull.c strlength.c useFree.c
commandinjection.c nodefault.c trunc.c writeWhatWhere.c- 加分號後放另一個 command
Practice
Thank You!

CTF[1]
By Claire Pan
CTF[1]
- 21