代码之家  ›  专栏  ›  技术社区  ›  Alex

这个sql注入尝试做什么?如何检查它是否工作[[关闭]

  •  0
  • Alex  · 技术社区  · 6 年前

    我们的供应商注意到我们的以下请求:

    www.example.com 46.72.247.70---[2018年10月4日:15:08:17+0200]“获取 /jp ja/node/249%27%20or%20(1,2)=(select*from(select%20name\u const(CHAR(71,65,81,75112108,70121116 ,110105),1),名称\u const(CHAR(71,65,81,75112108,701211610105),1))a)%20--%20%27x%27=%27x HTTP/1.1“200 6227”-“Mozilla/5.0(Windows NT 6.0;rv:34.0)

    因为我实际上什么都不懂,所以不知道如何检查它是否做了什么:这个sql注入尝试做什么,如何检查它是否工作?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Shuumi    6 年前

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

    (select*from(select%20name_const(CHAR(71,65,81,75112108,7012116110105),1),name_const(CHAR(71,65,81,75112108,7012116110105),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,75112108,701211610105),在应用了ASCII之后,这些字段转换为“GAQKplFytni”,并将它们的值设置为1。然后主查询只从子查询中选取所有内容(因此它不会更改任何内容)。

    除非整件事背后有某种魔力,否则这个查询就没有用的权利。