eSafe白帽駭客資安網-網絡安全背後的巨人,提供駭客,網站入侵測試,網站被駭,網站漏洞,駭客入侵,資訊安全,入侵,ecshop,wordpress,漏洞修復,木馬清除,資安服務

thinkphp通殺漏洞利用以及網站安全修復建議

   

         thinkphp在國內來說,很多站長以及平台都在使用這套開源的系統來建站
,為什麼會這麼

深受大家的喜歡,第一開源,便捷,高效,生成靜態化html,第二
框架性的易於開發php架構,

很多第三方的插件以及第三方的開發公司較多,模板
可以自定義設計,在thinkphp的基礎上可

以開發很多大型的虛擬幣平台,以及會員
平台,商城系統,thinkPHP的官方在系統升級方面做

的比較完善,及時更新與修復
一些BUG。


目前官方最新版本是ThinkPHP5.0.20版本,之前的ThinkPHP3.2,
ThinkPHP3.1、ThinkPHP3.0

都存在過網站漏洞,包括一些高危的遠程代碼執行漏洞
,thinkphp sql注入漏洞,後台管理員

XSS跨站漏洞,任意文件上傳漏洞等等。
目前我們eSafe白帽資安網於2018年9月5號,在日常的thinkphp

網站安全檢測當中,發現某
客戶使用的thinkphp系統存在著網站sql注入漏洞,危害性較高,一開

始以為客戶
使用的是較低版本:thinkphp 3.2.3,才會存在這種網站漏洞,但是在實際的安全檢測

當中發現不僅僅是這個版本,還包含了目前最新版本5.0.20,關於該網站漏洞
的詳情與poc利用,

我們一步一步來分析。

 
 
thinkphp漏洞產生原理
 
 
產生網站漏洞的文件存在於library文件夾下的think文件,裡面包含的db文件夾的

driver.class.php代碼中的第677行開始,在order處理分析的時候發現分析參數里可以插入非法的

字符,在key賦值的時候並沒有做嚴格的安全限制與過濾,導致攻
擊者可以使用SQL注入語句進

行構造查詢數據庫裡的內容,包括可以查選數據庫裡
的管理員賬號密碼, 寫入數據庫等等的操作。

thinkphp 3.2.3漏洞代碼如下:
 
 /**
     * order分析
     * @access protected
     * @param mixed $order
     * @return string
     */
    protected function parseOrder($order) {
        if(is_array($order)) {
            $array   =  array();
            foreach ($order as $key=>$val){
                if(is_numeric($key)) {
                    $array[] =  $this->parseKey($val);
                }else{
                    $array[] =  $this->parseKey($key).' '.$val;
                }
            }
            $order   =  implode(',',$array);
        }
        return !empty($order)?  ' ORDER BY '.$order:'';
    }
 
ThinkPHP 5.1.22漏洞代碼存在於library文件夾下的think文件裡的db/query.php
 
代碼裡的第1514行,代碼如下:
 
/**
     * 指定排序 order('id','desc') 或者 order
 
(['id'=>'desc','create_time'=>'desc'])
     * @access public
     * @param string|array $field 排序字段
     * @param string       $order 排序
     * @return $this
     */
    public function order($field, $order = null)
    {
        if (empty($field)) {
            return $this;
        } elseif ($field instanceof Expression) {
            $this->options['order'][] = $field;
            return $this;
        }
 
        if (is_string($field)) {
            if (!empty($this->options['via'])) {
                $field = $this->options['via'] . '.' . $field;
            }
            if (strpos($field, ',')) {
                $field = array_map('trim', explode(',', $field));
            } else {
                $field = empty($order) ? $field : [$field => $order];
            }
        } elseif (!empty($this->options['via'])) {
            foreach ($field as $key => $val) {
                if (is_numeric($key)) {
                    $field[$key] = $this->options['via'] . '.' . $val;
                } else {
                    $field[$this->options['via'] . '.' . $key] = $val;
                    unset($field[$key]);
                }
            }
 
從以上thinkphp 3.2.3 、thinkphp 5.0的代碼裡可以分析出來,當order在分析關聯函數的時候會

賦值於key值中,可以摻入sql注入語句執行攻擊網站,並可以拼接
方式繞過sql安全過濾,導致

可以執行sql語句,查詢數據庫,操作數據庫。
 
thinkphp漏洞利用詳情:
 

 
thinkphp漏洞修復建議:
 
如果是低版本的thinkphp 3.*的系統,請盡快升級到thinkphp最高版本。
 
如果是高版本的thinkphp 5.*的系統,請盡快升級到thinkphp最高版本。
 
如果網站被攻擊了,請盡快做好網站的安全備份,查找網站存在木馬後門,對其代碼裡被篡改的代

碼進行修復,並做好網站安全加固,對一些緩存文件夾進行安全權
限設置,如果對網站漏洞修復不

是太懂的話可以找專業的網站安全公司去處理,國
內eSafe白帽資安網公司,綠盟安全,啟明星辰都是比較

專業的。如果網站使用的是單獨服
務器比如linux系統、windows系統,可以部署網站防火牆,來

防止sql注入攻擊。
網站默認的管理員後台地址可以修改為比較繁瑣的地址。
 
分享: