0x01 前言

有段时间没有发文章了,主要没挖到比较有意思的漏洞点。然后看最近爆了很多关于S-CMS的漏洞,下载了源码简单挖了一下然后给大家分享一下。

0x02 目录

Wap_index.php sql注入
Form.php Sql注入
Input、query

0x03 插曲

这里分享一下在审计的时候自用的一段代码。

  1.  
            $debug=function(){
  2.  
                $logFile='C:\\Users\\DELL\\Desktop\\debug.txt';     //输出的文件
  3.  
                $param=func_get_args();                     //获取传入函数的参数
  4.  
                if (count($param)>0){                           
  5.  
                    $str=serialize($param);                     //序列号
  6.  
                    if($str){                                   //存在就写入
  7.  
                        $str=file_get_contents($logFile)."\r\n\r\n".__FILE__.":\t\t".$str;
  8.  
                        file_put_contents($logFile,"\t\t".$str);
  9.  
                    }else{                                  //不存在写入Null
  10.  
                        $str=file_get_contents($logFile)."\r\n\r\n".__FILE__.":\r\n".$str;
  11.  
                        file_put_contents($logFile,"\t\tNull");
  12.  
                    }
  13.  
                }
  14.  
            };$debug($x,$a,$b);     //这里$x,$a,$b都是要查看的变量。

主要用这个的话个人感觉比较方便,平常测试都是var_dump();die;来查看。然后当die后,页面还是没有打印内容,用这个函数还是相对比较方便的。当然用phpstorm下断点挺好的,不过个人不太喜欢。主要还是我懒。

0x04 Wap_index.php sql注入

漏洞文件:\scms\wap_index.php
这个文件的话不止这一处Sql注入,这里只写这一个。
漏洞行号:90-96

  1.  
    case "text":
  2.  
        $debug("select * from SL_text where T_id=" . $S_id, "T_title");
  3.  
        if (getrs("select * from SL_text where T_id=" . $S_id, "T_title") == "") {
  4.  
            box("菜单指向的简介已被删除,请到“菜单管理”重新编辑", "back", "error");
  5.  
        } else {
  6.  
            $page_info = ReplaceLableFlag(ReplaceWapTag(CreateHTMLReplace(CreateText(ReplaceWapPart(LoadWapTemplate($style, $S_id)) , $S_id))));
  7.  
        }
  8.  
        break;

S_id直接从GET获取无单引号拼接进了sql语句

  1.  
    if(isset($_GET["S_id"])){
  2.  
        $S_id = $_GET["S_id"];
  3.  
    }else{
  4.  
        $S_id = "0";
  5.  
    }

这套CMS核心全带全都加密处理了所以我们看不到他的过滤方法,不过当出现 union select 等的时候都直接退出了,没有继续往下执行。研究发现当传入select(user())能正常执行,不过尝试union(select(1)) 的时候也没有执行,应该是直接正则匹配的union这个单词,而select匹配了前后的空格。

漏洞演示:

$debug保存下来的信息。

D:\phpStudy\PHPTutorial\WWW\scms\wap_index.php:     a:2:{i:0;s:58:"select * from SL_text where T_id=1 and (select(user())!=1)";i:1;s:7:"T_title";}

Mysql.log

