什么是堆疊注入?
顧名思義,堆疊注入就是將一堆sql語句疊加在一起執行,使用分號結束上一個語句再疊加其他語句一起執行。
題目
首先嘗試閉合引號,並注釋后面的內容。
發現沒有報錯,那就判斷一下有多少列。
由此可以判斷出有兩列,接着判斷回顯位。
發現回顯了過濾規則,select是被過濾的,還有一些注入常用語句也被過濾了。
這時就可以嘗試一下堆疊注入。
發現這里爆出了所有數據庫,再來看看數據表。
發現有兩個數據表,通過查看表結構看一下哪個表里面有flag字段。
發現flag字段在1919810931114514
表中,接着想辦法去讀取這個表中的flag字段的值(因為一些常用語句都被過濾了,不能直接查詢)。
這里實在不知道怎么辦了,於是百度發現大佬的wp用預處理語句繞過了過濾。
預處理語句使用方式:
SET @sql = variable; //設置變量
PREPARE yuchuli from '[my sql sequece]'; //預定義SQL語句
EXECUTE yuchuli; //執行預定義SQL語句sqla
這里是將我們要處理的語句先與定義為yuchuli,再進行執行,繞過關鍵字的過濾,於是就有了如下的語句。
PREPARE yuchuli from 'select * from `1919810931114514`';
EXECUTE yuchuli;
但是這里的select是被過濾的,於是想到可以對他進行編碼繞過.
SET @sql = concat(char(115,101,108,101,99,116), " * from `1919810931114514`");
PREPARE yuchuli from @sql;
EXECUTE yuchuli;
成功拿到了flag。