翻译文章,原文:API Security Testing (Part — 2)
正如我之前告诉您的那样,对于大多数渗透测试人员,API安全测试是一个复杂的领域。在测试安全性部分时,我们不应充当脚本小子。尽管可以发现更多的漏洞。我将重点缩小到重要缺陷上。可能需要第三部分才能完成本系列。
XXE 和 SSRF 现在是API端点中的两个主要漏洞。我在这里使用的屏幕截图来自PortSwigger Academy,因为我无法使用实时屏幕截图。保密很重要!!
第五步:
XXE — XML外部实体(XXE)注入
XML —可扩展标记语言
看到这些缩写后,您可能会想知道什么是外部实体?为什么我们只在这里关注XML,为什么不关注HTML外部实体或SAML外部实体等等呢?
顾名思义,XML与应用程序服务器文件系统以及任何后端或外部系统上的文件进行交互。
HTML是一种标记语言,可以帮助您创建和设计Web内容。而XML文档可以在系统和应用程序之间传输。借助XML,您可以在不同平台之间快速交换数据。
在渗透测试期间,所报告的HTML漏洞已由开发人员处理,我们进行了探索以查找其他标记语言的漏洞。发现大多数API开发人员使用的xml version ="1.0" 容易受到攻击。
下一个查询是为什么使用外部实体而不是内部实体?这很简单。在引用外部实体时,标记语言表示系统上的文件,在本例中为运行应用程序的Web服务器。当说内部实体时,它是指在其代码内部编写的实体。
怎么找到XXE注入?
- 在urpSuite中捕获XML请求。
- 转到BURP HTTP历史记录并过滤所有XML请求,以简化测试。
- 过滤出XML请求后,您将看到类似这样的请求。
- 然后,您尝试对XML代码进行此修改。在XML声明和stockCheck元素之间插入以下外部实体定义:
<!DOCTYPE test [ <!ENTITY xxe SYSTEM “file:///etc/passwd”> ]>
- 然后将productId号替换为对外部实体的引用:
&xxe
; 。在下一个响应中,您将找到/etc/passwd
文件。就像下面一样。
- 现在,如果您看到我的屏幕快照,您会清楚了解有效载荷的放置位置并找到敏感数据
- 请注意,实时攻击并非如此简单。它需要渗透测试人员灵活地修改有效负载。
- 在测试API端点时,为了更安全,我们执行Blind XXE攻击。(注:FreeBuf上的一篇文章Blind XXE详解与Google CTF一道题分析
XXE的影响:
- 我们可以检索内部文件。
- 我们还可以执行远程代码和SSRF。
临时解决:
防止XXE的最安全方法始终是完全禁用DTD(外部实体)。取决于解析器,该方法应类似于以下内容:
factory.setFeature(“http://apache.org/xml/features/disallow-doctype-decl", true);
禁用DTD还可以使解析器安全地抵御拒绝服务(DOS)攻击,例如Billion Laughs。如果无法完全禁用DTD,则必须以特定于每个解析器的方式禁用外部实体和外部文档类型声明。 (来源OWASP)
第六步:
您已经听说过CSRF(跨站点请求伪造),并且知道如何执行。什么是SSRF?
SSRF —服务器端请求伪造
当应用程序盲目地信任用户并按照给定的方式执行其输入,并且Web服务器的OS也信任该应用程序的输入时,就会发生。这就是背叛的游戏。现在《权力的游戏》主题响了。如果您正在寻找具体的定义,则为:
“服务器端请求伪造(也称为SSRF)是一个网络安全漏洞,攻击者可以利用该漏洞诱使服务器端应用程序向攻击者选择的任意域发出HTTP请求。”
怎么找SSRF?
- 您可以在任何请求中找到它。 GET或POST请求都无关紧要。
- 没有参数,您可以尝试使用“ URL重定向攻击”点来执行它。
- 实时,如果在API中发现内部IP披露漏洞,则可以在有效负载中使用该IP地址来执行此攻击。
我是怎么做的
- 在这里,我找到了要插入的stockapi参数。
- 当我给
/admin
参数时,什么也没有发生,没那么容易。
- 我进行了一点小的改动
http//localhost/admin
进行了一些更改。看起来很简单。
- 可能是我在管理页面中。谁知道 ?让我们尝试删除一个用户。
- 您会看到“成功”消息。我从之前的屏幕快照中删除了一个名为“ carlos”的用户。
SSRf的影响可能是任何事情。该攻击也与XXE攻击有关。您可以从XXE执行SSRF。您集思广益!通常,它可以执行内部端口和地址的扫描。但是您已经看到,如果使用得当,它可以删除用户。
缓解措施:它可以像输入验证一样简单。为防止Web应用程序中出现SSRF漏洞,强烈建议使用允许的域和协议的白名单,Web服务器可从中获取远程资源。