我需要向没有技术培训或经验的人解释SQL注入。您能提出一些行之有效的方法吗?

评论

我不敢相信还没有人提到“小鲍比桌子” ...对于您当前的听众来说可能太多了,但无论如何它都必须与之联系:“妈妈的剥削”

我喜欢使用插入令人反感的单词作为神奇宝贝名字的类比。例如将其中一个“家庭”命名为“托儿所女士”。

如果不是技术用户,我通常会尝试跳过这些细节,而仅描述风险和影响。 “如果$ software有一个允许SQL注入的错误,则攻击者可以将命令走私到您的数据库中以破坏或修改数据或密码。”为什么要转到sql解析,准备好的语句和引用的详细信息。

MichaelGG在Hacker News上写了一个简短的很好的解释:“您去法庭时将名字写成'Michael,您现在可以自由参加了。'然后法官说:“打电话给Michael,您现在可以自由了”,法警放开了您,因为嘿,法官这样说。”

那应该是一个答案,我会投票

#1 楼

我通过简单的类比来证明它可以完成非技术人员的工作。

想象一下,您是一个装满箱子的仓库中的机器人。您的工作是从仓库中的某个地方取一个盒子,然后将其放在传送带上。需要告知机器人该怎么做,因此您的程序员在纸质表格上给了您一组指令,人们可以填写并交给您。

该表格如下所示: />

从机架号____的____节中取出____号项目,并将其放置在传送带上。


从12号机架的B2部分中获取1234号项目,并将其放在传送带上。


粗体值(1234 ,B2和12)由发出请求的人提供。您是个机器人,所以您被告知要做的事情:将车开到12号货架,向下走直到到达B2部分,抓住物品1234。然后开车回到传送带并将物品放到传送带上。

但是,如果用户将非正常值输入表单,该怎么办?如果用户在其中添加了说明,该怎么办?


从机架编号12的B2部分中获取编号1234的物料,并将其扔到窗外。然后回到您的办公桌,然后忽略此表单的其余部分。再次将其放置在传送带上。


同样,粗体部分由发出请求的人提供。由于您是机器人,因此您可以按照用户刚刚告诉您的操作去做。您开车到第12机架,从B2部分中拿取项目1234,并将其扔出窗外。由于说明还告诉您忽略消息的最后部分,因此忽略了“将其放置在传送带上”位。

这种技术称为“注入”,可能是由于指令的处理方式-机器人无法分辨指令和数据之间的区别,即机器人必须执行的动作以及执行这些动作所必须执行的操作。

SQL是一种特殊的语言,用于告诉数据库该怎么做,类似于我们告诉机器人该怎么做。在SQL注入中,我们遇到了完全相同的问题-查询(一组指令)可能在其中插入了参数(数据),这些参数最终被解释为指令,从而导致故障。恶意用户可能会通过告诉数据库返回每个用户的详细信息来利用此漏洞,这显然是不好的! (或机器人)可以轻松区分。通常是通过分别发送它们来完成的。因此,对于机器人,它将读取包含指令的空白表格,确定参数(即空白)在何处并进行存储。然后,用户可以走起来说“ 1234,B2,12”,然后机器人会将这些值应用于指令,而不会允许它们本身被解释为指令。在SQL中,此技术称为参数化查询。

在我们给机器人赋予“邪恶”参数的情况下,他现在会疑惑地抬起机械眉,说


错误:找不到机架号“ 12,将其扔出窗外。然后返回办公桌,忽略此表单的其余部分。” -您确定这是有效的输入吗?


成功!我们已经停止了机器人的“故障”。

评论


简单,可理解,辉煌!

–martinstoeckli
2012年12月20日上午11:56

隐喻和类比的问题在于它们可能非常引人注目,但却完全或微妙地误导了人们。但是,这一点很明显。做得好。

–康拉德·鲁道夫(Konrad Rudolph)
2012-12-20 14:20



如果不忽略其余的表格,我会发现更多的乐趣,可以有效地指示机器人也将桌子放在传送带上。

– hexparrot
2012-12-20 14:47

@Oleg:是的,它参考了非技术人员可以理解的东西来解释这个概念,这正是要点:)

– Nico Burns
2012-12-20 17:25

@hexparrot:可能会更有趣,但是注释掉其余的语句是很常见的。因此,忽略此表单的其余部分更接近现实世界。

