今天学习的是第九章的9.4~9.5,注入xpath。Xpath(即XML语言)可访问数据,以响应输入,因此被应用于攻击应用程序。
破坏应用程序逻辑,与sql不同,xpath查询区分大小写,相同点是注入数字不需要单引号。
Xpath注入漏洞从目标XML文档中可获得任何信息,其与sql注入技巧相似。
盲目xpath注入,通过节点,攻击者可发动完全盲目的攻击。
查找xpath注入漏洞,将攻击字符串提交给易于注入的函数。
防止方法,只提交严格输入的简单数据。
问题:
1、可以通过两个简单的方法确定列数。其一,可以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、一种确认数据库类型的简单方法,是使用数据库特定的字符串串联语法在所控制的查询中构建某个良性输入。例如,如果原始参数值为London,则可以轮流提交以下数据项:
'||' London
'+'London
如果第一个数据项导致和原始参数值相同的行为,说明数据库可能为Oracle。如果第二个数据项导致和原始参数值相同的行为,说明数据库可能为MS-SQL。
3、虽然看似违背常理,但用户注册功能可能是最安全的。注册功能通常使用INSERT语句,如果修改这些语句,并不会影响到其他记录。用于更新个人资料的功能可能使用条件性UPDATE语句,如果注入' or 1=1--之类的有效载荷,可能会导致数据表中的所有记录遭到修改。同样,注销功能可能使用条件性DELETE语句,如果操作不当,也可能影响到其他用户。
也就是,我们不可能提前确定某个功能会执行哪些语句;在执行测试之前,应向应用程序所有者警告可能导致的风险。
4、 有一种简单的方法可以达到相同的效果,即使用输入' or 'a'='a,而无需使用注释符号。
5、 可以使用SQL注释字符分隔注入的有效载荷中的关键字和其他项目。例如:
'UNIONSELECTusername,passwordFROMusers--
6、可以使用CHAR命令通过ASCII数字字符代码返回字符串。例如,在Oracle上,字符串FOO可以表示为:
CHAR(70)||CHAR(79)||CHAR(79)
7、在将用户提交的输入置入查询的其他元素(如表和列名称),而非查询参数中时,将会出现这种情况。参数化查询无法使用这些项目的占位符进行预编译,因此需要采用不同的解决方案(可能需要基于严格的输入确认)。
8、 因为已经具有管理员访问权限,因此可以使用应用程序本身检索所需的任何数据,也就是说,不必通过SQL注入攻击来获取应用程序本身的数据。但是,仍然可以利用这种攻击来访问任何与保存在同一数据库中的其他应用程序有关的数据,或者提升自己在数据库或基础操作系统中的权限,或者攻破数据库服务并将攻击范围扩大到更广泛的内部网络。
9、XPath注入仅可用于从目标XML文件中检索数据。因此,如果应用程序不包含任何敏感数据,则这种漏洞并不会导致严重的后果。同样,利用SQL注入漏洞并不能从数据库中提取任何敏感数据。但是,有时可以利用这类攻击提升在数据库中的权限,并以其他方式实施攻击。
在某些情况下,SQL注入漏洞可能是一个更加严重的漏洞。另一方面,OS命令注入则始终是一个高风险的漏洞,因为攻击者可以利用它直接攻破基础服务器,并可将其作为针对内部系统的其他攻击的起点。
10、该功能正访问Active Directory,则提交通配符*作为搜索查询可能会返回大量记录。在其他系统中,这两个通配符都不会造成相同的效果。