infosecwriteups翻译文章
目标的范围是一个票务Android应用程序(Prod)。这个应用程序是基于德国的主要公共交通票务应用程序。
登录安卓应用程序并完成帐户设置后,我遇到了“更改我的数据”选项。
在下一个屏幕中,我必须修改我的个人数据
在保存数据时,我发现以下请求被发送到服务器
The request format was like 062.6.26#{some long data}.This looks interesting. 接下来,我选择了{一些长数据}并将其发送到解码器。我尝试解码它并发现它是base64。解码后的数据是一个 XML,如下图所示
Great, next I included the following XXE payload
version="1.0" encoding="UTF-8"?><!DOCTYPE aa[ bb ANY> xxe SYSTEM "file:///etc/passwd">]>
并从主体中调用定义的实体 &xxe; 如下图所示:
现在,我需要做的就是将整个payload编码回 base64 格式。
最后,我替换了原始请求中的payload并将请求转发到服务器。而且,bang! get了 /etc/passwd 的内容
由于应用程序使用的是 java,甚至可以使用以下pyload列出目录
version="1.0" encoding="UTF-8"?><!DOCTYPE aa[ bb ANY> xxe SYSTEM "file://">]>
我在寻找SSH private keys,但出于好奇,我尝试获取 /etc/shadow(感觉很幸运:D)。而且,令我惊讶的是,我get it(这是一个罕见的案例)。表明它以 root 身份运行。
我还发现,SSH 私钥在 /home/user/.ssh/ 目录中可以读到。这意味着我们也可以在系统上执行完整的 RCE,但授权不够。SO 我没有尝试,直到这里停止我的测试并报告了同样的情况。