暨『 SQL Injection Get Username 』這篇以後,同樣也是書上很有趣的手法。 bit-by-bit:逐步推論攻擊 主要需要使用到以下幾個功能: IF ASCII SUBSTRING 二進制運算 攻擊範例: 上面這是此攻擊的基本公式,當然不是絕對的,另外針對 這部份必須要先說明,他是指2的j次方,而非真的有此指令,這需要自己去換算,功用等一下會一併說明。 這段攻擊指令,需要分成幾個階段做說明,首先: if(...,1,0) if判斷,true回傳1,否則回傳0 ASCII(...) 取得字母的ASCII SUBSTRING(... , i , 1) 取得字串的第i位起算,1個字母,以 hello 為例: substring('hello', 1,1) => h substring('hello', 2,1) => o substring('hello', 3,1) => l substring('hello', 3,2) => ll substring('hello', 3,3) => llo 接下來是 & 這是mysql裡面的二進制運算符號, 運算邏輯(二進位運算)範例: 1&1 => 1 0&0 => 0 1&0 => 0 0&1 => 0 範例: 5&2^0 => 101 & 001 => 001 5&2^1 => 101 & 010 => 000 5&2^2 => 101 & 100 => 100 依照上面的範例,我們可以在不知道5的狀況下,透過運算,逐步推出每一位的結果,進而推論出5這個答案,這是這個攻擊很關鍵的地方!! 接下來我們就可以開始跑整個流程: 假設current_user()得到的是結果是: root@localhost 1. substring("root@localhost",1,1) => r 2. ascii('