黑客攻防技术宝典web实战篇:攻击数据存储区习题

猫宁!!!

参考链接:http://www.ituring.com.cn/book/885

随书答案。

1. 如果要通过实施 UNION 攻击、利用 SQL 注入漏洞获取数据,但是并不知道最
初的查询返回的列数,如何才能查明这个值?


可以通过两个简单的方法确定列数。其一,可以 SELECT 每个列中的类型中
性值 NULL,并逐渐递增列数,直到应用程序返回数据,表明指定了正确的列数,
例如:
' UNION SELECT NULL--
' UNION SELECT NULL, NULL--
' UNION SELECT NULL, NULL, NULL--
请注意,在 Oracle 上,需要在上述每种情况的最后一个 NULL 后添加 FROM DUAL。
另外,可以注入 ORDER BY 子句并递增指定列,直到引发错误,表明请求了
无效的列:
' ORDER BY 1--
' ORDER BY 2--
' ORDER BY 3--


2. 已经确定一个字符串参数中的 SQL 注入漏洞,已经确信数据库为 MS-SQL 或
Oracle,但当前无法获得任何数据或错误消息确定到底是哪个数据库。如何才能
查明这一点?


一种确认数据库类型的简单方法,是使用数据库特定的字符串串联语法在所控制
的查询中构建某个良性输入。例如,如果原始参数值为 London,则可以轮流提
交以下数据项:
'||' London
'+'London
如果第一个数据项导致和原始参数值相同的行为,说明数据库可能为 Oracle。
如果第二个数据项导致和原始参数值相同的行为,说明数据库可能为 MS-SQL。


3. 已经在应用程序的许多位置提交了一个单引号,并通过得到的错误消息确定
几个潜在的 SQL 注入漏洞。下列哪一种方法能够以最快的速度确定专门设计的输
入是否会对应用程序的处理过程造成影响?


(a) 注册一个新用户
(b) 更新个人资料
(c) 注销服务
虽然看似违背常理,但用户注册功能可能是最安全的。注册功能通常使用
INSERT 语句,如果修改这些语句,并不会影响到其他记录。用于更新个人资料
的功能可能使用条件性 UPDATE 语句,如果注入' or 1=1--之类的有效载荷,可
能会导致数据表中的所有记录遭到修改。同样,注销功能可能使用条件性 DELETE
语句,如果操作不当,也可能影响到其他用户。
也就是,我们不可能提前确定某个功能会执行哪些语句;在执行测试之前,应向
应用程序所有者警告可能导致的风险。


4. 在登录功能中发现了一个 SQL 注入漏洞,并尝试使用输入' or 1=1--来避开
登录,但攻击没有成功,生成的错误消息表明--字符串被应用程序的输入过滤删
除。如何解决这个问题?


有一种简单的方法可以达到相同的效果,即使用输入' or 'a'='a,而无需
使用注释符号。


5. 已经发现了一个 SQL 注入漏洞,但由于应用程序允许任何包含空白符的输入,
因而无法实施任何有效的攻击。如何解除这种限制?


可以使用 SQL 注释字符分隔注入的有效载荷中的关键字和其他项目。例如:
'UNIONSELECTusername,passwordFROMusers--


6. 在将其合并到 SQL 查询之前,应用程序并不配对用户输入中出现的所有单引
号。假设已经在一个数字字段中发现了一个 SQL 注入漏洞,但需要在攻击有效载
荷中使用一个字符串值。不使用单引号,如何在查询中插入字符串?


可以使用 CHAR 命令通过 ASCII 数字字符代码返回字符串。例如,在 Oracle
上,字符串 FOO 可以表示为:
CHAR(70)||CHAR(79)||CHAR(79)


7. 在极少数情况下,应用程序在用户提交的输入中使用参数化查询,以不安全
的方式建立动态 SQL 查询。什么时候会出现这种情况?


在将用户提交的输入置入查询的其他元素(如表和列名称),而非查询参数
中时,将会出现这种情况。参数化查询无法使用这些项目的占位符进行预编译,
因此需要采用不同的解决方案(可能需要基于严格的输入确认)。


8. 假设已经提升了在应用程序中的权限,现在完全拥有管理员访问权限,这时
如果在某个用户管理功能中发现了一个 SQL 注入漏洞,如何利用这个漏洞进一步
扩大攻击范围?


因为已经具有管理员访问权限,因此可以使用应用程序本身检索所需的任何
数据,也就是说,不必通过 SQL 注入攻击来获取应用程序本身的数据。但是,仍
然可以利用这种攻击来访问任何与保存在同一数据库中的其他应用程序有关的
数据,或者提升自己在数据库或基础操作系统中的权限,或者攻破数据库服务并
将攻击范围扩大到更广泛的内部网络。


9. 在攻击一个并未保存任何敏感数据、也未实施任何身份验证或访问控制机制
的应用程序的情况下,如何排列下列漏洞的重要性?
(a) SQL 注入
(b) XPath 注入
(c) OS 命令注入


XPath 注入仅可用于从目标 XML 文件中检索数据。因此,如果应用程序不包含任
何敏感数据,则这种漏洞并不会导致严重的后果。同样,利用 SQL 注入漏洞并不
能从数据库中提取任何敏感数据。但是,有时可以利用这类攻击提升在数据库中
的权限,并以其他方式实施攻击。
在某些情况下,SQL 注入漏洞可能是一个更加严重的漏洞。另一方面,OS 命令注
入则始终是一个高风险的漏洞,因为攻击者可以利用它直接攻破基础服务器,并
可将其作为针对内部系统的其他攻击的起点。


10. 假如正在检测一个允许搜索个人资料的应用程序功能,并且怀疑该功能正访
问某数据库或 Active Directory 后端。如何确定到底是哪一种情况?


如果该功能正访问数据库,则提交 SQL 通配符%作为搜索查询可能会返回大量记
录。同样,如果该功能正访问 Active Directory,则提交通配符*作为搜索查询
可能会返回大量记录。在其他系统中,这两个通配符都不会造成相同的效果。

猜你喜欢

转载自www.cnblogs.com/landesk/p/10888422.html