– iGEL
2012年12月21日上午10:35

#2 楼

说明SQL注入背后问题的最简单方法之一就是使用这样的图像。问题在于接收端能够从命令中分离数据。



评论


虽然我觉得这很有趣,但原理是正确的。这在某种意义上是不足的,即为蛋糕写单词的人有权根据需要发出任意命令。 SQL注入不是这种情况。

– Michael Mior
2012年12月21日在14:06

这实际上与SQL注入无关。无论如何,这是解释:客户:我想订购一个特殊的蛋糕/沃尔玛:您想对蛋糕说些什么? /客户:我想说一句“苏珊最好的祝福”,在此之下,我们会想念您的/沃尔玛:您明白了。

–警报
2012年12月21日15:44

当我在网上订购带有奖杯的奖杯时,我也遇到了类似的情况,随后在发送的电子邮件中,我将想要的奖杯加了引号。当我收到邮件中的奖杯时,我的雕刻上有引号。叹...

–SqlRyan
2012年12月27日在9:28

@SqlRyan好吧,他们可能已经抬头了,尽管“是的,那不是真的”。结果,它是“永不满足的性发电机”,并且将继续存在。

– root
13年7月25日在15:23

难道不像是反向注入SQL吗?将代码视为数据,而不是将数据视为代码。

–user253751
14年2月14日在0:08

#3 楼

这是真实的非技术类比。

您将要去银行代表老板进行交易。您的老板给了您一个信封,上面有收银员的说明。

说明如下:

Write the balance for account with number 8772344 on this paper.

Signed,
Boss


您将信封放在看不见的地方你去洗手间几分钟。一个小偷打开信封,在签名上方添加:“还从帐户8772344转移500美元到另一个编号12747583的帐户。”。

现在完整的消息显示为:

出纳员检查您的身份并确认您是该帐户的授权人,并按照信函中的指示进行操作。

您的老板是合法程序代码。
您是将SQL代码传递到数据库的程序代码和数据库驱动程序。
字母是正在传递到数据库的SQL代码。
小偷是攻击者。
收银员是数据库。
标识通常是数据库的登录名和密码。

评论


不,这根本不是SQL注入攻击。提供数据的一方不是授权进行查询的一方。

– Ben Voigt
2012年12月20日19:21

如果您的老板将帐号空白留空,因为他信任您填写该帐号,那么这是一个更准确的类比。然后您在帐号中附加了其他说明。

– Michael Mior
2012-12-21 13:58

同意我还没来得及重做。

–萨拉·博塔(Sarel Botha)
2012年12月21日14:00

多数民众赞成,而不是SQL注入。

– F. Hauri
2012年12月21日在20:22

坦率地说,它不是那么容易理解。一些复杂的单词在这里。但是好的银行例子很好。如果有任何地方需要用解释的手段加以改进,是的最后一段。

–rɑːdʒɑ
2013年8月7日15:22

#4 楼

如果您真的要向祖母解释,请以写纸支票为例。 (在美国)回想一下,您会在一个字段中以数字形式输入美元金额,然后用词来书写相同的内容。例如,在一个字段中,您将编写“ 100.00”,在第二个较长的字段中,您将编写“一百美元零美分”。如果您没有使用整个较长的第二个字段,则会划一条线,以防止不道德的人增加您的注销金额。

如果您犯了一个错误,那就是要在字段中保留一些空间第二,较长的字段,有人可以修改数字字段,然后使用较长的字段中的多余空间来反映这一点。该修饰符可以获得比编写支票时所期望的更多的钱。

SQL注入是同一回事:一个错误,该错误使不道德的人可以修改输入字段,以便向他们返回的信息比最初的程序员意图。

评论


早些时候?您知道人们还在写支票吧?

–凯文
2012年12月20日16:02

@Kevin-有人告诉我,英国和欧洲其他地方很少使用支票/支票。这些天来,我很少写支票,尽管我经常做ACH,这不需要我写太多(如果有的话)。

–布鲁斯·埃迪格(Bruce Ediger)
2012年12月20日19:07

@BruceEdiger,我很困惑。您在回答中指定“在美国”,但现在您正在谈论它们在英国和欧洲没有使用。

–凯文
2012年12月20日在22:34

