## .net 安全漏洞演講 ### 名詞 CVSS 全球漏洞資料庫 #### 開發生命週期 需求 分析設計架構規劃 程式撰寫 測試與驗收 部屬及維運 #### 為什麼會產生漏洞 安全漏洞 系統保護不足 自動化不足(人為疏失,統計研究發現82%) #### 風險管控措施 1. 接受:當風險機率相對低或風險淺在影響較小時,企業會選擇接受風險 2. 規避:最直接策略,若應用系統為內部、測試系統、可評估需求 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;完全避免或停止使用、下架該系統 4. 轉嫁:購買保險(資安險) 5. 降低:利用非修改原始碼的方式,達到防護,調整網路架構之類的 ### 其他 ## 漏洞 vs 弱點 ![S__12926979](https://hackmd.io/_uploads/HJO_7JQMkx.jpg) ## 模擬演練 ### SQL Injection <b>攻擊者通過將惡意的 SQL 查詢注入到應用程式的輸入字段中,來操控數據庫執行未經授權的操作</b> ex:搜尋的SQL語法 ``` String query = "SELECT T FROM Transactions T WHERE T.ownerAccountid = " + accountId; if (!StringUtils.isEmpty(searchTerm)) { query += " AND T.description LIKE '%" + searchTerm + "%'"; } //SQL SELECT * FROM Transactions T WHERE T.ownerAccountId = 2 AND T.description LIKE '%%' ``` 1. 首先,搜尋框裡輸入 `-` 如有顯示錯誤,代表說SQL是有機率可被 SQL Injection <font color="red">Exception when searching transactions, error: SQLite Error 1: 'unrecognized token: "' ) AS "v" LEFT JOIN "Accounts" AS "a" ON "v"."OwnerAccountId" = "a"."Id" LEFT JOIN "Accounts" AS "a0" ON "v"."ForeignAccountId" = "a0"."Id""'.</font> ``` SELECT * FROM Transactions T WHERE T.ownerAccountId = 2 AND T.description LIKE '%'%' ``` 2. 接下來再輸入以下SQL語法 `' OR T.OwnerAccountId = 1 --` 把後面的%註解,並把相關重要的欄位給撈出來 ``` SELECT * FROM Transactions T WHERE T.ownerAccountId = 2 AND T.description LIKE '%' OR T.OwnerAccountId = 1 --%' ``` ### Reflected XSS <b> 攻擊者利用這種漏洞將惡意代碼注入到目標網站,並將這些代碼「反射」到使用者的瀏覽器上</b> 1. 點選View按鈕(取得id),藉由右側的HTML,進而動態改變URL *備註:`<span th:utext="${invoiceId}"></span>` utext :可執行JavaScript text :不可執行JavaScript ![image](https://hackmd.io/_uploads/Hk0DIqXGkl.png) 點選後的URL ![image](https://hackmd.io/_uploads/SytFD5mMJe.png) 2. 那因為他屬性為`utext`,所以URL從中執行換版面顏色的JavaScript `<script>useDarkMode()%3B</script>` ![image](https://hackmd.io/_uploads/r1ffO57G1l.png) 3. 執行後結果 ![image](https://hackmd.io/_uploads/SJZ8Oc7fJg.png)