正常执行了sql语句。
S_id=1 and (select(user()) from sl_reply 同样可以正常执行,可通过盲注爆数据。

0x05 Form.php Sql注入

漏洞文件:\scms\form.php
漏洞Action:input

  1.  
    if($action=="input"){
  2.  
        if ($_POST["code"]!=$_SESSION["CmsCode"]){
  3.  
            echo "<div style='height:500px'></div>";
  4.  
            box(lang("验证码错误!/l/Verification code error"),"back","error");
  5.  
        }else{
  6.  
            $R_time=date('Y-m-d H:i:s');
  7.  
            $R_rid=gen_key(15);
  8.  
            foreach ($_POST as $x=>$value) {
  9.  
            if ($x>0){
  10.  
                if ($_POST[$x]==""){
  11.  
                    box(lang("请填全内容后提交!/l/Please fill in the full content to submit!"),"back","error");
  12.  
                    die();
  13.  
                }else{
  14.  
                    if (!IsValidStr($_POST[$x])){
  15.  
                    box(lang("您输入的内容有敏感字符,请重新输入!/l/The contents you have entered are sensitive characters, please re-enter!"),"back","error");
  16.  
                    }else{
  17.  
    $debug("Insert into SL_response(R_cid,R_content,R_time,R_rid,R_member) values(".$x.",'".htmlspecialchars($_POST[$x])."','".$R_time."','".$R_rid."',".$M_id.")");
  18.  
                    mysqli_query($conn,"Insert into SL_response(R_cid,R_content,R_time,R_rid,R_member) values(".$x.",'".htmlspecialchars($_POST[$x])."','".$R_time."','".$R_rid."',".$M_id.")");
  19.  
                    }
  20.  
                }
  21.  
            }
  22.  
            }
  23.  
            if ($F_cq>0){
  24.  
            mysqli_query($conn,"Insert into SL_query(Q_code,Q_content,Q_sort) values('".$R_rid."','".date('Y-m-d H:i:s')."__用户提交表单,等待处理"."',".$F_cq.")");
  25.  
            box(lang("提交成功,查询码 ".$R_rid."/l/success!code ".$R_rid.""),$C_dir.$url_to,"success");
  26.  
        }else{
  27.  
        box(lang("提交成功!/l/success!code ".$R_rid.""),$C_dir.$url_to,"success");
  28.  
        }
  29.  
            sendmail("您的网站有新的表单提交","<h2>您的网站“".lang($C_webtitle)."”有新的表单提交</h2><hr>请进入“网站后台” - “表单系统” - “查看统计”查看详情!",$C_email);
  30.  
     
  31.  
        }
  32.  
    }

这里简单看些逻辑,先判断code验证码是否错误,如果为False不错误,进入foreach循环,判断$x(也就是 $_POST的key)>0这里就可以通过php弱类型比如1a>0 为True 这个不多介绍了,然后如果$_POST[$x] 不为空,继续检测$_POST[$x] 是否存在敏感字符,然后拼接sql语句。
整个流程就这样了,漏洞触发点就是$x,它检测敏感字符只检测了$_POST[$x]内容,而没检测$x,而且直接拼接入了sql语句导致SQL注入。

漏洞演示:

http://127.0.0.1/scms/form.php?action=input&S_id=0
code=ywu7&1//and//(1//like//1)=121

$debug记录

D:\phpStudy\PHPTutorial\WWW\scms\form.php:      a:1:{i:0;s:147:"Insert into SL_response(R_cid,R_content,R_time,R_rid,R_member) values(1//and//(1//like//1),'121','2018-12-05 15:27:00','WjWEpX8YIK6cfeq',6)";}


漏洞文件:\scms\form.php
漏洞Action:query

  1.  
    if ($action=="query"){
  2.  
    $Q_sort=$_POST["Q_sort"];
  3.  
    $Q_code=$_POST["Q_code"];
  4.  
        if ($_POST["code"]!=$_SESSION["CmsCode"]){
  5.  
            echo "<div style='height:500px'></div>";
  6.  
            box(lang("验证码错误!/l/Verification code error"),"back","error");
  7.  
        }else{
  8.  
     
  9.  
            $sql="select * from SL_query where Q_sort=".$Q_sort." and Q_code like '".$Q_code."'";
  10.  
            $result = mysqli_query($conn, $sql);
  11.  
            $row = mysqli_fetch_assoc($result);

这个相对简单不多说,$Q_sort从post获取,无过滤直接拼接进sql语句导致sql注入。

Payload:
http://127.0.0.1/scms/form.php?action=query&S_id=0
code=t5o9&Q_sort=1 and 1=1

S-CMS企业建站v3几处SQL注入的更多相关文章

  1. [代码审计]云优cms V 1.1.2前台多处sql注入,任意文件删除修复绕过至getshell

    0X00 总体简介 云优CMS于2017年9月上线全新版本,二级域名分站,内容分站独立,七牛云存储,自定义字段,自定义表单,自定义栏目权限,自定义管理权限等众多功能深受用户青睐,上线短短3个月,下载次 ...

  2. S-CMS企建v3二次SQL注入

    S-CMS企建v3二次SQL注入 0x01 前言 继上一篇的S-CMS漏洞再来一波!首发T00ls 0x2 目录 Sql注入二次SQL注入 0x03 Sql注入 漏洞文件:\scms\bbs\bbs. ...

  3. ThinkCMF X2.2.2多处SQL注入漏洞分析

       1.     漏洞描述 ThinkCMF是一款基于ThinkPHP+MySQL开发的中文内容管理框架,其中X系列基于ThinkPHP 3.2.3开发,最后更新到2.2.2版本.最近刚好在渗透测试 ...

  4. Vtiger CRM 几处SQL注入漏洞分析,测试工程师可借鉴

    本文由云+社区发表 0x00 前言 干白盒审计有小半年了,大部分是业务上的代码,逻辑的复杂度和功能模块结构都比较简单,干久了收获也就一般,有机会接触一个成熟的产品(vtiger CRM)进行白盒审计, ...

  5. sqli-labs(八)——修改密码处sql注入+http头sql注入

    第17关: 这是一个重置密码的功能存在sqk注入,尝试账号密码都输入'",发现只会显示登陆失败,没有报错信息. 这个时候先推测一下后台的sql形式大概应该是: update users se ...

  6. Joomla CMS 3.2-3.4.4 SQL注入 漏洞分析

    RickGray · 2015/10/26 11:24 昨日,Joomla CMS发布新版本3.4.5,该版本修复了一个高危的SQL注入漏洞,3.2至3.4.4版本都受到影响.攻击者通过该漏洞可以直接 ...

  7. sqli-labs(七)——登陆处sql注入

    第十三关: 这关也是一个登陆口,和上关所说的一样,先使用'"试一下,让程序报错然后判断后台的sql语句 可以看到后台sql大概是 where name = ('$name')...  这样的 ...

  8. 74cms v3.3 后台SQL注入

    注入存在于后台 admin_baiduxml.php 代码 52-63行 elseif($act == 'setsave') { $_POST['xmlmax']=intval($_POST['xml ...

  9. DM企业建站系统v201710 sql注入漏洞分析 | 新版v201712依旧存在sql注入

    0x00 前言 本来呢,这套CMS都不想审的了.下载下来打开一看,各种debug注释,排版烂的不行. 贴几个页面看看 感觉像是新手练手的,没有审下去的欲望了. 但想了想,我tm就是新手啊,然后就继续看 ...

随机推荐

  1. js实现多个小球碰撞

    实现思路:小球的移动,是通过改变小球的left和top值来改变,坐标分别为(x,y)当x/y值加到最大,即加到父级的宽度或者高度时,使x值或者y值减小,同理当x值或者y值减到最小时,同样的使x值或者y ...

  2. OpenStack--ntp组件时间同步服务

    作用:ntp主要是用于对计算机的时间同步管理操作 环境: 服务端: 192.168.245.172 客户端: 192.168.245.171 时间是对服务器来说是很重要的,一般很多网站都需要读取服务器 ...

  3. 1、Jenkins的安装与简单配置

    Jenkins安装 1.安装Jenkins之前先部署安装java环境(java环境安装另外参考安装文档) 注意:Jenkins 需要运行 Java 5以及以上的版本. 安装环境:CentOS7.3+J ...

  4. 用Python建立连接直接读取与更改Rockwell Control Logix Controller的tag值

    请参考如下连接的开源项目 源代码在本地测试好用. 注: 这里所用的Python 版本是 2.7.11 https://github.com/dmroeder/pylogix

  5. 关于Hbase的预分区,解决热点问题

    Hbase默认建表是只有一个分区的,开始的时候所有的数据都会查询这个分区,当这个分区达到一定大小的时候,就会进行做split操作: 因此为了确保regionserver的稳定和高效,应该尽量避免reg ...

  6. python 项目实例

    参考:  https://blog.csdn.net/yz764127031/article/details/71522161 https://www.cnblogs.com/linuxprobe/p ...

  7. js浮点数的加减乘除

    ;(function(root, factory) { // Support AMD if (typeof define === 'function' && define.amd) { ...

  8. 第六届Code+程序设计网络挑战赛

    弹指能算(easy)模式只做出一道签到题,还WA了一发,我好菜啊啊啊啊...虽然我菜,但是比赛体验一点都不好,服务器老是崩. 比赛链接:https://moocoder.xuetangx.com/de ...

  9. SSL/TLS抓包出现提示Ignored Unknown Record

    SSL/TLS抓包出现提示Ignored Unknown Record 出现这种提示有两种情况.第一种,抓包迟了,部分SSL/TLS的协商数据没有获取,Wireshark无法识别和解析.第二种,数据包 ...

  10. jQuery(三)

    jquery链式调用 jquery对象的方法会在执行完后返回这个jquery对象,所有jquery对象的方法可以连起来写: $('#div1') // id为div1的元素 .children('ul ...