首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用逻辑错误利用SQL注入漏洞

使用逻辑错误利用SQL注入漏洞
EN

Security用户
提问于 2019-05-03 20:45:24
回答 2查看 668关注 0票数 0
代码语言:javascript
复制
");
while($row = mysql_fetch_assoc($query)) {
echo("{$row["name"]}{$row["text"]}");
}
echo("");
?>

我试图在这段代码中找到SQL注入。我尝试过不同的方法,但没有成功。线索是“在这个代码示例中尝试查找逻辑错误”。我知道DB有可能使用GBK (或其他什么)编码,我们可以使用多字节字符来破坏语句。但在这种情况下是不合适的。

我不明白为什么我们要在addslashes上做$ip。这似乎没有必要。也许这是条线索。

EN

回答 2

Security用户

发布于 2019-05-04 03:41:57

感谢彼得帮助解决细节问题

诀窍是将add_slashes应用于IP地址,然后将截断为15个字符。想象一下将其注入$_SERVER["REMOTE_ADDR"]$_SERVER['HTTP_X_REAL_IP'] (第15个字符是单引号):

12345678901234'

add_slashes将其转化为:

12345678901234\'

它被截断为:

12345678901234\

换句话说,现在您有一个单独的尾随斜杠,它将避开本应结束查询中IP地址值的单引号。您现在已经修改了查询本身。用户代理值的开头引号现在关闭IP地址值,用户代理中的任何内容都直接插入到查询中,而不包含任何引号。您只需确保完成后构建一个有效的查询即可。将数据注入$_SERVER['REMOTE_ADDR']是很困难的,因为尽管您可以在TCP请求上伪造数据,但这将破坏握手,并且HTTP请求永远不会发生。但是,设置$_SERVER['HTTP_X_REAL_IP']就像在请求上设置一个标头一样简单。因此,一些类似的东西会起作用(这是一个未经测试就匆忙拼凑在一起的例子):

代码语言:javascript
复制
curl 'https://target.com' \
    -H "X-REAL-IP: 12345678901234'" \
    --user-agent '1,1,1); INSERT INTO message (name) SELECT 
 CONCAT(Host,User,authentication_string) from mysql.user; --'

请注意,这个特殊的示例之所以可能,是因为使用了旧的mysql_query绑定。mysqli库显式禁止在每个execute语句中有多个查询。

票数 1
EN

Security用户

发布于 2019-05-03 21:34:48

remote_addr和user_agent字段都被发送到SQL,而没有被解析。尝试将SQL查询作为GET或POST参数插入用户代理字段。

代码语言:javascript
复制
/endpoint?HTTP_USER_AGENT='
/endpoint?HTTP_X_REAL_IP='

下面的代码询问服务器是否设置了_SERVER元素。

代码语言:javascript
复制
if(isset($_SERVER["HTTP_X_REAL_IP"])) {
    $ip = $_SERVER["HTTP_X_REAL_IP"];
}

这是触发SQL查询的易受攻击代码,因此是注入:

代码语言:javascript
复制
$query = mysql_query("INSERT INTO `message` (`remote_addr`, `user_agent`, `name`, `text`) VALUES('{$ip}',
'{$user_agent}', '{$name}', '{$text}');", $link);
}

这可能意味着GET、POST或COOKIE参数。将此参数设置为:如我前面提到的,在您的http请求中将HTTP_X_REAL_IP设置为',将触发SQL错误。你为什么不试试呢?

票数 -2
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/209479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档