SQL注入仿真示例

时间:2013-05-18 23:17:40

标签: joomla sql-injection code-injection

我尝试在joomla模块中模拟sql注入,但我没有工作。我在joomla中做了一些调试,我遇到了以下问题。

代码在php admin中运行良好:

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,因为这只是一个模拟。

如果您有任何想法请与我分享。谢谢你的回答。

1 个答案:

答案 0 :(得分: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调用应该可以安全地注入辅助语句。