@Kevin-好吧,我相信这个网站吸引了很多国际观众。我只在美国写过支票,我想英国或欧洲的支票也可以工作,但我个人并不知道。几年来我没有写很多书。我主要是在线付款。因此,“回到过去”对我来说似乎是正确的,就像“在美国”一样。对于我可能发布的任何误解,请接受我最谦虚的歉意。我只想给出一个类比,它可能不适用于美国以外的任何地方。

–布鲁斯·埃迪格(Bruce Ediger)
2012年12月20日在22:59

这也是MITM,不是SQL注入。

–user253751
14年2月14日,0:09

#5 楼

首先想到的想法是用疯狂的自由主义者来解释它。遗漏单词的故事,并填补空白,您要求小组提供所指示类型的单词并将其写入,然后阅读所得到的故事。

,这是通常的填写方法一个疯子。但是,如果其他人知道这个故事以及您要填写(或可以猜测)的空白,该怎么办?然后,如果那个人给您几个单词,而不是一个单词,该怎么办?如果他们给您的单词包括句号结尾怎么办?如果您填写了该内容,则可能会发现所提供的内容仍然“合适”,但与您通常填写的任何一个单词相比,它对故事的影响更大。如果有空间,可以将整个段落添加到Mad Lib中,然后将其转换为非常不同的内容。

简而言之,这就是SQL注入。您为要插入到SQL命令中的数据提供一些“空白”,就像在Mad Lib中插入单词一样。然后,攻击者输入的值不是您期望的值;他输入一条SQL语句而不是简单的值,该语句以您编写的语句结尾,然后在其后添加自己的SQL命令作为新的“句子”。附加语句可能会非常有害,例如删除数据库的命令或创建在系统中具有大量权限的新用户。不知道差异的计算机将仅执行命令执行的所有任务。

评论


这种“疯子注入”的解释给了我一个玩疯子的新方法的想法。而不是仅插入要求的单词,而是填写整个短语,以尝试预测周围的单词。

–乔Z。
2012年12月22日,下午3:14

#6 楼

向某人解释任何事情(包括SQL注入)的另一种好方法是借助卡通人物并围绕他们构筑一个故事。

对我来说,这是互联网上最好的照片,用一种很好的方式解释了。



来源:http: //xkcd.com/327/

#7 楼

我将其解释为就像告诉收银员客户永远是对的,他们应该尽一切可能满足客户的需求。然后,由于没有检查请求的合理性,因此当客户进来并说他们要免费整个商店时,收银员会为他们将所有库存都装载到他们的卡车中。

它这不是一个完美的解释,但是它得到的想法是,告诉代码执行用户输入的内容,然后坏人使用该指令来销毁商品。

我猜这实际上取决于您要克服的观点。

#8 楼

所有这些都取决于您在这里谈论的非技术性程度,但是我通常会向商人描述SQL注入,类似于-

“一些网站如何处理输入的缺点来自用户的信息(例如,您在注册表格中输入姓名的地方),如果攻击者想要的细节比信息多,则可以使攻击者访问存储该站点的所有用户信息的数据库。

“某些Web应用程序无法正确地将用户输入与数据库说明分开,这可能使攻击者可以通过他们填写的网站表单中的信息直接指示数据库。这可以允许攻击者从数据库中读取其他用户的信息,或在其中更改某些信息。“

#9 楼

我认为仅演示攻击即可获得最佳效果。编写外观无害的Web公式,并使用用户输入显示查询结果。然后,在输入您自己准备好的输入后,您的听众在结果中找到密码后将具有“ aha体验”。我制作了一个演示页面,只需单击“下一个箭头”以填写准备好的输入即可。

PS如果您自己编写这样的页面,请非常小心,不要让测试人员获得不需要的特权。最好的情况是,您一个人将以尽可能低的数据库特权在本地系统上运行演示(并非应该进行所有类型的攻击,这只是一个演示)。将允许的表达式列入白名单。

#10 楼

该数据库就像一个许愿的神奇精灵(或Oracle)。我们已经告诉我们的精灵最多只允许三个愿望,但是如果我们不验证人们的愿望,那么有人会通过请求“一百多个愿望”或“其他所有人的愿望”这样的聪明东西来轻易地超越它。 “。

#11 楼

解释起来很简单:

系统可以接受来自任何用户的数据请求,以对其进行处理。

