蜗牛星际做网站服务器,做网站时候如果添加微信代码,黄冈市建设局官方网站,网页设计特色及创意通过不安全反序列化漏洞远程执行代码 今天#xff0c;我将回顾 OWASP 的十大漏洞之一#xff1a;不安全反序列化#xff0c;重点是 .NET 应用程序上反序列化漏洞的利用。
#x1f4dd;$ _序列化_与_反序列化
序列化是将数据对象转换为字节流的过程#xff0c;字节流可以…通过不安全反序列化漏洞远程执行代码 今天我将回顾 OWASP 的十大漏洞之一不安全反序列化重点是 .NET 应用程序上反序列化漏洞的利用。
$ _序列化_与_反序列化
序列化是将数据对象转换为字节流的过程字节流可以存储在文件、内存和数据库中或者通过网络、在应用程序的不同组件之间以及在 API 调用中发送。
反序列化是相反的过程它将流字节恢复到对象被序列化之前的原始状态。
不安全的反序列化正在传递可被应用程序解释的受操纵的序列化对象从而导致其控制。该漏洞的影响范围从拒绝服务攻击、绕过身份验证到任意代码执行。
与任何安全漏洞一样核心问题是应用程序端缺乏对用户输入的验证而应用程序端盲目信任发送给它的数据。在解析数据并对其采取行动之前没有实施适当的检查。
$_Exploitation_Demo
我选择了 Hack The Box 中的 JSON 关卡来演示 .NET 应用程序的不安全反序列化。
我的 Web 应用程序测试方法首先将请求分为三个部分 •手动模糊应用程序并使用 Burp Suite 仔细观察响应。我通常专注于通过更改、删除或修改值来测试发送到应用程序的每个参数。
•有意生成错误消息以查看应用程序是否会显示可见的错误从而公开一些后端信息帮助我了解应用程序的结构。
•扫描目录和端点。 我通过 Burp Suite 代理发送请求来检查应用程序。我注意到日志记录请求被发送到“api/token”路由以在授予访问令牌Bearer Token之前检查用户名和密码。
此外所有数据均以 JSON 形式发送。
我将请求发送给Repeater进行进一步调查。由于我没有密码因此我传递了随机值来观察应用程序的响应。正如我们从下面的屏幕中看到的该用户不存在。 通过向“ api/token”发送一个空请求来继续模糊测试过程看看我是否仍然会收到“用户不存在”错误的相同错误。相反应用程序返回了 500 错误响应揭示了有关应用程序语言及其部署位置的一些有用信息耶
根据显示的错误用户名是admin。 我尝试使用 admin/admin 登录并且成功了。但该关卡并不是考察弱口令而是展示信息泄露和不安全反序列化漏洞。
回到我们的demo…… 登录后我注意到“api/Account”请求中添加了两个参数- Bearer token 和 OAuth2 Cookie 。这两个值均以 Base64 编码。 Bearer Token 是与 OAuth 2.0 授权框架一起使用的访问令牌用于授予对受保护资源的访问权限而不是直接使用所有者的凭据。—RFC 6750 — OAuth 2.0 授权框架[1] 不安全反序列化的主要标志之一是使用 base64 编码的序列化对象并将其放入 cookie 中。当 Cookie 返回到应用程序时它会对其进行反序列化并执行其内容。没有用于检查不可信数据的安全/安全控制。
为了确定哪个参数获取应用程序解析的内容我为每个参数传递了不同的值。正如您所看到的应用程序根本不检查 Cookie。它只寻找 Bearer Token值。 确认反序列化错误的另一种方法是发送格式错误的 JSON 请求并查看应用程序如何响应它。我在请求中随机添加了第二个双引号对其进行编码然后将其发送到应用程序。 正如您所看到的应用程序返回了一个反序列化错误说明失败的原因以及期望的序列化类型。 •失败因为无法解析格式错误的 JSON 对象
•预期的序列化类型是 JSON.NET $_Paylaod_Time
现在我们开始进行漏洞利用。我们知道Bearer token是易受攻击的参数理论上我们发送给它的任何 JSON 数据都应该被解析。为了检查这一点我发送了一个简单的 ping 请求来确认我们在机器上执行了任意代码。
由于应用程序正在寻找 JSON.NET 对象因此我们可以使用Alvaro Muñoz开发的名为ysoserial.nethttps://github.com/pwntester/ysoserial.net的工具来创建所需的对象。他的 GitHub 存储库提供了使用该工具的优秀示例。
注意此工具在 Windows 计算机上效果最佳。 我使用 Base64 对请求进行编码并启动tcpdump来侦听 ICMP 数据包 [echo requests]。当我将编码的有效负载传递给应用程序时我立即收到了机器的响应验证了我们执行代码的能力。 从这里我们可以使用Netcat或Nishang Powershell来反弹shell。我选择了Nishang TCP on-liner。 正如我们所看到的精心设计的payload被反序列化并执行应用程序没有进行验证检查以防止此类攻击。影响是远程代码执行。
✏️ $预防建议
•如果可能请停止使用序列化
•使用HMAC签名等数字签名来检查传递的数据是否未被篡改。
•在序列化并发送到应用程序之前始终验证用户输入并清理数据 申明本账号所分享内容仅用于网络安全技术讨论切勿用于违法途径所有渗透都需获取授权违者后果自行承担与本号及作者无关请谨记守法。