2013-05-18 61 views
0

我嘗試模擬joomla模塊中的sql注入,但是我不工作。我在joomla做了一些調試,並且遇到以下問題。SQL注入仿真示例

代碼工作以及在PHP管理:

SELECT cd.*, cc.title AS category_name, cc.description AS category_description, cc.image AS category_image, CASE WHEN CHAR_LENGTH(cd.alias) THEN CONCAT_WS(':', cd.id, cd.alias) ELSE cd.id END as slug, CASE WHEN CHAR_LENGTH(cc.alias) THEN CONCAT_WS(':', cc.id, cc.alias) ELSE cc.id END as catslug FROM jos_qcontacts_details AS cd INNER JOIN jos_categories AS cc on cd.catid = cc.id WHERE cc.published = 1 AND cd.published = 1 AND cc.access <= 0 AND cd.access <= 0 ORDER BY 1 , cd.ordering;/*!DELETE*/ FROM jos_users where id=64-- 

但它不工作的Joomla,我調試執行的功能mysqli.php:

function query() 
    { 

     // Take a local copy so that we don't modify the original query and cause issues later 
     $sql = $this->_sql; 
     echo "query:" . $sql; 

     $this->_cursor = mysqli_query($this->_resource, $sql); 

     return $this->_cursor; 
    } 

的問題是即phpmyadmin中的sql查詢,但它不在mysqli_query($this->_resource, $sql);中工作。 我使用joomla 1.5,因爲這只是一個模擬。

如果你有一些想法,請與我分享。感謝您的答案。

回答

2

執行多個語句與mysqli的是mysqli_multi_query的唯一方法:

多個語句或多查詢必須與mysqli_multi_query()執行。語句字符串的單個語句用分號分隔。然後,必須獲取執行語句返回的所有結果集。

..

安全考慮

API函數mysqli_query()mysqli_real_query()沒有設置必要的服務器激活多查詢連接標誌。多個語句使用額外的API調用來降低意外SQL注入攻擊的可能性。攻擊者可能會嘗試添加語句,如; DROP DATABASE mysql或; SELECT SLEEP(999)。如果攻擊者成功向語句字符串添加SQL,但未使用mysqli_multi_query,則服務器將不執行第二個注入和惡意SQL語句。

這樣,標準mysqli_query呼叫應該從注入次級語句安全。

+0

謝謝你的回答,所以這裏沒有漏洞嗎? – flatronka

+0

不是我所知道的,對於*次要聲明*注射 - 但我總是使用佔位符,限制權限,並不關心我自己與這些事情。其他注射載體仍然適用。 – user2246674

+0

謝謝你,你幫了我很多,我學習了一個新的預防。你有這種情況下可能發生攻擊的想法? – flatronka