本篇文章首先是講解利用,之後會講解I函數為什麼能繞過過濾
前提是tp沒有用I函數去接收參數,具體原因會在分析之後給出
先給出測試的payload,
u[0]=exp&u[1]==%27admin%27
接下來我們去分析
首先看看我們index頁面,看看我們的語句
M就不必多說上一篇已經講過了,傳回一個users模型的對象,我們直接跟進
where
函數,看看接收的參數username為數組
因為是數組原因是以隻執行這一句指派傳回
$this
接下來進入
find()
也就是我們的關鍵,繼續跟進
首先merge參數合并這不是我們關心的地方
标量變量是指 int、float、string 或 bool 類型的變量。 array、object 和 resource 類型不是标量。
我們的
username
是一個數組是以直接到下面,回到find,到最關鍵的地方了,準備生成sql語句了,繼續跟進
跟進
繼續跟進
這裡會傳回最終sql語句,因為隻有where,我們直接跟進
parseWhere
别忘了我們傳入的參數
之後的一些非關鍵處理我們略過,繼續跟進
這裡進行拼接
$whereStr .= $key.' '.$val[1];
看到沒沒過濾,直接繞過了
最終
$whereStr
為
username ='admin'
,也得到了最終的payload
是以,我們便可以有其他姿勢了,盲注什麼随便來,我們這裡測試一下報錯注入,沒毛病的
接下來我們把接收參數改成I函數,他會對裡面參數做處理,會在前面加一個空格,
exp
!=
exp