2021年2月21日 星期日

又是Cookie惹的禍!Cookie裡的SQL Injection

 前一篇分享破解密碼」的經驗提到,開發人員將密碼編碼後記錄到Cookie裡,這一篇則是將資料庫的SQL語句記錄到Cookie裡,只要竄改Cookie裡的SQL語句,就能命令資料庫執行其他動作。

國內某地圖查詢服務網,當使用者輸入查詢資料後,會將完整的SQL語句記錄在Cookie的QuerySQL欄位中,使用者跳到下一資料頁或其他資料頁時,QuerySQL內容會傳回伺服器,而且伺服器直接以此SQL語句再次執行查詢,這讓駭客有了注入SQL命令的機會。

筆者曾試者利用SQLMAP去測試此進入點,但一直無法得到有效的回應,如果有同好知道如何利用SQLMAP直接攻擊SQL語句,尚請不吝指教!

基於職業道德,不便提供此服務網站的網址及細部資訊

首先,直接點擊查詢頁上的「顯示全部」鈕(圖1),可以得到各單位的清單,檢視清單頁的回應標頭之Cookie,可看到查詢的SQL語句(圖2)。

圖1:地圖查詢頁
圖2:查詢後,在cookei記錄SQL語句

為了重複測試,從換頁清單找出瀏覽網址(圖3),每次變更QuerySQL內容後,就瀏覽前述網址,讓資料庫伺服器執行QuerySQL所指定的SQL語句。

圖3:找出直接瀏覽的網址

為測試修改後的QuerySQL是否會交由後端執行,將SQL的條件移除(Where及之後的文字,如圖4),再重新瀏覽,此時系統真的回傳1839 頁(如圖5原本只有1頁),至此確認Cookie的QuerySQL存在SQL injection漏洞。

圖4:修改Cookie裡的QuerySQL的語句
圖5:從回傳的結果證實QuerySQL存在SQL Injection漏洞

再苦口婆心一次 若需要在session之間交換資料,請使用後端的session變數記錄欲交換的內容,千萬不要使用Cookie或頁面上的隱藏欄位,面對駭客,Cookie及隱藏欄位絲毫不具防護能力!

沒有留言:

張貼留言