# SQL injection [TOC] ![](https://hackmd.io/_uploads/rJG1Sr1Bh.png) 資料來源 : https://portswigger.net/web-security/sql-injection ### Database type and version ![](https://hackmd.io/_uploads/rJhpVryH3.png) ### Second-order SQL injection ![](https://hackmd.io/_uploads/SyeiYDJBh.png) ### Retrieving multiple values within a single column 如果查詢只返回單個列 可以透過將多個值連接在此單個列中,輕鬆檢索多個值,最好使用合適的分隔符來區分這些組合值。例如,在 Oracle 上,您可以提交以下輸入: ```' UNION SELECT username || '~' || password FROM users--``` 這使用了在 Oracle 上是字符串連接運算符的雙管符號 ||。注入的查詢將用 ~ 字符分隔的用戶名和密碼字段的值連接在一起。 ## APPRENTICE ### Lab: SQL injection vulnerability in WHERE clause allowing retrieval of hidden data --2023/05/02 題目就說是 SQL injection 順便給範例 XD ![](https://i.imgur.com/SxmTvm4.png) 一開始進來長這樣(除了congratulation那行),可以點下面的物品來觀察 URL 的變化,便於接下來做 injection 的動作 ![](https://i.imgur.com/9QfwvJF.png) 如果直接點下面的 "view details",顯示這樣 ```URLs/product?productId=10``` ![](https://i.imgur.com/qWIT77B.png) 接著試試看點擊 Refine your search 中的一個選項,可以看到 ```URLs/filter?category=Food+%26+Drink``` ![](https://i.imgur.com/21DVEXw.png) 在隨意選擇一個食物點進去看 URL,诶,又變回 ```URLs/product?productId=7``` ![](https://i.imgur.com/W7cSEEi.png) 試著輸入 ```'+OR+1=1--'``` 在 URL 上,看來能夠注入的地方不是這裡 ![](https://i.imgur.com/5HFSWcc.png) 回到選擇 Food&Drink 的那一頁,嘗試注入 ```URLs/filter?category=Food+%26+Drink'+OR+1=1--'```,成功出現除了食物以外的項目啦 ![](https://i.imgur.com/QgBGxfE.png) ### Lab: SQL injection vulnerability allowing login bypass --2023/05/02 題目就直接說在 login 頁面,想辦法用 administrator 去登入 ![](https://i.imgur.com/Euhjsao.png) 一樣熟悉的頁面,但是這次多了紅色框起來的 "My account" 看來目標在這裡啦 ![](https://i.imgur.com/4RPjCp8.jpg) Login 頁面長這樣很陽春,我們在 username 注入 ```adminstrator' OR 1=1 --``` password 就隨便打 ![](https://i.imgur.com/c0ceTkQ.png) 進來了 OUO ![](https://i.imgur.com/6gcCwrO.png) ## PRACTITIONER ### Lab: SQL injection UNION attack, determining the number of columns returned by the query --2023/05/15 透過 SQL injection 中的 UNION 攻擊將 NULL 塞入欄位中(應該是這樣吧 ![](https://hackmd.io/_uploads/r1QMaDyr2.png) 戳三次就出來了,我也很驚訝 OAO ![](https://hackmd.io/_uploads/SJW41dJr2.png) ### Lab: SQL injection UNION attack, finding a column containing text --2023/05/15 痾,題目要使用 UNION 來攻擊和檢索資料,然後要得到一個隨機的字串,放入 UNION 之中 (大概是這樣吧 ![](https://hackmd.io/_uploads/r1U1KuJS3.png) 戳出欄位有三個 ![](https://hackmd.io/_uploads/HkuTdukS2.png) 將第一個欄位改成 ```'abc'``` ![](https://hackmd.io/_uploads/HJtZFd1H3.png) 將 abc 換到中間的 NULL 就跑出這樣 ![](https://hackmd.io/_uploads/r17iFdJrh.png) 將 abc 改成 Make the database retrieve the string: 'mkFd70' 後面的字串,就 successful ![](https://hackmd.io/_uploads/HkPk5u1Sh.png) ### Lab: SQL injection UNION attack, retrieving data from other tables --2023/05/15 透過 SQL injection UNION 攻擊取得 admin 的帳號密碼 ![](https://hackmd.io/_uploads/HyYzhdyr3.png) 戳出來有兩個欄位 ![](https://hackmd.io/_uploads/ryQSauJB3.png) ```'UNION SELECT username, password FROM users--``` admin 的帳密都出來了 OUO ![](https://hackmd.io/_uploads/rkVcpOkB2.png) successful ![](https://hackmd.io/_uploads/Sk3X0ukrn.png) ### Lab: SQL injection UNION attack, retrieving multiple values in a single column --2023/05/16 透過 SQL injection UNION 攻擊並取得 admin 的帳密 ![](https://hackmd.io/_uploads/SkGi1t1Bn.png) 一樣戳出欄位為二 ![](https://hackmd.io/_uploads/HkdNxFySn.png) 塞入 ```'UNION SELECT username, password FROM users--``` 失敗 ![](https://hackmd.io/_uploads/S1H7xYJB2.png) 塞入 ```'UNION SELECT username || ':' || password FROM users--``` 也失敗 ![](https://hackmd.io/_uploads/HyttltkB3.png) 看了一下解答,搞錯了將一個欄位合併,所以是 ```UNION SELECT NULL, username || ':' || password FROM users--``` ![](https://hackmd.io/_uploads/SyuH-KJr2.png) successful ![](https://hackmd.io/_uploads/B1QwfK1Bn.png) ### Lab: SQL injection with filter bypass via XML encoding --2023/05/16 這題呢是結合 SQL injection 和 XML 攻擊,透過 UNION 攻擊後端 database 取得 admin 的帳號密碼登入 ![](https://hackmd.io/_uploads/SkU2PBySh.png) 首先這是最初的 request,尚未對它進行任何更動,Response 是 474 units ![](https://hackmd.io/_uploads/B1ai5B1rh.png) 接著試試看 ```1+1```,發現 response 中的 units 增加了 ![](https://hackmd.io/_uploads/B1_jqByS3.png) 試試看用 UNION 去戳,ㄟ~ Attack detected,被擋住了 ![](https://hackmd.io/_uploads/HJEWwDyr2.png) 既然被擋住了,那麼就 encode 成其他形式,有個東西叫做 Hackvertor,從 Extensions -> BApp Store -> Search "Hackvertor" -> 點擊 "install" ![](https://hackmd.io/_uploads/B1TNNDyHn.png) 對著需要轉換的那行點擊右鍵 -> Extensions -> Hackvertor -> Encode -> hex_entities ![](https://hackmd.io/_uploads/BJWDPwkS3.png) 回傳了所有的 username ![](https://hackmd.io/_uploads/ByLJ_vyrn.png) 加上 password 卻失敗了,需要找其他方法 ![](https://hackmd.io/_uploads/HJ37_wyrh.png) 在中間加上兩個 | 去隔開就行了,最後輸入為 ```1 UNION SELECT user || ':' || password FROM users``` ![](https://hackmd.io/_uploads/ryyduPJSn.png) successful ![](https://hackmd.io/_uploads/HyyTCHJH2.png)