1、首先先說前台的吧,估計很多站都開始補了。是針對phpcms 2008的,二次攻擊範疇,二次解析getshell。
在upload_field.php中
$upload_allowext = !empty($c['upload_allowext']) ? $c['upload_allowext'] : $info['upload_allowext'];
// 漏洞觸發點 通過變數覆蓋$upload_allowext此變數賦值為html
$upload_maxsize = !empty($c['upload_maxsize']) ? $c['upload_maxsize'] : $info['upload_maxsize']*1024;
$isthumb = isset($c['thumb_enable']) ? $c['thumb_enable'] : ($phpcms['thumb_enable'] && $info['isthumb'] ? 1 : 0);
$iswatermark = isset($c['watermark_enable']) ? $c['watermark_enable'] : ($phpcms['watermark_enable'] && $info['iswatermark'] ? 1 : 0);
$thumb_width = isset($width) ? $width : (isset($c['thumb_width']) ? $c['thumb_width'] : ($info['thumb_width'] ? $info['thumb_width'] : $phpcms['thumb_width']));
$thumb_height = isset($height) ? $height : (isset($c['thumb_height']) ? $c['thumb_height'] : ($info['thumb_height'] ? $info['thumb_height'] : $phpcms['thumb_height']));
$watermark_img = phpcms_root.($info['watermark_img'] ? $info['watermark_img'] : $phpcms['watermark_img']);
$attachment = new attachment($mod); //例項化attachment上傳類
if($dosubmit)
$attachment->upload($uploadtext, $upload_allowext, $upload_maxsize, 1);
// 漏洞觸發點 引用attachment上傳類
這裡我們可以通過?c[upload_allowext]=html&c[upload_maxsize]=1024000這樣的方式來覆蓋上傳型別,達到上傳我們的利用惡意指令碼,但是不能直接上傳php之類的,你可以跟蹤一下這個attachment類檔案。但是我們可以通過上傳html
在preview.php中60行處
$head['description'] = $r['description'];
if(!$template) $template = $c[『template_show』]; // 通過變數覆蓋即可覆蓋$template變數
include template(『phpcms』, $template); // 呼叫template 模板解析函式
// 解析模板方法
function template($module = 'phpcms', $template = 'index', $istag = 0)
$compiledtplfile = tpl_cachepath.$module.'_'.$template.'.tpl.php';
if(tpl_refresh && (!file_exists($compiledtplfile) || @filemtime(tpl_root.tpl_name.'/'.$module.'/'.$template.'.html') > @filemtime($compiledtplfile) || @filemtime(tpl_root.tpl_name.'/tag.inc.php') > @filemtime($compiledtplfile)))
require_once phpcms_root.'include/template.func.php';
template_compile($module, $template, $istag); // 模板解析
return $compiledtplfile;
// 繼續跟蹤template_compile函式
在template.func.php中2行處
function template_compile($module, $template, $istag = 0)
$tplfile = tpl_root.tpl_name.『/』.$module.『/』.$template.『.html』; // 這裡$template可控
$content = @file_get_contents($tplfile); // 觸發漏洞,解析構造好的惡意檔案
if($content === false) showmessage("$tplfile is not exists!");
$compiledtplfile = tpl_cachepath.$module.'_'.$template.'.tpl.php';
$content = ($istag || substr($template, 0, 4) == 'tag_') ? '<?php function _tag_'.$module.'_'.$template.'($data, $number, $rows, $count, $page, $pages, $setting) ?>' : template_parse($content);
$strlen = file_put_contents($compiledtplfile, $content);
@chmod($compiledtplfile, 0777);
return $strlen;
}這是解析的地方
最終給出exp如下
第二步:
2、後台低許可權 getshell
很多人拿到phpcms 2008的後台苦於拿不到shell。。。苦苦琢磨琢磨啊
顧貢獻一枚0day,只要後台能發個帖,你就能拿shell
他這個原理是一樣的,後台上傳的時候同樣可以覆蓋變數,達到getshell
原理一樣,給出個exp演示
同樣getshell,隨意生成webshell
phpcms後台欄目許可權修改無效的原因和解決方法
現象 在phpcms後台中,新建角色,然後修改角色對應欄目許可權,結果一直只能選擇一半數量的欄目。剩下的欄目怎麼修改都不生效。對比 step1 再另乙個phpcms後台做同樣操作,依舊是這個結果。跟蹤了半天 也沒有發現什麼問題。setp2 把之前本地備份的 進行操作,卻發現可以修改。經過2個部分的對...
前台執行緒和後台執行緒
net的公用語言執行時 common language runtime,clr 能區分兩種不同型別的執行緒 前台執行緒和後台執行緒。這兩者的區別就是 應用程式必須執行完所有的前台執行緒才可以退出 而對於後台執行緒,應用程式則可以不考慮其是否已經執行完畢而直接退出,所有的後台執行緒在應用程式退出時都會...
websevice 服務前台和後台
page title 登入 language c masterpagefile site.master autoeventwireup true codebehind login.aspx.cs inherits pdmv01.account.login register assembly ajax...