很多應用程式都使用資料庫來儲存資訊。sql 命令就是前端應用程式和後端資料庫之間的介面。攻擊者可利用應用程式根據提交的資料動態生成sql 命令的特性, 在url 、表單域, 或者其他的輸入域中輸入自己的sql 命令, 改變sql 命令的操作, 將被修改的sql 命令注入到後端資料庫引擎執行。
- 任意查詢使用者資訊
- 任意查詢管理員賬號密碼
- 通過sleep, benchmark 等函式使資料庫阻塞不能正常工作
- 使用資料庫內建的一些函式來執行系統命令
按傳遞引數型別分:
- 例如id = 1 , 數字型注入不需要考慮單引號或者雙引號閉合。用如下方式驗證注入點:
and 1 = 1
and 1 = 2
- 例如name= 'root' , 字元型住入, 需要考慮單引號的閉合和注釋問題。用如下方式驗證注入點:
root' and '1' = '1
root' and '1' = '2 #用於將原有引號閉合
root' and 1 = 1 --+ #通過注釋符號,注釋後面的單引號。用於將name = 'root' root後面的 ' 注釋掉就變成了name = 'root' and 1 = 2 --+
root' and 1 = 2 --+ #注意:-- 在mysql中,要求第二個 - 後面跟乙個空格或控制字元,+可以代替空格
- 回顯正常: 通過執行構造的sql 注入語句之後, 頁面與原頁面存在差異, 但沒有報錯資訊。
- 回顯報錯: 通過執行構造的sql 語句之後, 頁面報錯, 且將報錯資訊顯示百面上
- 布林型盲注: 構造sql 語句之後, 根據頁面顯示差異來判斷
- 基於時間的盲注: 構造sql 語句之後,根據頁面響應時間來判斷
2. select user from users order by user; //系統預設對users進行排序
order by 1按照第一列排序,order by 2按照第二列排序
沒有第三列 因此order by 3報錯
order by判斷正常資料庫查詢有多少列。同理查詢有11列結果。
聯合查詢select 1,2顯示為一行
查詢user_id=1的user和password,並將數字1,2顯示出來
執行union後的語句,結果只顯示1行
上面資料庫查詢已知有11列,分別用數字1到11在頁面中顯示出來
經過之前的注入測試,已知資料庫中存在admin、password兩個字段。因為頁面中顯示了2,3,8,9,10總共五個數字,我們隨意替換五個中的兩個為admin、password欄位,這樣admin、password這兩個欄位的內容就顯示出來。
首先 通過order by判斷正常資料庫查詢有多少列,只要查詢結果最終能回顯到頁面上,可以用聯合查詢注入的方法。
SQL注入 聯合查詢注入
注入條件 頁面有顯示位,即在乙個 的正常頁面,服務端執行sql語句查詢資料庫中的資料,客戶端將資料展示在頁面中,這個展示資料的位置就叫顯示位。找的注入點 查詢列數 找到顯示位 獲取列中的資訊 注入點 查詢列數 order by 猜測的列數 order by 11 返回正常,有11列 order by...
聯合查詢SQL注入
sql注入介紹 sql注入介紹 注入產生原因 web應用程式對使用者輸入資料的合法性沒有判斷或過濾不嚴,導致惡意payload直接帶入sql語句執行,從而執行payload中非法操作!新建php檔案,將下面 複製到php檔案中,在瀏覽器中訪問即可 host 127.0.0.1 dbuser root...
sql注入 union聯合查詢注入
目錄 一,sql注入必記的一庫三表 二,union聯合查詢注入 1,基本注入流程 1,判斷注入點 2,判斷多少列 3,判斷顯示位 4,顯示資料庫的基本資訊 5,顯示有哪些資料庫 6,顯示資料庫下有哪些表 7,判斷表裡有哪些字段 八,查詢資料表中有哪些資料 information schema 資料庫...