[327] Exploits of a Mom

Title Text:Her daughter is named Help I’m trapped in a driver’s license factory.

Origin:https://xkcd.com/327/

https://www.explainxkcd.com/wiki/index.php/327:_Exploits_of_a_Mom

媽咪攻擊

她女兒的名字是「救命!我被困在駕照工廠裡面!」

https://xkcd.tw/327

罗伯茨夫人接到了儿子学校的电话。打电话的人,可能是学校的管理员之一,问她是否真的给她的儿子罗伯特命名; DROP TABLE学生; – ,一个相当不寻常的名字。[引证需要]也许令人惊讶的是,罗伯茨夫人的回答是肯定的,声称她使用了绰号“小鲍比表”。由于全名被读入学校系统的数据库而没有数据清理,因此会删除数据库中的“学生”表。

这部漫画的标题是双关语。利用可能意味着成就或英雄行为,但在计算机科学中,该术语指的是利用其他软件中的漏洞的程序或技术。事实上,可以说她的利用是利用漏洞(她的成就是利用漏洞)。标题还可以指她为儿子选择的名字,这是非常特别的。

在SQL(数据库编程语言)中,命令由分号分隔;文本字符串通常使用单引号分隔。命令的一部分也可以括在括号(和)中。数据条目作为“行”存储在类似项目(例如,学生)的命名“表格”中。删除整个表(以及该表中的每一行数据)的命令是DROP TABLE,如DROP TABLE Students;。

这里被利用的漏洞是名称输入中的单引号未被软件“正确”“转义”。也就是说,如果学生的名字确实包含引号,那么它应该被解析为构成文本字符串的字符之一,而不是作为关闭字符串的标记,这是错误的。缺乏仔细的解析是一个常见的SQL漏洞;这种类型的漏洞被称为SQL注入。罗伯茨夫人因此提醒学校确保他们已经添加了数据过滤代码,以防止将来出现代码注入漏洞。

例如,要将有关Elaine的信息添加到名为“Students”的数据表中,SQL查询可以是:

插入学生(名字)VALUES(’Elaine’);

但是,使用奇数名称Robert’); DROP TABLE Students; – 我们在上面使用“Elaine”时,SQL查询变为:

插入学生(名字)VALUES(’Robert’); DROP TABLE学生; – ‘);

通过在奇数名称中插入两个分号,现在这是三个格式良好的SQL命令:

插入学生(名字)VALUES(’Robert’);

DROP TABLE学生;

– “);

第一行是有效的SQL代码,它将合法地插入有关名为Robert的学生的数据。

第二行是有效的注入SQL代码,它将从数据库中删除整个Student数据表。

第三行是有效的代码注释( – 表示注释),S​​QL服务器将忽略它。

为此,有助于了解数据库的结构。但是,学校的学生管理数据库可能有一个名为Students的表,这是一个很好的猜测。

当然,在现实生活中,大多数此类漏洞利用程序的执行不是通过设计一个人的名字来最终输入学校数据库查询,而是通过访问某种输入系统(例如网站的登录屏幕)或者搜索界面)并通过反复试验来猜测各种组合,直到某些东西起作用,或许首先尝试注入SHOW TABLES;命令以查看数据库的结构。

要正确无害地在学校数据库的Students表中包含奇怪的名称,正确的SQL是:

插入学生(名字)VALUES(’Robert \’); DROP TABLE学生; – ‘);

请注意,罗伯特之后的单引号现在被反斜杠清理,后者将其从恶意代码更改为无害数据,并且学生罗伯特的全部第一个“名称”; DROP TABLE学生; – 现在已正确存储。

应该注意的是,虽然数据清理可以降低SQL注入的风险,但正确的预防技术是使用Prepared语句。

注意到使用单词TABLE的“实际”名称和孩子的昵称是Bobby Tables之间的区别,可以说有一个隐含的参考数据库命名约定最有争议的主题之一 – 表名应该是单数还是复数。

标题文字提到罗伯茨夫人的女儿被命名为“帮助我被困在驾驶执照工厂”。这是一个关于如果某人被困并被迫在制造工厂/工厂工作,然后他们会写产品“帮助我被困在____工厂”以便告诉外面的人。拥有这个名字会导致任何警察将她拉过来表示一些担忧。首先获得许可证可能很困难。插入这样的帮助信息的想法已在10:Pi Equals中使用。标题文本甚至更有趣地翻译成西班牙语,其中“帮助”(“Socorro”)这个词实际上是一个普通的女性名字,来自圣母玛利亚的标题,所以它将是一个看似合理的女孩的名字(如“ Bobby Tables“适合男生”。

Leave a Reply

Your email address will not be published. Required fields are marked *

Categories