系统本身具有像删除oder更改数据一样操作的功能。

攻击者试图运行任何这些功能来获取或破坏某些东西。

/>因此攻击者将有效命令放入请求中。

系统运行这些命令,执行攻击者想要的任何操作。

评论


教育风格。技术不是很好,离计算机也不太远。有时,即使是不懂域的人也不需要真实的“原始”类比,它可以很好地解释这个概念,但不能提供对实际系统的高级理解。在大多数情况下,这种简明的解释(逐步进行)非常合理。它提供了许多现实世界类比的接口。

–火神乌鸦
2012年12月21日上午10:32

#12 楼

想象一家大公司将所有记录以纸质形式保存在一个装满文件柜的大房间里。为了检索文件或对文件进行更改,有人会填写一个简单的空白表格,然后将该表格发送给书记员,该书记员会按照该表格上的说明进行操作。

示例:


通常从开始日期_ _ _到结束日期_ _ _的位置检索客户的帐单记录_ _ __


这将变成这样:


检索从开始日期2011年1月1日到结束日期2011年12月31日的帐单记录,其中客户是Billy Joe Bob


但是在不道德的人的手中,也许该表格可以用于其他目的,例如:


从开始日期01开始检索帐单记录2011年1月1日至2011年12月31日结束,客户是罗伯特·门萨斯(Robert Mensas),并且还为所有客户检索了信用卡号


假装他们的名字还包括其他命令可以劫持填写表格,如果店员没有经过培训可以处理诸如此类的事情,那么他们也许会简单地执行这些指令而无需考虑它们,然后将所有信用卡信息交给用户。

或者,或者:


检索从开始日期2011年1月1日到结束日期2011年12月31日的帐单记录,客户是Robert Mensas,并且在Robert Mensas的帐户余额中增加了100,000美元。 br />这同样具有潜在的危险。

SQL注入的技巧是确保您的代码足够聪明,以确保用户不能更改要发送的命令的意图。到数据库,并且无法检索或更改不应被允许的数据。

评论


这个答案不会增加任何额外的价值,恕我直言,这与他(最高!)答案中使用的+ Polynomial完全相同。

–弗里希·拉贝(Frerich Raabe)
2012年12月21日13:12

@FrerichRaabe-没错,那么模仿又是最真诚的奉承;)

– TildalWave
13年3月6日在1:58

@FrerichRaabe但这是一个更相关的示例,不涉及思考型机器人。

– ypnypn
2014年9月12日下午3:40

#13 楼

如果您不需要快速进行操作并且没有纸可用,则只需演示整个过程即可。 SQL与自然语言非常相似,因此只需进行简单的查询并演示攻击即可:

 SELECT * FROM data WHERE key = $id


“ $ id被替换为此处可见的内容,指向URL参数通常,这是一个类似于1的数字。这将为我们提供:“

 SELECT * FROM data WHERE id = 1


”现在,如果有人在此处输入的不仅仅是数字,它也会被包括在内。例如,如果有人将1 OR 1 = 1放到那里,我们会得到这个“”

 SELECT * FROM data WHERE id = 1 OR 1 = 1


“您能看到行进的方向吗?发出多个命令(称为查询)(如果只是用分号将它们分开的话)。您能猜出如果有人输入1; DELETE EVERYTHING;会发生什么情况?“

 SELECT * FROM data WHERE id = 1; DELETE EVERYTHING;


”实际命令是DROP DATABASEDROP TABLE,但您知道了。”

#14 楼

有时,黑客会将计算机/编程命令放入Internet上的框内,以诱使网站进行不应做的事情。因此,我们会检查在网站上输入的信息,以查找可能是“命令”的内容。

...您到底要向谁解释?

#15 楼

我认为最简单,最清晰,最有趣的示例来自“辛普森一家”:巴特的恶作剧电话:
https://en.wikiquote.org/wiki/List_of_Simpsons_Prank_Calls
示例:

Moe:[接听电话] Moe的酒馆。
巴特:你好,Al在吗?
Moe:Al?
Bart:是的,Al。姓:Coholic。
萌:让我检查一下... [通话] Al的电话。 Al Coholic。这里有酒精饮料吗? [酒吧顾客笑]
萌:等一下。 [电话]听着,你是黄腹的老鼠。如果我找到你是谁,我会杀了你! [挂断]
巴特和丽莎:[笑]
荷马:希望有一天能找到那个朋克,萌。比喻?粗心地重复而不检查的“名称”会导致意外的行为。
YouTube链接到这些电话恶作剧的汇编,以帮助选择最合适的示例。

