Lab: Exploiting PHP deserialization with a pre-built gadget chain:利用预先构建的小工具链利用 PHP 反序列化(PHPGGC的使用)

靶场内容

该实验室具有使用签名 cookie 的基于序列化的会话机制。它还使用通用的 PHP 框架。尽管您没有源代码访问权限,但您仍然可以使用预构建的小工具链来利用此实验室的不安全反序列化。

为了解决实验室问题,识别目标框架,然后使用第三方工具生成包含远程代码执行有效负载的恶意序列化对象。然后,研究如何生成包含恶意对象的有效签名 cookie。最后,将此传递到网站以morale.txt从 Carlos 的主目录中删除该文件。

您可以使用以下凭据登录自己的帐户: wiener:peter

漏洞分析

  • 这里需要用到恶意序列的生成工具:PHPGGC。安装方法:使用kali:apt install phpggc即可
  • 登录账户并向 Burp Repeater 发送任意一个包含会话 cookie 的请求(建议是根目录那个报文)。突出显示 cookie 并将其发送到 Burp Decoder。
  • 在 Burp Decoder中,选择 “Decode”>“URL”。
  • 注意到,cookie 包含一个 Base64 编码的令牌,使用 SHA-1 HMAC 哈希签名。
  • 突出显示令牌并选择“Decoder”>“Base64”。
  • 注意到,令牌实际上是一个序列化的 PHP 对象。
  • 在 Burp Repeater 中,观察如果您尝试使用修改后的 cookie 发送请求,则会引发异常,因为数字签名不再匹配。
  • 但是,您应该注意到:
    • 开发人员评论公开了调试文件的位置/cgi-bin/phpinfo.php。
    • 该错误消息表明该网站使用的是 Symfony 4.3.6 框架。
  • /cgi-bin/phpinfo.php在 Burp Repeater 中 请求该文件并观察它是否泄露了有关网站的一些关键信息,包括SECRET_KEY环境变量。
    image
  • 发送这个数据包,用浏览器打开,ctrl+f找查secret找到了这个密室。
  • 保存此密钥;稍后您将需要它来签署您的漏洞利用程序。
  • 下载“PHPGGC”工具并执行以下命令:
    phpggc Symfony/RCE4 exec 'rm /home/carlos/morale.txt' | base64
  • 这将生成一个 Base64 编码的序列化对象,该对象利用 Symfony 中的 RCE 小工具链来删除 Carlos 的morale.txt文件。
  • 您现在需要构建一个包含此恶意对象的有效 cookie,并使用您之前获得的密钥对其进行正确签名。您可以使用以下 PHP 脚本来执行此操作。在运行脚本之前,您只需要进行以下更改:
    • 将您在 PHPGGC 中生成的对象分配给$object变量。
    • 将从phpinfo.php文件中复制的密钥分配给$secretKey变量。
    <?php
    $object = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    $secretKey = "xxxxxxxxxxxxxxxxxxxxxxx";
    $cookie = urlencode('{"token":"' . $object . '","sig_hmac_sha1":"' . hash_hmac('sha1', $object, $secretKey) . '"}');
    echo $cookie;
    
    image
  • 这将向控制台输出一个有效的签名 cookie。
    image
  • 在 Burp Repeater 中,用你刚刚创建的恶意 cookie 替换你的会话 cookie,然后发送请求来解决实验室。
    image

这是利用PHPGGC这个小工具提取恶意代码的过程,主要还是告诉读者初步使用这个工具

posted @ 2021-08-23 14:59  Zeker62  阅读(268)  评论(0编辑  收藏  举报