安全矩阵

 找回密码
 立即注册
搜索
查看: 2422|回复: 0

代码审计 DSmall系统

[复制链接]

991

主题

1063

帖子

4319

积分

论坛元老

Rank: 8Rank: 8

积分
4319
发表于 2022-2-11 12:16:25 | 显示全部楼层 |阅读模式
原文链接:代码审计 DSmall系统


最近比较闲来学习学习代码审计,顺便记录一下自己的成长。
找源码的话之前看到公众号发文,可以在网站中找开放的源码项目,网站就是下方这个。个人感   觉这里的源代码审计还是有难度的,例如本次审计的这个商城源码,我审计完之后才看到在CNVD 已经提交过好多漏洞了。此次也没有什么重要的漏洞成果,还是记录一下挖掘的一个思路。
https://down.chinaz.com/class/5_1.htm



1.安装&使用

在站长之家找到这套PHP源码进行审计,首先在本地安装,安装不用多说。可以看到这个更新日 期是2022/1/15如的,还是最新更新的。


这套源码基于Thinkphp开发的,还需要熟悉一下他的路由。安装好之后后台如下,首先需要熟悉 一下后台的一些功能点


这里我是用的是VSCode,在当前目录下使用code . 打开当前目录至vscode。这里的源码数量太 大,不建议使用源码审计工具了

在route/app.php中可以看到使用的是ThinkPHP6,我也就用过ThinkPHP5,对这套还不怎么熟 悉

这里网站的入口文件是public/index.php,然后路由也是在/index.php 后拼接

后台文件从这里进入

功能的跳转就是这个样子

就可以根据路由规则去找到相应的功能点

一些函数的功能我就不说了,直接代码审计

2.存储型XSS

在这个位置,存在一个会员通知
http://dsmalltest.com:81/public/index.php/admin/Index/index.html

在会员列表和通知内容写入内容,通知内容可以写入XSS代码

放包之后就会触发存储型XSS,这个位置的通知,可以发送给全部人员,也可以发给指定的人员, 危害还是挺大的

来看源码,就是app/admin/controller/Notice.php的notice()方法

第一步就是判断了是否为POST传递的参数,然后就使用input获取传递的内容,intval这里将 send_type设置为整形。
接着就判断了$send_type的值,如果为1那么就发送给指定的会员,如果为2那么就发送给所有的 会员
  1. if (request()->isPost()) {
  2. //
  3. $notice_validate = ds_validate( 'notice ');
  4. $content = trim(input( 'param.content1')); //信息内容
  5. $send_type = intval(input( 'param.send_type '));
  6. //验证
  7. switch ($send_type) {
  8. //指定会员
  9. case 1:


  10. }


  11. $data = [
  12.     "user_name" => input("param.user_name")
  13. ];
  14. if (!$notice_validate->scene( 'notice1')->check($data)) {
  15.     $this->error($notice_validate->getError());
  16. }
  17. break;
  18. //全部会员
  19. case 2:
  20. break;
复制代码

ds_validate()方法,这个方法对传入的content内容无关

input方法(),就是指定参数来源进行自动判断的
在下方的这里,就会根据接收的内容发送给相应的会员
  1. //接收内容

  2. $array = array();
  3. $array[ 'send_mode '] = 1;
  4. $array[ 'user_name '] = $memberid_list;
  5. $array[ 'content '] = $content;
  6. //添加短消息
  7. $message_model = model( 'message ');
  8. $insert_arr = array();
  9. $insert_arr[ 'from_member_id '] = 0;
  10. if ($send_type == 2) {
  11.     $insert_arr[ 'member_id '] = 'all ';
  12. } else {
  13.     $insert_arr[ 'member_id '] = "," . implode( ', ', $memberid_list) .

  14. }
  15. $insert_arr[ 'msg_content '] = $content;
  16. $insert_arr[ 'message_type '] = 1;
  17. $insert_arr[ 'message_ismore '] = 1;
  18. $message_model->addMessage($insert_arr);
  19. //跳转
  20. $this->log(lang( 'notice_index_send '), 1);
  21. dsLayerOpenSuccess(lang( 'notice_index_send_succ '));
  22. $this->success(lang( 'notice_index_send_succ '), 'notice/notice ');
复制代码

这里并未对$content内容做一个处理导致了XSS漏洞,像其他的一些功能点都对输入做了一个处 理。
对输入做一个正则,如果不是数字,就会赋值空


3.总结

    这个系统还是挺难的,看了共3小时,既要熟悉框架还要从中寻找漏洞点,其中也发现了其他的漏 洞点但是没有复现成功。还有一些函数的调用寻找起来很麻烦,还是不太熟悉框架,在审计的时  候会增加困难。前辈们都已经在这CMS挖到了很多的漏洞,我还需要提升技术跟上前辈们的脚步





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2025-5-6 05:12 , Processed in 0.017596 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表