WWW
by watermelon
推個研究大攝影
這頁真是做的可有可無
這句也是
這句也是
這句也是
這句也是
這句也是
這句也是
尋找+利用網頁有的漏度(vulnerablility)
常用技術
command/code injection(指令注入)
SQL injection
XSS(Cross-site scripting)
常被比喻成網站的「骨架」,構成網頁的各個組件
每個部件都是一個標籤 以尖括號表示 結尾符號會加上"/"
例: <p>ian is dian</p>
前端網站必備
還可以加上屬性"attribute"
常被比喻為網站的「外表」:控制字體 顏色 大小 動畫 佈局
無法獨自使用 必需配合html/xml(標記語言們)
可以放在html裡面或者獨立成.css
其實可以不要存在 但網站變超醜
跟java沒半沒半毛錢關係 單純跟風
可以被比喻為人的神經和肌肉:處理互動和行為邏輯
語法簡單 快 相容性佳 但安全性較低(你看人家rust)
可以沒有 例如一些簡單的blog就不需要js
-- SQL關鍵字多用大寫
-- 回傳指定範圍
SELECT 欄位名稱 FROM 表格名稱
-- 舉例:從database中回傳所有欄位(列出表格內容)
SELECT * FROM database
-- 加上判斷條件
SELECT 欄位名稱 FROM 表格名稱 WHERE 條件
-- 舉例:從User資料庫回傳年齡 > 25 的 姓名、年齡
SELECT 姓名, 年齡 FROM Users WHERE 年齡 > 25;
/* 相等在SQL中是"=" 不是 "==" */
複習一下小黑講的網路概論吧
POST /login?redirect=%2f HTTP/1.1\r\n
Host: example.com\r\n
Referer: http://example.com/index\r\n
User-Agent: Mozilla/5.0 ......\r\n
Content-Length: 32\r\n
\r\n
username=melon&password=p455w0rd
\r\n: CR LF換行
POST /login?redirect=%2f HTTP/1.1\r\n
Host: example.com\r\n
Referer: http://example.com/index\r\n
User-Agent: Mozilla/5.0 ......\r\n
Content-Length: 32\r\n
\r\n
username=melon&password=p455w0rd
動作 告訴伺服器你要幹嘛
動作 告訴伺服器你要幹嘛(all methods)
<網址>?<參數名1>=<值1>&<參數名2>=<值2>......
參數可以沒有+直接顯示在網址上
方便使用
安全性低:只能讀取
開網址也算是get
動作 告訴伺服器你要幹嘛(all methods)
參數傳遞:包含在本文內
相對安全
經常用來上傳表單 檔案等等
POST /login?redirect=%2f HTTP/1.1\r\n
Host: example.com\r\n
Referer: http://example.com/index\r\n
User-Agent: Mozilla/5.0 ......\r\n
Content-Length: 32\r\n
\r\n
username=melon&password=p455w0rd
指在server端的路徑
路徑+get的parameter
如例: https://example.com/login?redirect=%2f
POST /login?redirect=%2f HTTP/1.1\r\n
Host: example.com\r\n
Referer: http://example.com/index\r\n
User-Agent: Mozilla/5.0 ......\r\n
Content-Length: 32\r\n
\r\n
username=melon&password=p455w0rd
協議的版本(HTTP/3是udp)
POST /login?redirect=%2f HTTP/1.1\r\n
Host: example.com\r\n
Referer: http://example.com/index\r\n
User-Agent: Mozilla/5.0 ......\r\n
Content-Length: 32\r\n
\r\n
username=melon&password=p455w0rd
要告訴伺服器附加資訊
POST /login?redirect=%2f HTTP/1.1\r\n
Host: example.com\r\n
Referer: http://example.com/index\r\n
User-Agent: Mozilla/5.0 ......\r\n
Content-Length: 32\r\n
\r\n
username=melon&password=p455w0rd
get類型的method沒有
HTTP/l.1 302 Found
Content—Length: 35\r\n
Content—Type: text/html; charset=UTF—8\r\n
Location: https://examp1e.com\r\n
Server: Apache/2.4.41 (Ubuntu)\r\n
\r\n
Redirecting to <a href:“/”>/</a>....
HTTP/l.1 302 Found
Content—Length: 35\r\n
Content—Type: text/html; charset=UTF—8\r\n
Location: https://examp1e.com\r\n
Server: Apache/2.4.41 (Ubuntu)\r\n
\r\n
Redirecting to <a href:“/”>/</a>....
Status Code
存一些在Server side
可辨認Cookie有沒有被修改過
沒有Session id
很久沒登入/沒登入過
創建+回傳Session id
很久沒登入/沒登入過
Session id
ID
Session id 包含在cookie中
很久沒登入/沒登入過
Session id
ID
Session id
很久沒登入/沒登入過
ID
: Session_id=ckefgisc
比較
{cookie,session_id}
很久沒登入/沒登入過
ID
: Session_id=ckefgisc
比較
{cookie,session_id}
正確
👍
很久沒登入/沒登入過
ID
: Session_id=ckefgisc
比較
{cookie,session_id}
正確
👍
錯誤
shift + ctrl + I
連結:V宅注意!!
Network
怎麼啥都沒有?
要開啟這個頁面
才會開始紀錄
=>refres
Application
Application
記錄和管理網站需要的資源和數據
瀏覽器永久存儲
Session
資料庫
cookie
暫存
curl 'https://example.com'
-i/--include # 顯示 response header
-v/--verbose # 詳細資料
-d/--data 'key=value&a=b' # HTTP POST
-X/--request 'PATCH' # Request method
-H/--header 'Host: fb.com' # 設定 header
-b/--cookie 'user=guest;' # 設定 cookie
-o/--output 'output.html' # 下載(引號內為自訂檔名)
-O # 不需要設定檔名的下載
-C # 被打斷後繼續下載
-L # 會跟著301 302跳轉
測試/學習常見的漏洞
<?php
$page = $_GET['page']; // index.php
include("/var/www/html/" . $page);
?>
<?php
$page = $_GET['page']; // ../../../../../../../etc/passwd
include("/var/www/html/" . $page); /var/www/html/../../../../../../../etc/passwd
?>
<script>
// 獲取 URL 中的 'message' 參數
const urlParams = new URLSearchParams(window.location.search);
const message = urlParams.get('message');
// 直接將 message 插入到 DOM 中
document.getElementById('message').innerHTML = message;
</script>
message=<script>alert(1);</script>
GET + XSS payload
message=<script>alert(1);</script>
GET + XSS payload
respond with XSS payload
// 把hash部分(不是 GET respond:不經過server) 插入頁面
var search = window.location.hash.substring(1);
document.getElementById("result").innerHTML = search;
XSS url:
http://example.com/#<script>alert('DOM XSS')</script>
htmlspecialchars()
StringEscapeUtils.escapeHtml()
element.textContent = str;
url編碼:同理// 危險喔
document.getElementById('message').innerHTML = userInput;
document.write(userInput);
// 安全喔
document.getElementById('message').textContent = userInput;
// 只有修改文字部分
<?php
$username = $_GET['username'];
$result = mysql_query("SELECT * FROM users WHERE username='$username'");
?>
<?php
$username = $_GET['username']; // melon
$result = mysql_query("SELECT * FROM users WHERE username='melon'");
?>
<?php
$username = $_GET['username']; // 輸入 '
$result = mysql_query("SELECT * FROM users WHERE username='''");
?>
報錯囉
<?php
$username = $_GET['username']; // 輸入 ' OR 1=1
$result = mysql_query("SELECT * FROM users WHERE username='' OR 1=1'");
?>
多的單引號怎麼辦?
<?php
$username = $_GET['username']; // 輸入 ' OR 1=1
$result = mysql_query("SELECT * FROM users WHERE username='' OR 1=1'");
?>
多的單引號怎麼辦?
<?php
$username = $_GET['username']; // 輸入 ' OR 1=1
$result = mysql_query("SELECT * FROM users WHERE username='' OR 1=1'");
?>
多的單引號怎麼辦?
<?php
$username = $_GET['username']; // 輸入 ' OR 1=1
$result = mysql_query("SELECT * FROM users WHERE username='' OR 1=1'");
?>
多的單引號怎麼辦?
<?php
$username = $_GET['username']; // 輸入 ' OR 1=1
$result = mysql_query("SELECT * FROM users WHERE username='' OR 1=1'");
?>
多的單引號怎麼辦?
<?php
$username = $_GET['username']; // 輸入 ' OR 1=1" --
$result = mysql_query("SELECT * FROM users WHERE username='' OR 1=1" -- '");
?>
SQL的註解:
單行 --
/* 包住 */
HTTP/1.1 302 Found
Host :example.com\r\n
header內容....\r\n
\r\n
body內容....
HTTP/1.1 302 Found
Host :example.com\r\n
header內容....\r\n
\r\n
body內容....
HTTP/1.1 302 Found
Host :example.com\r\n \r\n <script>alert(1)</script> \r\n
header內容....\r\n
\r\n
body內容....
HTTP/1.1 302 Found
Host :example.com\r\n \r\n <script>alert(1)</script> \r\n
header內容....\r\n
\r\n
body內容....
HTTP/1.1 302 Found
Host :example.com\r\n
\r\n
<script>alert(1)</script> \r\n
header內容....\r\n
\r\n
原本body內容....
這不就是XSS🤨🤨
User訪問+login
web A
A網站生成並回傳cookie
User跑去逛釣魚網站
釣魚網站用剛剛的餅乾發Request給web A
A辨識Cookie後覺得是
User在操作 便准許了操作(例如:把錢全部轉走)
import os
domain = user_input() # google.com
os.system('ping ' + domain)
控制符=>分號(;)
cmd1 ; cmd2
先執行cmd1 再執行cmd2
想想user_input該放啥
舉例:python
includes:https://play.picoctf.org/practice/challenge/274
Cookies:https://play.picoctf.org/practice/challenge/173
GET aHEAD:https://play.picoctf.org/practice/challenge/132
dont-use-client-side:https://play.picoctf.org/practice/challenge/66
logon:https://play.picoctf.org/practice/challenge/46
insp3ct0r:https://play.picoctf.org/practice/challenge/18
------------------------------------------------------------------------------
sql injection
Irish-Name-Repo 1:https://play.picoctf.org/practice/challenge/80
command injection
https://play.picoctf.org/practice/challenge/202