SQL注入(SQL注入(SQLi)攻击)攻击-联合注入
頁面有顯示位時 , 可用聯合注入
本次以 SQLi 第一關為案例
第一步,判斷注入類型
參數中添加 單引號 ' , 如果報錯,說明后端沒有過濾參數 , 即 存在注入
?id=1'?
從數據庫的報錯中我們可得知 , 最外邊的一對單引號是錯誤提示自帶的,我們不用管
我們輸入的1 , 兩邊的一對單引號 , 是SQL拼接參數時使用的
而1 右邊的單引號 , 是我們自己輸入的
也就是說 , 后臺SQL中拼接參數時 , 使用的是單引號 , 固 注入點為 單引號字符串型
第二步,獲取字段數
order by 1 , 即 根據第1列排序 , 修改排序的列,如果存在該列,則會正常顯示 , 如果不存在該列 則會報錯 , 我們從第1列開始排序 , 然后是第2列,第3列
第4列時,開始報錯,沒有第四列 , 也就是說,返回的結果中只有3列, 固 3個字段
第三步,獲取顯示位
聯合查詢 可以將左右兩個查詢語句的結果合并在一起顯示,左邊的查詢結果顯示在上方,右邊的查詢結果顯示在下方 , 前提是兩個查詢結果的字段數一致 , 如果字段數不一致則會報錯 , 這也是我們上一步需要獲取字段數的原因?
我們輸入id為-1 , 由于id沒有負數,導致SQL左邊的查詢沒有數據 , 最后的結果就只會顯示右邊的查詢結果 , 也就是 1 2 3?
?id=-1' union select 1,2,3 -- a?
第四步,脫庫
?我們參數中?3 替換成查詢語句 , 從而在頁面 3 的位置上顯示我們的查詢結果
group_concat() , 可以將多行結果合并為一行
?id=-1' union select 1,2, (select group_concat(schema_name) from information_schema.schemata)-- a??我們可以看到 , 原本3的位置 展示了我們查詢的數據 :?所有數據庫
通過修改參數中 3 處的查詢語句 , 可以顯示不同的結果 如?所有表
?id=-1' union select 1,2, (select group_concat(table_name) from information_schema.tables where table_schema='security')-- a所有字段
?id=-1' union select 1,2, (select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')-- a?拿到表和字段信息后 , 就可以任意查詢數據庫中的數據了。
總結
以上是生活随笔為你收集整理的SQL注入(SQL注入(SQLi)攻击)攻击-联合注入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL注入(SQL注入(SQLi)攻击)
- 下一篇: SQL注入攻击(SQL注入(SQLi)攻