mysql 通过 GET 或 POST 在更新语句中注入
mysql injection inside update statement by GET or POST
我是SQL注入的新手,想请教一些关于update语句的问题
(不问如何防止注入......我问的是例如如何使用SQL注入将更新语句注入更新语句)
如果我有一个名为 "users" 的 table 和列 id、Fname、Lname、Ip、Sex、date、Signature
我用它来更新
mysql_query("UPDATE users SET Fname='$fname', Lname ='".$_GET["lname"]."', Ip ='$ip' ,Sex ='sex' WHERE id='$id'")
你能从 lname 注入更新 "Signature" 吗?
喜欢它的工作原理吗?
edit.php?id=1&lname=Boris&lname=' , Signature = '123&ip=123&Sex=1
(无效)
你能告诉我在哪里可以阅读这篇文章吗?我试图搜索 SQL 注入,但我找不到如何在更新语句
中进行更新
我想这对你有帮助
像这样更改您的 mysql 脚本 php v5.6
mysql_query("UPDATE users SET Fname='$fname', Lname ='$lname', Ip ='$ip' ,Sex ='sex' WHERE id='$id'")
由于您直接将输入注入查询而无需任何转义或验证,因此您基本上可以让用户运行在您的数据库中进行他想要的任何查询。
例如,在这种情况下,假设您只想允许他编辑他的名字。您的查询如下所示:
"UPDATE users SET Fname = '" . $_GET["fname"] . "' WHERE id = ".$_GET["id"];
如果他的输入是这样的:
id=1&fname=John
SQL 将 运行 以下查询:
UPDATE users SET Fname = 'John' WHERE id = 1
但是假设他的输入是这样的:
id=1&fname=John', email='aaa
然后 SQL 将 运行 以下查询:
UPDATE users SET Fname = 'John', email='aaa' WHERE id = 1
刚刚发生的事情是,即使你不让他更新他的电子邮件。
一些注意事项:
- 上面的例子是我想到的破坏性最小的例子,
通过 SQL 注入,攻击者可以做更多的恶意事情,
包括入侵您的服务器。
- 即使是无辜的用户,假设他输入
De'wayne
来更改他的名字,您的查询也会失败。
- 您让您的用户使用来自输入的
id
更新他的详细信息 - 坏主意,他可以选择他想要的任何 ID,这意味着他有权更新所有用户数据。
- 您不应该对 update/inserting 事物使用 GET 方法。仅使用 GET 获取内容。
你几乎是正确的,你只是忘记了 urlencoding,它看起来像:
edit.php?id=1&lname=Boris&lname=Solnich&ip=123&Sex=1%27%20%2C%20Signature%20%3D%20%27123
我是SQL注入的新手,想请教一些关于update语句的问题
(不问如何防止注入......我问的是例如如何使用SQL注入将更新语句注入更新语句)
如果我有一个名为 "users" 的 table 和列 id、Fname、Lname、Ip、Sex、date、Signature 我用它来更新
mysql_query("UPDATE users SET Fname='$fname', Lname ='".$_GET["lname"]."', Ip ='$ip' ,Sex ='sex' WHERE id='$id'")
你能从 lname 注入更新 "Signature" 吗? 喜欢它的工作原理吗?
edit.php?id=1&lname=Boris&lname=' , Signature = '123&ip=123&Sex=1
(无效)
你能告诉我在哪里可以阅读这篇文章吗?我试图搜索 SQL 注入,但我找不到如何在更新语句
中进行更新我想这对你有帮助
像这样更改您的 mysql 脚本 php v5.6
mysql_query("UPDATE users SET Fname='$fname', Lname ='$lname', Ip ='$ip' ,Sex ='sex' WHERE id='$id'")
由于您直接将输入注入查询而无需任何转义或验证,因此您基本上可以让用户运行在您的数据库中进行他想要的任何查询。
例如,在这种情况下,假设您只想允许他编辑他的名字。您的查询如下所示:
"UPDATE users SET Fname = '" . $_GET["fname"] . "' WHERE id = ".$_GET["id"];
如果他的输入是这样的:
id=1&fname=John
SQL 将 运行 以下查询:
UPDATE users SET Fname = 'John' WHERE id = 1
但是假设他的输入是这样的:
id=1&fname=John', email='aaa
然后 SQL 将 运行 以下查询:
UPDATE users SET Fname = 'John', email='aaa' WHERE id = 1
刚刚发生的事情是,即使你不让他更新他的电子邮件。
一些注意事项:
- 上面的例子是我想到的破坏性最小的例子, 通过 SQL 注入,攻击者可以做更多的恶意事情, 包括入侵您的服务器。
- 即使是无辜的用户,假设他输入
De'wayne
来更改他的名字,您的查询也会失败。 - 您让您的用户使用来自输入的
id
更新他的详细信息 - 坏主意,他可以选择他想要的任何 ID,这意味着他有权更新所有用户数据。 - 您不应该对 update/inserting 事物使用 GET 方法。仅使用 GET 获取内容。
你几乎是正确的,你只是忘记了 urlencoding,它看起来像:
edit.php?id=1&lname=Boris&lname=Solnich&ip=123&Sex=1%27%20%2C%20Signature%20%3D%20%27123