此sql注入尝试做什么,如何检查它是否有效?

时间:2018-10-05 07:28:52

标签: sql sql-injection drupal-8

我们的提供商注意到我们有关以下请求的信息:

  

www.example.com 46.72.247.70--[04 / Oct / 2018:15:08:17 +0200]“获取   / jp-ja / node / 249%27%20or%20(1,2)=(select * from(select%20name_const(CHAR(71,65,81,75,112,108,70,121,116   ,110,105),1),name_const(CHAR(71,65,81,75,112,108,70,121,116,110,105),1))a)%20-%20%27x%27 =%27x   HTTP / 1.1“ 200 6227”-“” Mozilla / 5.0(Windows NT 6.0; rv:34.0)   Gecko / 20100101 Firefox / 34.0“

由于我从字面上什么都不懂,因此不知道如何检查它是否做了某些事情:此sql注入尝试执行什么操作以及如何检查它是否有效?

1 个答案:

答案 0 :(得分:1)

谈论SQL时,唯一有趣的部分是中间部分:

  

(select * from(select%20name_const(CHAR(71,65,81,75,112,108,70,121,116,110,105),1),name_const(CHAR(71,65,81,75,112,108,70,121,116,110,105),1))a)

用可读的形式写成,

SELECT * 
FROM(
  SELECT NAME_CONST(CHAR(71,65,81,75,112,108,70,121,116,110,105),1),
         NAME_CONST(CHAR(71,65,81,75,112,108,70,121,116,110,105),1)
    ) a

此查询的子查询设置两个常量字段,均名为CHAR(71,65,81,75,112,108,70,121,116,110,105),在应用ASCII后将其转换为“ GAQKplFytni”并将其设置为1。然后,主查询仅从子查询中选择所有内容(因此它不会发生任何变化)。

在SQLFiddle上,它似乎不起作用,因为NAME_CONST需要将STRING输入作为第一个参数。

除非整个操作背后有魔术,否则此查询无权工作。