phpcmsv9后臺登陸時,會向官網(wǎng)http://update.v9.phpcms.cn聯(lián)網(wǎng),說是檢查更新,實際同時也收集網(wǎng)站以及管理員的用戶信息還有登陸者的設(shè)備等信息。開始以為去掉后臺模板中的相關(guān)網(wǎng)址就行了。結(jié)果登陸時還是發(fā)現(xiàn)會向官網(wǎng)提交信息。于是追了一下。在登陸成功后,會首先顯示一個默認(rèn)頁。顯示管理員名字,服務(wù)器信息等。它是調(diào)用modules\admin\index.php
中的public_main()
方法加載的。
在這個方法中的最后幾行代碼如下:
$designer = '張二強(qiáng)';
ob_start();
include $this->admin_tpl('main');
$data = ob_get_contents();
ob_end_clean();
system_information($data);
意思是,將內(nèi)容緩存,然后給$data
,再調(diào)用system_information
處理。
system_information()
函數(shù),顯然是一個已經(jīng)加載的類庫中的函數(shù),查詢后發(fā)現(xiàn)它位于modules\admin\functions\admin.func.php
文件中。代碼如下:
function system_information($data) {
$update = pc_base::load_sys_class('update');
$notice_url = $update->notice();
$string = base64_decode('PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiQoIiNtYWluX2ZyYW1laWQiKS5yZW1vdmVDbGFzcygiZGlzcGxheSIpOzwvc2NyaXB0PjxkaXYgaWQ9InBocGNtc19ub3RpY2UiPjwvZGl2PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ik5PVElDRV9VUkwiPjwvc2NyaXB0Pg==');
echo $data.str_replace('NOTICE_URL',$notice_url,$string);
}
這里有一個解碼來獲得字串,我們先解碼看看這些字符串是什么。
加個 echo $string 看看。結(jié)果瀏覽器中什么也沒有。嗯?明明解碼成字符串,為什么什么也沒有呢?其實是有的。它是一段‘javascript'字串,所以你在瀏覽器中看不到。
解碼后的內(nèi)容如下:
<script type="text/javascript">$("#main_frameid").removeClass("display");</script><div id="phpcms_notice"></div><script type="text/javascript" src="NOTICE_URL"></script>
到這里還看不出什么。然后,它將src=”NOTICE_URL”中的NOTICE_URL替換成noticeurl。然后加到已經(jīng)生成的data數(shù)據(jù)后面。也就是向$data中加了一段代碼。
加的網(wǎng)址從何而來,加的又是什么網(wǎng)址呢?
函數(shù)先加載了update類
。然后調(diào)用了該類的notice()
方法。我們跟進(jìn)類文件libs\classes\update.class.php
看看。
function notice() {
return $this->url('notice');
}
function url($action = 'check') {
$modules = '';
$site = getcache('sitelist','commons');
$sitename = $site['1']['name'];
$siturl = $site['1']['domain'];
foreach ($site as $list) $sitelist .= $list['domain'].',';
$pars = array(
'action'=>$action,
'phpcms_username'=>'',
'sitename'=>$sitename,
'siteurl'=>$siturl,
'charset'=>CHARSET,
'version'=>PC_VERSION,
'release'=>PC_RELEASE,
'os'=>PHP_OS,
'php'=>phpversion(),
'mysql'=>$this->db->version(),
'browser'=>urlencode($_SERVER['HTTP_USER_AGENT']),
'username'=>urlencode(param::get_cookie('admin_username')),
'email'=> urlencode(param::get_cookie('admin_email')),
'modules'=>ROUTE_M,
'sitelist'=>urlencode($sitelist),
'uuid'=>urlencode($this->uuid),
);
$data = http_build_query($pars);
$verify = md5($this->uuid);
if($s = $this->module()) {
$p = '&p='.$s;
}
return $this->update_url.'?'.$data.'&verify='.$verify.$p;
}
這里收集了網(wǎng)站的多種信息,然后生成一個網(wǎng)址,加到j(luò)s中,就會自動向該網(wǎng)址訪問,并將信息提交給官網(wǎng)。
最后加到頁面后面的代碼是這樣的(解碼后):
<script type="text/javascript" src="http://update.v9.phpcms.cn/index.php?action=notice&phpcms_username=&sitename=默認(rèn)站點&siteurl=http://localhost/phpcms/&charset=utf-8&version=V9.6.3&release=20170515&os=WINNT&php=7.0.12&mysql=5.5.53&browser=Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36&username=phpcms&email=275423729@qq.com&modules=admin&sitelist=http://localhost/phpcms/,&uuid=0b5aacb6-0d3c-13e2-a47b-d9cb3a26d359&verify=83f1ab93b35fb87202e613e4decbecc2"></script>
這就是向官網(wǎng)提交我們網(wǎng)址,管理員名字瀏覽器等信息的代碼啊。難怪此前清除了模板中update.v9.phpcms.cn網(wǎng)址仍然提交,原來它將網(wǎng)址加密了,然后還加了你的相關(guān)信息。
如何刪除它?
一是換一個網(wǎng)址,將http://update.v9.phpcms.cn/index.php換成你的。不讓它向官網(wǎng)提交,但訪問你的網(wǎng)址你并不需要。最好的辦法是去掉訪問。
但不要這段代碼是不行的,會無法顯示。因為$(“#main_frameid”).removeClass(“display”);
是讓加載的頁面顯示,也就是說默認(rèn)是不顯示的。沒有js,瀏覽器不顯示內(nèi)容。我們要干掉的其實是這個‘'
去掉它,將剩下的:
<script type="text/javascript">$("#main_frameid").removeClass("display");</script><div id="phpcms_notice"></div>
base64_encode。得到
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiQoIiNtYWluX2ZyYW1laWQiKS5yZW1vdmVDbGFzcygiZGlzcGxheSIpOzwvc2NyaXB0PiA8ZGl2IGlkPSJwaHBjbXNfbm90aWNlIj48L2Rpdj4=
替換原來的,就可以了。