gpt4 book ai didi

sql - 向我的老板演示 SQL 注入(inject)攻击

转载 作者:行者123 更新时间:2023-12-02 07:36:13 24 4
gpt4 key购买 nike

所以我有一个项目正在尝试教我的老板开始使用准备好的 SQL 语句,但他可能不太在意并说这没什么大不了的。我想知道如何向他证明这是一件大事,但我就是想不通如何在我们设置的开发测试服务器上注入(inject)删除表命令。我为一家处于测试阶段的公司开发了一个应用程序,我想将其删除(备份)以向他展示问题,因为我正在使用他的 SQL 代码。我试图让公司养成使用准备好的陈述的习惯,但我似乎是唯一想要改变的人,而他们没有。有人可以帮我用 SQL 注入(inject)“破解”这个数据库吗?谢谢!!

要提交的表单上有一个评论框,当它看到撇号时会抛出错误:

无法进行查询:您的 SQL 语法有误;检查与您的 MySQL 服务器版本对应的手册,了解在第 78 行的 's";', '100', '100')' 附近使用的正确语法

我试过了

foo'); DROP TABLE cabletypes;--

但给出了同样的错误。当我在提交表单之前输入文本区域时,如何让它成功注入(inject)?文本区域提交到“评论”列和值。

SQL

$sql="INSERT INTO cabletypes
(cable_type,
sample_no,
sample_date,
section_lg,
wet_dry,
avgofppf,
sheath_type,
plastic_wt,
inner_sheath,
inner_al_wt,
inner_steel_wt,
cable_guard,
guard_al_wt,
guard_steel_wt,
guard_other_wt,
total_pairs_a,
pair_count_gauge_a,
copper_wt_a,
total_pairs_b,
pair_count_gauge_b,
copper_wt_b,
total_pairs_c,
pair_count_gauge_c,
copper_wt_c,
total_pairs_d,
pair_count_gauge_d,
copper_wt_d,
sum_pairs,
copper_wt,
copper_percent,
lead_wt,
lead_percent,
contains_lead,
waste_wt,
sampler,
supervisor,
comments,
cable_no,
section_no)
VALUES (
'$cable_type',
'$sample_no',
'$sample_date',
'$section_lg',
'$wet_dry',
'$avgofppf',
'$sheath_type',
'$plastic_wt',
'$inner_sheath',
'$inner_al_wt',
'$inner_steel_wt',
'$cable_guard',
'$guard_al_wt',
'$guard_steel_wt',
'$guard_other_wt',
'$total_pairs_a',
'$pair_count_gauge_a',
'$copper_wt_a',
'$total_pairs_b',
'$pair_count_gauge_b',
'$copper_wt_b',
'$total_pairs_c',
'$pair_count_gauge_c',
'$copper_wt_c',
'$total_pairs_d',
'$pair_count_gauge_d',
'$copper_wt_d',
'$sum_pairs',
'$copper_wt',
'$copper_percent',
'$lead_wt',
'$lead_percent',
0,
'$waste_wt',
'$sampler',
'$supervisor',
'$comments',
'$cable_no',
'$section_no')";
}

mysql_query($sql) or die ("Unable to Make Query:" . mysql_error());

print("Sample Sheet Submitted Successfully!");

最佳答案

您不能在 PHP 的 ext/mysql 中发出多查询 SQL界面。所以你不能做 ; DROP TABLE Students 技巧。这是支持已弃用的 mysql 扩展的少数几点之一。

具有讽刺意味的是,PDO 默认支持所有查询的多查询。 Mysqli 仅在您显式调用 mysqli::multi_query() 时才支持它。 .

但是 DROP TABLE 并不是攻击者可能尝试使用 SQL 注入(inject)进行的唯一非法操作。事实上,执行 DROP TABLE 的攻击是恶意的,但攻击者没有任何值(value)。大多数 SQL 注入(inject)攻击更有条理。

我可以为您的示例 INSERT 语句想到一个漏洞:

http://yourapp.example.com/cable_types.php?supervisor=jflay',(SELECT GROUP_CONCAT(CONCAT(table_name,'.',column_name)) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema=DATABASE()), NULL, NULL) --

瞧!我刚刚创建了一个电缆类型,其注释告诉我数据库中的所有表和列。然后,我可以在后续尝试利用您网站中的其他页面时使用这些知识。

(实际上,这可能不是一个确定的例子,因为默认情况下 GROUP_CONCAT 的长度限制为 1024 个字符,而您的完整列集可能比这更长。您可以使用此漏洞来获取相同的信息,但也许它需要几个 INSERT 查询。)

无论如何,出于安全考虑,您的老板真的应该使用参数化查询,同时也是为了支持包含撇号的字符串,同时也是为了便于编码和提高性能。告诉他prepared statements perform 14% faster比非准备好的语句。

关于sql - 向我的老板演示 SQL 注入(inject)攻击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16329662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com