发布作者:风之传说
    发布日期:2011-2-18 6:00:00
    官方地址:www.simple-log.com
    影响版本:v1.2
    漏洞名称:Simple-Log 1.2 国产开源PHP博客系统延迟注射漏洞

    网上搜索了下,看到貌似没人发,我就发出来了。如果有什么错误请指正。

漏洞文件:/user.php:

elseif ($act=='edit_profile')     // 延迟注射提交的地址http://localhost/user.php?act=edit_profile
{
    require_once(PBBLOG_ROOT.'/includes/base.function.php');

    $member_id=$_SESSION['user_id'];
    $user_name=$_POST['name'];     //POST 提交
    if (empty($user_name))    //判断是否为空
    {
        show_message('会员名字不能为空',$referer_url);
    }
    else
    {
        if (isset_member($user_name)) //如果查询语句最后为真,就能返回条数,然后返回true就执行下面代码,等下继续跟进。这里才是真正的延迟注射。如果正确就会返回会员名字已经存在。
        {
            $u_name=$db->getone('SELECT user_name FROM '.table('user')." WHERE user_id='".$user_id."'");  //这里不用看
                if ($u_name!=$user_name)
            {
                show_message('会员名字已经存在',$referer_url);
            }
        }
    }

    继续跟进 isset_member 函数的用法,截取部分代码。

/includes/base.function.php:

function isset_member($member)    //
{
    $sql='SELECT * FROM '.table('user')." WHERE user_name='".$member."'";   //上面的user_name带入此函数,那么user_name=member  已经带入查询了。
    if ($GLOBALS['db']->getrow($sql))    //又一次判断。
    {
        return true;
    }
    else
    {
        return false;
    }
}

    不做更深层的调用了,免得大家看的乱。只要在 POST 中提交 admin + 注入语句使其为真就可以了。

    因为 admin 是管理员名,一般人不会去改,所以最后是为 true 的。

    post 提交,大家制造一个表单就 OK。在这里我也不发 EXP 了。发了也得手工一个个的来,求工具。因为手工麻烦,我也没去测试,谁测试后回复下。

回复:

gpc=off 是否需要?

鸡肋的漏洞吧,得确很鸡肋。

按照这个道理,全部任何程序都存在注入了,其实这里完全不是漏洞。

gpc=off .你没考虑单引号了,字符型。