Opencart 多漏洞解析

  • A+
所属分类:lcx

Opencart本地包含漏洞分析

作者:单恋一支花 from dis9 team

漏洞编号:http://www.exploit-db.com/exploits/17108/

测试版本:opencart_v1.5.1

测试系统:windows xp sp3

效果如图:

分析:

一:本地包含漏洞

Index.php文件225行

// Router
if (isset($request->get['route'])) {
        $action = new Action($request->get['route']);
} else {
        $action = new Action('common/home');
}

很显然route是属于action这个对象的,在index.php中被实例化!

下面我们来看aciton.php

public function __construct($route, $args = array()) {
        $path = '';
        
        $parts = explode('/', str_replace('../', '', (string)$route));第一次过滤
        
        foreach ($parts as $part) { 
                $path .= $part;
                
                if (is_dir(DIR_APPLICATION . 'controller/' . $path)) {
                        $path .= '/';
                        
                        array_shift($parts);
                        
                        continue;
                }
                
                if (is_file(DIR_APPLICATION . 'controller/' . str_replace('../', '', $path) . '.php')) {
                        $this->file = DIR_APPLICATION . 'controller/' . str_replace('../', '', $path) . '.php';第二次过滤
                        
                        $this->class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $path);

                        array_shift($parts);
                        
                        break;
                }
        }
        
        if ($args) {
                $this->args = $args;
        }
                
        $method = array_shift($parts);
                        
        if ($method) {
                $this->method = $method;
        } else {
                $this->method = 'index';
        }
}

route提交字符串经过了两次过滤,每次都是用空来替换字符串中的“../”,但是由于在windows平台下“/”“”都可以用来做目录的跳转,所以我们可以用“”来绕过过滤!linux平台下可以用n个“./”,或者00%截断,有兴趣的朋友可以尝试下!

测试方法:

在admin目录下建立一个1.php的文件,提交index.php?route=....admin1!

我们可以包含上传!

Poc1:

效果如图

Opencart 多漏洞解析

但是上传是随机加上md5命名的,没法利用,如果知道利用方法的朋友,还望不吝赐教!:

uploadcatalogcontrollerproductproduct.php  551行

文件命名为

$file = basename($this->request->files['file']['name']) . '.' . md5(rand());

在windows平台下,我们还是可以通过穷举的方式,找到文件的(太菜了,笨办法),linux平台就没法子了,太多了!

二:http响应拆分漏洞

看代码:systemlibraryurl.php

public function link($route, $args = '', $connection = 'NONSSL') {
                if ($connection ==  'NONSSL') {
                        $url = $this->url;        
                } else {
                        $url = $this->ssl;        
                }
                
                $url .= 'index.php?route=' . $route;

systemlibraryurl.php

public function redirect($url) {
                header('Location: ' . $url);
                exit;
        }

url没有经过过滤直接代入重定向,造成http响应拆分漏洞!

Poc2:

测试返回:Warning: Header may not contain more than a single header, new line detected. in D:wampwwwopencart_v1.5.1uploadsystemenginecontroller.php on line 29

就这么多了,最近一直在玩linux和php,希望各位朋友能与我多多讨论!

转自:http://www.dis9.com/viewthread.php?tid=1734&extra=page%3D1%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000

文章来源于lcx.cc:Opencart 多漏洞解析

相关推荐: 高铁网上订票系统 注入漏洞

说明:本人没有入侵,本人只是网上某个贴吧看到的,COPY来给大家看看真假的,具体哪个论坛忘了,该死的电脑也刚重装。 ----------------- 请尊重别人的劳动成果,转载请注明www.gov.cn 刚看新闻,发现高铁的网上订票系统已经做好了,目前只能买…

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: