我尝试在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,因为这只是一个模拟。
如果您有任何想法请与我分享。谢谢你的回答。
答案 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
调用应该可以安全地注入辅助语句。