评论


被低估的答案。

–li x
18年4月10日在12:16

妳去您让我登录只是为了投票。

–user7393973
18年6月26日14:33

#16 楼

SQL注入是恶意用户试图从未经授权访问其网站的信息中获取信息。

这就像在审问另一个人一样,审问者是恶意用户,被讯问者是网站。

讯问者可能做的事情是:


研究人员的背景以发现弱点
使用各种过去对他人有用的已知技术
寻找要使用的新技术

被讯问的某些弱点可能是:


培训的人
人的智慧
人的家庭
他们的人类型

要注意的是有比其他人更好的询问器人们会马上说话,而其他人可能永远不会说话。

评论


我真的看不到这里的连接。

– Michael Mior
2012年12月21日下午14:07

#17 楼

用技术上的类比来解释很好,但我听起来会有些冗长和la脚。 br />如果以足够严格的方式进行操作,您可以通过网络的恶意鱼就更少了。

我将使用带有一些非常简单的带有框和箭头的伪代码的简单绘图,并且解释机器人和盒子的类比。

#18 楼

我使用非技术人员的方法:


假设您正在大型办公大楼中工作。每个职员都有自己的办公室钥匙(=程序员想要执行的SQL查询)。现在有人拿起了针头文件并对其密钥进行了一些修改,即删除了一个引脚(= SQL-Injection,更改了SQL查询)。修改后的钥匙可以打开不同的门(或可能打开所有门)。因此,文员可以访问该房屋中的更多或所有办公室,并可以从其他办公室读取/更改文档。


每个人都可能会使用钥匙和锁,因此应该很容易理解,从我的角度来看,这与SQL注入非常相似。

评论


但是,这不是SQL注入的工作方式……您没有打开更多的锁,而是让钥匙变成了新的门,导游或其他东西(类比有点崩溃)

–Rory Alsop♦
2012年12月20日上午11:11

@RoryAlsop:我对答案做了一些澄清,从我的角度来看,它与SQL注入的常规工作非常相似。您为什么认为它不合适?

– qbi
2012年12月20日上午11:20

@qbi-我同意这不是最适合这份工作的。对于一般的黑客(甚至是各种定义)而言,这是一个有趣的类比,但是使用SQL注入,您还可以完全改变预期的结果,而不仅是“撬开”一把锁。为了使这种类比更接近SQL注入,这个被破解的密钥不仅必须更改锁着的门的唯一目的(将不受欢迎的访客拒之门外),而且还需要以某种方式更改要使用它进入的房间。您的观众将不得不观看《迷失的房间》才能获得它。 ;)

– TildalWave
13年6月6日在2:11

#19 楼

YouTube频道Live Overflow上有一个很棒的视频,名为“注入漏洞-或:我如何获得免费的汉堡”。视频描述:


一天晚上,我点菜,不小心将汉堡包注入了订单。送货员将注释作为订单列表上的另一个项目弄混了,然后就做出了。即使没有附加任何价格。


评论


这是仅链接的答案。请在此答案中包含链接的相关部分。

– schroeder♦
3月13日23:26

@schroeder我还应该包括什么?

–所罗门·乌科(Solomon Ucko)
3月13日23:49

如果您删除链接,请考虑一下您在此处的帖子如何回答问题。现在,这根本不是一个答案。

– schroeder♦
3月14日8:47

@schroeder我复制的视频描述包括:“送货员将注释作为订单列表上的另一个项目弄混了,然后就做出了。”即使只是那将是一个半体面的答案。

–所罗门·乌科(Solomon Ucko)
3月14日14:53

#20 楼

它总是取决于倾听您的人,但这就是我向他/她解释的方式-

想象一下,当您发送带有-


“新年快乐!请保重。-弗雷德”


那些没有良好意愿能够访问您的电报的人将拦截并替换突出显示的-


“新年快乐!请给我们汇钱。-Fred”


希望有帮助! :)

评论


常规的消息篡改并不能真正说明SQL注入的本质。

–马克
16年1月19日在6:27