本文作者:i春秋签约作家rosectow   

0×00前言:最近自己搞了个公众号(安全V生活)各位哥哥喜欢可以关注公众号,打算来研究公众号这一块的,然而网站也开了什么都准备好了,但是就是前期没粉丝,由于自己是做SEO行业的就想着如何快速让公众号能快速的吸来粉丝想了想出了付费广告就很难前期来大量粉丝了,然后不知不觉的想着怎么样免费又可以挂广告那该多好,于是想了一下除了给钱其实可以做点黑的,但是自己不知道怎么去入侵别人的公众号(打广告)于是百度一下看看有没有相关信息

图片1.png

在上图中找来找去就发现了收录的都是那个“看我如何轻松入侵各大媒体微信公众号”然后点击进去看看发现是比较老的文章,他是通过QQ群搜索别人公司的群然后群公告上面写着公众号密码的,其实这个早已没用现在登录公众号是需要单独的手机来进行验证的,所以就算知道密码也是0作用啊!

图片2.png

0×01 那么百度相关“入侵公众号”等文章都是没有多少的,有的话都是目前无法实现的,那么今天我来分享一次我成功控制整个公众号的思路,。

0×02 进入思路主题,前面讲到了我好奇想试试看如何入侵公众号并且申请了一个公众号研究,研究,首先我是申请了一个公众号,登录进去看看整体功能,由于是个人好给限制了许多,但是在研究中发现公众号是相当安全的,他需要账号密码,以及绑定的微信号来扫描才能完全验证登录,这么一来你要搞定的是需要搞定,对方微信,对方公众号账号密码信息,对方的手机验证码,其实一般的话是很难过这么多关但是还有那个可能。

   在我研究公众号具体的同时,发现公众号是可以对接api让外部程序来管理公众号的,而且不用那么麻烦还可以多管理其他的信息,而且许多的企业都在使用自己开发的程序来对接公众号,那么我目标已经指向了一个企业的公众号了,我是在之前就关注他的,发现他用户挺活跃的,经常在底下留言,而且不少人,因此我想了如果我能在这个公众号上添加一条信息那么我的公众号应该可以增加不少粉丝啊!

0×03 此时我打开那个关注已久的公众号,时刻准备着日进去的感觉,上面说到了微信的对接程序,那么一个大型的微信公众号是绝对有对接来管理的,所以我要找到这个对接的站点,于是我翻了对方那些历史文章,一个个的翻,在底下我翻到了一篇短文,它的链接是不属于微信端的,于是打开看看是什么。

图片5.png

果然啊,有个对接的网站于是我顺手爆破一下,等待无果没有成功进去,习惯性的F12 看看具体的前端信息

了解一下JavaScript的过程中我发现它的代码跟一般的还是不一样的,于是我先抓取post数据看一下

图片6.png

发现post链接在跳转另外一条链接,好奇的在按一次F12 查看了一下具体的登录信息

图片7.png

图中的信息中大致没什么问题,但是在访问/framework/login.toManage.do这条链接的时候进入了一个空白的有点像进入后台然后看不见功能的那种感觉,于是我以为可以绕过js验证,我把浏览器的JavaScript功能关闭掉之后,还是一样发现这个页面没有属于这个JavaScript来管理功能的,但是它的JavaScript代码中出现了这一条链接让我非常不安,我看了一下


$.post(“/framework/login.login.do”,{

loginid:loginid,password,password,verifycode:verifycode,abc:Math.random},function(data){

 if(data ==”true”){

 windows.location=”/framework/login.toManage.do”;

 

由于漏洞已经修复而且文章是最近刚写的所以只留下了这一张图片,分析过程导致不太明确,见谅!

$.post(“/framework/login.login.do 

登录数据进入验证页面


loginid:loginid,password,password,verifycode:verifycode,abc:Math.random},function(data){

 if(data ==”true”) 

然后验证页面在给出一条代码,用户名跟密码及验证码,abc生成随机函数,在对函数数据判断

windows.location="/framework/login.toManage.do";

如果数据正确它就给出下面一条连接的跳转进去,这下我很肯定的确认它是属于进入后台的连接了

0×04 由于我丢失了其他的代码时间关系,按照了这图片来分析得来的,前面说到了我没有登录的时候点击进入/framework/login.toManage.do 这个后缀地址的时候它给出我的是后台的页面,但是没有任何功能的按钮之类的


}else if (data = “codefaild“) {

alert(“验证码错误,重新填写”)

}else if (data = =”loginiderror”)

alert(“无效用户名”)

}else if (data = =”passworderror”)

alert(“密码错误”)

 

data = = codefaild

加密失败….

然后他的判断是出现在后边的,就相当于它是先进入

 

else if (data = “codefaild“) 

这一句是没有给包涵在里边的,导致无效果


然后在


{

 if(data ==”true”){

 windows.location=”/framework/login.toManage.do”;

它直接跳转了,不需要先去验证对错就直接的进入,但是这样还未能触发漏洞

载下面它的判断就会触发,阻止了我进入,下面的代码丢失,但是它下面去判断用户名和密码对错,如果用户名对了,在打开/framework/login.toManage.do后缀这个地址就成功进入了后台,它的验证码在后面已经没有给包涵在内等于无效的,但是它的用户密码代码还是存在判断,所以我输入了有效的用户名(admin)我就可以直接打开

/framework/login.toManage.do这条链接进入后台。

图片8.png

0×05 果然的成功进入了对接的后台,相当于我控制了整个微信公众号,我对了所有的用户发送了一条群发,在对他的关键字回复里面设置了我的广告来推广我的公众号!

图片9.png

 效果还算可以粉丝也有增加不少,本次只提供思路,其他行为请慎重!



8月的最后一天通常意味着,炎热烦闷的夏季终于要熬过去了。

今年的夏天炎热异常,而今年8月的最后一天,有这么一群人,怀揣着紧张和热情,奔赴我们2017 ISG “观安杯”管理运维赛的战场。

上午9:00——11:00

理论赛

WechatIMG97.jpegWechatIMG168.jpeg

理论赛共计2小时答题,然而在9:23分时,就有选手答完了200道选择题,难以置信,也期待他的得分。

理论赛过半,选手纷纷发出了以下感慨:(前方高能)

WechatIMG244.jpeg

哈哈哈哈哈哈

出题老师表示瑟瑟发抖

WechatIMG245.jpeg

上午的理论赛可以说是相当欢乐了

大概是在为了下午的实操进行强大的心理建设吧!

下午13:00——16:00

实操夺旗

下午的实操部分,一改上午略微轻松的画风,简单的用 “紧张刺激”已经不足以来形容我们的夺旗大战了,话不多说,来看看热身签到题后都发生了什么:

屏幕快照 2017-08-31 下午1.20.37.png

刚一上场,支付宝安全团队便已两个首旗的成绩拿得第一!占据着第一的位置。

屏幕快照 2017-08-31 下午1.23.29.png

然而,国泰证券却另辟蹊径,从wmwcms题下手,夺得1000分首旗。

屏幕快照 2017-08-31 下午1.36.40.png

而像国泰这样不从大流的队伍大有人在,果然战略还是很重要的,Mirage团队不声不响便将逆向小旗子收入囊中。

屏幕快照 2017-08-31 下午1.38.43.png

Eversec则是在移动病毒这一块儿拔得头筹。

从哪题入手得分是很重要的策略,但是像点融科技,一步一个脚印,稳稳的凭借夺旗总数走上第一的,着实是一种值得学习的心态

屏幕快照 2017-08-31 下午1.44.52.png

虽然比赛前半部分,支付宝以一定的优势长居第一的位置,但是在比赛还剩半小时的情况下,点融科技以他一步一脚印的心态,稳稳的以做多旗的状态,居于第一。

屏幕快照 2017-08-31 下午2.33.59.png

比赛之所以有趣,就在于,当夺得旗的战队越多,总会有黑马杀出重围。快钱和蔚来汽车就是两匹黑马。

屏幕快照 2017-08-31 下午2.55.57.png

啊啊啊啊,激动激动,等了两个小时,BMP wannacry终于被人夺旗

屏幕快照 2017-08-31 下午3.08.53.png

比赛总有结束的一刻,或如释重负或遗憾满满,感谢选手的积极参与。虽然Crypto依旧抬着她傲娇的头颅,无人摘旗。

WechatIMG250.jpeg

(P.S. 大家都说难,才是真的难,哈哈哈哈哈,这才是我们ISG的实力啊!

“观安杯”管理运维赛

初赛结束了

我们还有决赛!

640.jpg

 在大医院看病,可能都会有这样的体验:就诊大厅人来人往,挂号收费大排场龙,看个病各个流程走下来,要花费很长的时间。可要是这个时候,医院的就诊系统突然出现故障,那可不仅仅是增加就诊排队时间那么简单了,有可能还会耽误病人治疗,进而影响医患关系。

QQ截图20170815171242.jpg

对于一家大型三甲医院来说,His系统运行的稳定性就显得更为重要了,不容有一丝的闪失。但往往一些小的数据库故障就会影响到系统运行的稳定性,导致医院就诊流程无法顺畅进行。此时,需要快速找出数据库故障原因并处理,恢复系统稳定。

前段时间,某医院His核心系统就频繁出现应用短暂卡住的现象,造成挂号收费窗口、护士站等“瘫痪”,人满为患、怨声载道。

timg.jpg

医院信息部门无法查出问题所在,第一时间联系了美创科技的工程师。美创的工程师立马登录客户生产库查找原因,发现存在大量等待事件,伴随短暂的数据库锁等待。碰到这种情况,很多人想当然地以为是应用程序的问题,误认为是更新程序的“后遗症”,想方设法抓语句提交给开发人员。其实这是一种误判。

根据美创工程师丰富的运维经验判断,这不像是一般的数据库锁等待,通过查看数据库alert日志,发现这套rac的alert的日志当中偶尔会出现实例重新配置的信息,并且两个节点在同一时间点都会发生。

此类问题在日常运维经验中并不常见,无法根据问题症状立刻给出及时和正确的解决思路。

工程师不抛弃不放弃,通过上述两点症状“按图索骥”,查找mos相关信息,判断是数据bug造成的问题,最后验证确实如此。找到了问题的根源,工程师在最短的时间内为客户提供了解决思路,有效地解决了问题,保证了大型医院his系统的正常稳定运行。

下面是满满的干货,详解“解题思路”

初步一看这个问题应该是rac crash了。继续排查alert日志,核实是否有实例crash后马上拉起来的日志,两个节点并没有发现实例重启的现象,但是两个节点在同一时间的alert日志当中都有相同的报错:

图片1.png

由上图可以看到,两个节点都报Global Resource Directory frozen错误,且在一分钟后很快又Reconfiguration complete重新配置

根据这个特征,去查询mos,找到DRM hang causes frequent RAC Instances Reconfiguration (Doc ID 1528362.1)

里面有四个症状特征:

症状特征一

- RAC Instances freezes during DRM for 100 secs or more.

RAC实例freezes 100秒或者更多(符合)

症状特征二

- DB Alert log shows that all RAC instances undergo reconfiguration at the same time, but there are no instance crashes

在相同时间数据库所有实例alert日志都显示重新配置,并且没有实例crashe

由下图所得,(符合)

图片2.png


症状特征三

- Lmon trace shows that DRM quiesce step hangs:

*** 2012-07-14 14:14:51.187

 CGS recovery timeout = 85 sec

Begin DRM(231) (swin 1)

* drm quiesce

*** 2012-07-14 14:17:03.752

* Request pseudo reconfig due to drm quiesce hang 

2012-07-14 14:17:03.752735 : kjfspseudorcfg: requested with reason 5(DRM Quiesce step stall)

*** 2012-07-14 14:17:03.766

kjxgmrcfg: Reconfiguration started, type 6

CGS/IMR TIMEOUTS:

 CSS recovery timeout = 31 sec (Total CSS waittime = 65)

 IMR Reconfig timeout = 75 sec

 CGS rcfg timeout = 85 sec

kjxgmcs: Setting state to 70 0.

Lmon trace显示DRM hang(符合)

- Lmon trace shows that DRM quiesce step hangs:

*** 2016-09-12 08:28:39.125

  CGS recovery timeout = 85 sec

Begin DRM(40) (swin 0)

* drm quiesce

*** 2016-09-12 08:28:39.676

* drm sync 1 

* drm freeze

* DRM(40) window 1, drm freeze complete. 

* drm cleanup

* drm sync 2 

* drm replay

* drm sync 3 

* drm fix writes

症状特征四

- AWR Top waits are “gcs resource directory to be unfrozen” & ” gc remaster “

在awr报告中的top 5等待会有gcs resource directory to be unfrozen和gc remaster等待事件。

图片3.jpg

结论

依次比对了上述四大症状特征,可以判断此故障是由于Bug 12879027 引起的

DRM has a number of steps. During the DRM quiesce step all ongoing block transfers for remastering are completed.

In this case, during the DRM quiesce step a hang occured due to an internal function hitting a timeout.

This is a bug condition that happens when the buffer cache is very large.

This hang then triggers a pseudoreconfiguration to prevent the instance from being killed by another instance.

This is the reason for the instance undergoing a reconfiguration without restarting.

解决方案

既然我们已经找到了这个问题的症结所在,下面我们可以给出相应的解决方案。

方案1:关掉DRM

方案2:打上最新的psu

通常情况下,上述两种方案可以解决以上数据库问题。但由于环境的复杂性以及现场的多变性等客观条件,不能保证该解决方案的绝对成功,这里只提供类似问题的解决思路。真正解决问题时,请再考虑到一些客观因素,经过人为的思考,相信类似问题都能得到妥善解决。

Web中间件学习篇

本篇主要从IIS、Apache、Nginx、Tomcat四种常见中间件的Tomcat入手,介绍相关安全知识,遵循“中间件简介→如何搭建网站→安全配置分析→安全日志分析”的顺序进行学习,旨在梳理常见Web中间件的知识点,为Web安全学习打好基础。

Tomcat篇

作者:古月蓝旻@安全之光

Tomcat简介

Tomcat(Apache Tomcat)是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun和其他公司及个人共同开发而成。

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。

对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。

实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能。

另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。

Tomcat站点搭建

Tomcat虽全称为Apache Tomcat但是配置方法和Apache差别还是不小的,首先它和很多java应用类似,其重点在于环境变量的配置。既包括java环境变量的配置,也包括tomcat环境变量的配置。本次我们直接使用tomcat的软件包进行配置,搭建Linux+Tomcat+Mysql+Jsp的站点,分为以下几步:

  1. 安装并配置Java环境
  2. 安装并配置Tomcat环境
  3. 安装并配置Mysql
  4. 部署Jsp站点

本篇介绍的Tomcat环境搭建,主要参考的文章是linux公社的一篇:CentOS 6.6下安装配置Tomcat环境,对于其中的部分细节略作修改。下面开始详细介绍如何搭建一个完整的Tomcat站点

环境介绍

操作系统:CentOS release 6.5 (Final)
Java版本:jdk1.8.0_60
Tomcat版本: apache-tomcat-8.0.45 
站点类型:Jsp

搭建站点

安装并配置Java环境

这一步还是非常简单的,概括一下就是:

下载并安装jdk,同时修改环境变量

wget http://download.Oracle.com/otn-pub/java/jdk/8u60-b27/jdk-8u60-linux-x64.tar.gz
//官网下载jdk1.8

tar -xvzf jdk-8u60-linux-x64.tar.gz -C /usr/local/
//将其解压至/usr/local目录下,此时的文件夹名应为jdk1.8.0_60

cd /usr/local/

ln -sv jdk1.8.0_60  jdk
//在/usr/local目录下建立一个软链接,为方便将jdk1.8.0_60建立一个叫jdk的软链接(重命名亦可mv jdk1.8.0_60 jdk)

然后在/etc/profile.d/目录下创建一个脚本jdk.sh,修改环境变量

vim /etc/profile.d/jdk.sh
--------------------------------------------------->
JAVA_HOME=/usr/local/jdk
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
<---------------------------------------------------
. /etc/profile.d/jdk.sh        //重读此文件,让变量生效 ,注意.号后有空格

其实这种写脚本的方式修改环境变量的方法相对于直接敲命令,更加实用便捷。

此时执行

java -version

安装并配置Tomcat环境

和配置Java环境非常类似,步骤也大致相同

下载并安装tomcat,同时修改环境变量

wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.0.45/bin/apache-tomcat-8.0.45.tar.gz
tar xf apache-tomcat-8.0.45.tar.gz -C /usr/local/
cd /usr/local/
ln -sv apache-tomcat-8.0.45 tomcat  //亦可使用mv apache-tomcat-8.0.45 tomcat

然后在/etc/profile.d/目录下创建一个脚本tomcat.sh,修改环境变量

vim /etc/profile.d/tomcat.sh
--------------------------------------------------->
CATALINA_BASE=/usr/local/tomcat
PATH=$CATALINA_BASE/bin:$PATH
export PATH CATALINA_BASE
<---------------------------------------------------
. /etc/profile.d/tomcat.sh

此时执行

catalina.sh version

可以看到,tomcat的根路径就是/usr/local/tomcat

接下来就是配置Tomcat

配置默认端口为80端口(修改server.xml)

vim /usr/local/tomcat/conf/server.xml
---------------------------------------------------------->
 <Connector port="80" protocol="HTTP/1.1"      //默认端口为8080,改为80
        connectionTimeout="20000"
        redirectPort="8443" />

配置manager-gui管理页面(配置tomcat-users.xml)

vim /usr/local/tomcat/conf/tomcat-users.xml
------------------------------------------------------------------------------->
<role rolename="manager-gui"/>                  //倒数第二行添加,指定用户可以使用的接口为manager-gui
<user username="tomcat" password="tomcat" roles="manager-gui"/>      //用户名和密码为tomcat,在manager-gui接口使用

开始第一个网页

类似于apache之于/var/www/html/,nginx之于/usr/share/nginx/html/,tomcat同样有自己对应的网页目录,一般就是根目录+webapps/,在本机上就是/usr/local/tomcat/webapps/

假如我们要创建一个叫test的项目,我们需要同时在test目录下建立WEB-INF/classes和WEB-INF/lib文件夹

mkdir -pv /usr/local/tomcat/webapps/test/WEB-INF/{classes,lib}   //-v参数是显示创建目录是否成功

ok,可以在test目录下写下第一个Jsp网页了(注:和apache和nginx不同,tomcat默认支持Jsp,因此无需再安装Jsp)

vim /usr/local/tomcat/webapps/test/index.jsp
--------------------------------------------------------------->
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
    <head>
        <title>test</title>
    </head>
    <body>
        <%
            out.println("Hello qingteng!");      //嵌入java语言
        %>
    </body>
</html>

运行一下好了

catalina.sh start

非常nice,本机直接访问127.0.0.1或者本机IP

而我们创建的test项目下的index.jsp文件,可通过访问ip/test/index.jsp打开

此时其他主机还是无法通过ip的方式访问该主机的,和apache类似,需要开启80端口的访问规则

/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT  //添加开启80端口规则
/etc/rc.d/init.d/iptables save  //保存配置
/etc/rc.d/init.d/iptables restart   //重启iptables
/etc/init.d/iptables status   //查看开放的端口,出现80

此时其它主机已经可以正常访问

还有另外一种访问方式,既然我们已经配置了tomcat-users.xml中的账号密码,我们可以通过点击右上角Manager App,并输入我们配置的账号密码对web应用进行管理

可以看见我们创建的项目test,单击进去就是/test/index.jsp

安装并配置Mysql

yum -y install mysql mysql-server mysql-devel   //安装mysql和其相关拓展
chkconfig mysqld on  //设置其开机启动
service mysqld start   //启动mysqld服务
/usr/bin/mysql_secure_installation  //设置mysql的一些安全配置
这一步还是很重要的,主要是设置mysql的root密码,是否需要删除匿名账号等等,根据实际需要设置

此时我们可以登录一下mysql

部署Jsp站点

这里用JEECMS做演示,首先放入程序文件,程序可从http://www.jeecms.com下载,下载安装包即可:

unzip jeecmsv8.1.zip
cd jeemsv8.1
mv ROOT/ /usr/local/tomcat/webapps/cms
catalina.sh stop
catalina.sh start

然后访问ip/cms页面即可

安装过程非常简单,在安装好mysql的情况下,只需要填写一下数据库的密码,仅十几秒即可完成

重启完成后访问http://192.168.248.141/cms/jeeadmin/jeecms/login.do,使用admin/password登录即可,至此站点搭建完毕

Tomcat日志分析

相对于apache和nginx,tomcat的日志不仅数量更多而且配置和理解起来也更加复杂,下面详细梳理一下tomcat日志的知识点

首先看一下tomcat的位置,不同于其它web中间件,它的日志并不在/var/log目录下,而在tomcat安装路径之下的logs文件夹,比如我的本机的路径就是/usr/local/tomcat/logs/,看一下里面有什么吧

感觉还是挺多的,去个重分别解释一下吧

日志种类说明

序号            名称                                        说明
1        catalina.date.log                       Catalina引擎的日志文件
2        catalina.out                            Catalina控制台输出,包括标准输出和错误输出
3        host-manager.date.log                   主机管理日志
4        localhost.date.log                      Tomcat下内部代码丢出的日志
5        locahost_access_log.date.txt            网页访问日志
6        manager.date.log                        应用管理日志

关于以上日志的内容如果展开了说非常多,而且很多都要阅读官方英文文档才能了解其大致用途,下面挑一些重点日志,详细展开,较为冷门的就一笔带过了。

首先关于以上日志文件的配置

1、2、3、4、6均在tomcat根目录/conf/logging.properties下
5在tomcat根目录/conf/server.xml下

logging.properties

一般日志文件定义是3行
1.  首行决定什么级别及以上的信息输出
    每类日志的级别分为如下 7 种:
    SEVERE (highest value) > WARNING > INFO > CONFIG > FINE > FINER > FINEST (lowest value)
    OFF为禁用输出;ALL为全部输出
2. 第二行决定输出日志文件的路径
3. 第三行决定日志文件的前缀

此外catalina.out由于是输出控制台(console)信息,该信息源于Linux输出的重定向,因此与其它日志不同

顺便一提,manager和host-manager分别对应tomcat后台页面的Manager App和Host Manager,想要生成这两类日志,需要在tomcat-users.xml里分别配置manager-gui和admin-gui角色的账号密码,并访问相应页面,否则这两个日志都会是空的

Tomcat默认使用JULI日志系统(可以参考官网文档修改成使用log4j),它是对默认的JDK日志java.util.logging进行一定的封装,和标准JDK日志支持相同的配置。最大的不同是针对不同的classloader,可以使用不同的配置文件,使得tomcat下不同的Web应用程序可以使用各自独立的日志文件。也就是说,Tomcat下的默认日志有如下2个层次:

  • 全局配置文件.

That is usually done in the ${catalina.base}/conf/logging.properties file. The file is specified by the java.util.logging.config.file System property which is set by the startup scripts. If it is not readable or is not configured, the default is to use the ${java.home}/lib/logging.properties file in the JRE.

  • Web应用程序中使用WEB-INF/classes/logging.properties

默认的JRE中的logging.properties会把日志输出到System.err(ConsoleHandler)中,而默认的Tomcat下的配置文件conf/logging.properties会增加多个FileHandlers把日志输出到不同的文件。

关于Juli日志系统的更多内容,或者想把Juli改成Log4j的,推荐这篇文章:Tomcat日志机制

server.xml

前面提到5类的日志可归纳为运行日志,一般用于排查服务端console、catalina、tomcat、web应用管理遇到的错误,而且其中详细的配置应该查阅的是对应版本tomcat的官方文档:Apache Tomcat 8 Docs Home

接下来要介绍的就是访问日志,即访问网页的记录,类似于apache和nginx中的access.log,首先看一下它在server.xml是如何配置的

关注点主要就是红框标注处

className        开启访问日志必用类
directory        日志存放目录
prefix           日志名前缀
suffix           日志文件后缀
pattern          日志记录的格式

除了第一个className不允许修改外,其它字段值可以根据实际需要修改,最重要的就是pattern,我们结合实际的一例日志文件解释一下

192.168.248.1 – - [14/Aug/2017:19:39:20 -0700] “GET /cms/jeeadmin/jeecms/index.do HTTP/1.1″ 200 555

而与之对应的pattern是这样,和apache的access.log确实比较类似

pattern=”%h %l %u %t “%r” %s %b”

%h      为远程主机名(若无法获取主机名亦可为远程主机IP)对应192.168.248.1
%l      为远端登录名(由identd而来),除非IdentityCheck设为"On",否则将得到一个"-"
%u      为远程用户名(根据验证信息而来),若不存在得到一个"-"
%t      为时间,用普通日志时间格式(标准英语格式) 对应[14/Aug/2017:19:39:20 -0700]
&quot;  为双引号"的实体编码
%r      为请求头第一行(包括HTTP方法和请求的URI),对应GET /cms/jeeadmin/jeecms/index.do HTTP/1.1
%s      为HTTP响应状态码
%b      为发送信息的字节数,不包括HTTP头,如果字节数为0的话,显示为-

关于这个的字段的详细配置说明,查阅官方英文文档最为准确:Tomcat8访问日志字段说明

Tomcat日志分析Web攻击行为

和之前不同,此次我们使用IBM的AppScan进行深度扫描,相对于手工拿burp suite、sqlmap测试,测试时间更加漫长,甚至比AWVS的时间还长,扫描了约1个半小时才扫描了21%,为了不耽误时间直接暂停了,去看结果。

扫描完成后,localhost_access_log增加至13M左右

sql注入攻击

在日志文件中搜索关键字”SELECT”

可以看见AppScan采用的payload确实比较特别,除了普通的参数注入外,还会尝试url注入,并添加一些不可见字符

xss攻击

在日志中搜索关键字”script”

xss的payload相对而言比较简单,大多数是做了url编码后直接测试

目录遍历

在日志中搜索关键字”../”或者”..%2F”或者”%uff0e%uff0e/”或者”%2e%2e/”或者”%252e%252e/”等等,这些均是各种编码后的../

命令执行

在日志中搜索关键字”system”或者”exec”

一般在命令执行攻击中,system和exec出现的频率还是比较高的

任意文件读取

在日志中搜索关键字”/etc/passwd”

/etc/passwd可以说是攻击者最喜欢读取的文件了,将其作为参数值传递看回显结果来判断是否存在该类型漏洞。

关于AppScan探测的漏洞还有很多,此处就不一一解释了,有兴趣可以自行探索一下

补充知识点

1. 如何修改Tomcat默认端口号?

这个问题其实上面已经给出答案了,修改server.xml中的port

<Connector port=”80″ protocol=”HTTP/1.1″

测试时在本机浏览器输入http://127.0.0.1:新端口号 即可

注:外网主机此时可能无法通过http://IP:新端口号 方式访问,记得修改iptables,添加新端口号规则。

2. 以root身份启动Tomcat,该服务以什么用户运行?

使用ps aux|grep tomcat|grep -v grep查看一下

只有一个root啊,没有tomcat这个用户吗?从/etc/passwd中确实可以看出,安装tomcat不会在系统中新建tomcat用户,以root身份启动tomcat,那么该服务就是以root身份运行的。

结语

  • 到这里Web中间件学习篇就告一段落,虽然说的内容不少,但是还是过于基础,深入的内容没有详细展开,关于中间件的学习自己还远远不够,今后如果掌握地更多的时候,会考虑再写对应的Web中间件学习进阶篇。同时也可能会增加JBoss(WildFly)、WebLogic、WebSphere等中间件的内容。

  • 今后分享的内容将会是一个知名CTF网站HackingLab(http://hackinglab.cn/)的全部关卡攻略,虽然网上有很多其它大牛也写过它的攻略,但是还是想出一个相对完整一些的,也算给自己留个备忘。这也是我第一次正式写CTF题目的writeup,由于工作原因,时间不是很多,打算根据不同关卡分成五期进行更新,每周一期,希望各位多多支持,谢谢~~

以下是 美团点评首席信息安全官赵彦在TechWorld2017大会上分享的大型互联网企业安全实践。进行企业安全架构的前提是要明确所面临的威胁,然后从“纵深防御”、“降维”和“入侵容忍”三个方向构建网络安全,在高层级上执行企业风险管理。企业还需要考虑影响安全长期建设的三个关键因素——“工程技术能力”、“架构统一”和“深入研发”,化“外挂式企业”为“内建式企业”。

观看完整演讲视频请戳:http://blog.nsfocus.net/company-security-techworld2017/

更多精彩尽在绿盟科技博客:http://blog.nsfocus.net/

威胁视图

对于安全建设这件事情,如何做,首先要明确的是面临的问题本身是什么?大家可以看到这张图上所标注的威胁,涵盖了一家典型的中大型互联网公司所面临的所有威胁。譬如说像客户端常见的病毒木马,甚至竞争比较激烈的时候还有竞争对手的APP劫持。对于一般性的互联网公司来说,从客户端到服务端,经常会经过自己或者是第三方的CDN。同时,从客户端端到CDN,以及从CDN到源站也就是公司自己的服务器之间都会经过运营商网络。在运营商网络里,像跨ISP的劫持,运营商内部员工舞弊等等可能都会造成一定的信息泄漏。

1.png

从CDN到源站之间,有一个比较知名的例子,是谷歌曾经在历史上被国家安全局监听,导致所有用户的流量被监视。原因就是因为CDN到源站之间没有加密。

再就是IDC的入侵对抗,安全行业大量的笔墨都在这个领域。对于有跨境业务的公司而言,尤其是在今年6月1日《网络安全法》出台以后,实际上在海外有业务的公司都会涉及到跨境数据转移的问题,这也是现在比较重要的一条。

IDC之后有两个通道,一是运营通道,二是发布通道。通常做的比较好的互联网企业会把IDC网络做成一个相对封闭的网络,跟办公网络之间通常只保留两个通道,一个是给运维执行命令用的运维通道,一个是给业务迭代发布用的发布通道。当然有些互联网公司技术管理做的不是特别好的时候,还做不到这点。

就办公网络而言,互联网公司和其他行业并没有什么区别,仍然是一个数据泄漏的重灾区。这部分可能更多的还是需要依靠像内部审计、监督来预防。

最下面的解决方案链条,实际上覆盖了对应着威胁的整体解决方案链条。

像客户端到自有IDC之间,通过现在的主流技术——全站HTTPS基本上能解决;

在自有IDC基础设施这块,主要是依靠IDC的入侵对抗,这也是各个安全大会讨论最多的领域。

内部网络安全方面,包括员工舞弊等,主要是靠IT安全建设、办公网络的安全建设,以及内审内控来解决。

安全体系定义的范畴

大家虽然都在讲安全,但是对于不同企业、不同规模的企业而言,需要的安全能力和需求是完全不一样的。如果用市值千亿美元的互联网公司的安全标准去衡量一个初创公司,显然是不合理的。

我把安全体系分为5个阶段——对抗黑客、防范内部、防范第三方、防止间谍行为、国家机器。这5个阶段的对抗成本是依次上升的。现在大部分的安全话题还是聚焦于第一个阶段,对于广大中小企业来说要做到后面会比较难。

第一阶段,防黑。

防黑主要是对外,这可能是现在话题最多的部分。

第二阶段,防内。

防内在安全行业外面的解决方案、文章和产品会稍微少一点,所以现阶段很多企业暴露出来的问题最后发现都是内鬼所为。

但是厉害的企业肯定不会止于这两步。举个例子,很多人使用iPhone,iPhone上的照片、通讯录其实都是备份到iCloud。苹果是亚马逊云计算AWS最大的客户,照片、通讯录以及手机备份都是存储在亚马逊第三方云服务,而不是存储在苹果自己的IDC机房的。但是苹果能做到什么?能做到即使亚马逊的员工去云服务器上拔了硬盘,还是没有办法拿到我用户的照片和数据。就是说我的安全机制能够做到我的安全不依赖于第三方,即使你第三方安全体系崩溃瓦解了,我仍然能保证自己的信息安全。这是做的比较好的企业和一般公司的能力上的差别。

由此来看,大多数公司的能力,我倾向于一到二之间。大家可能也听说过一个故事。有一家知名的大型公司,购买的服务器中途被调包、偷换了固件,最后接入内网导致被渗透。大家在做安全体系的时候认为我有合规性、我做的机房有各种验证、指纹等等,但是其实这种安全能力和实际上的安全对抗的差距还是比较远的。因为你会发现在这种场景下,原来你所定义的那些合规项在这儿完成不管用,我要一个间谍买通电机房太简单了。

但是,也有很多人会把这个问题归结为供应链问题。这里我还是要举个例子来说明,其实这个问题可以用更强的技术手段来解决。以谷歌为例,谷歌的服务器基本上都是自研的,从底层的芯片、CPU开始都会验证硬件来源,用了可信计算的方法。假如说你的服务器接入了谷歌的内网,但是你的服务器不是谷歌自己的,芯片不是自己的,你就会被拒绝接入。这就是真正厉害的公司和一般公司能力上的差别。谷歌这种公司可以做到完全通过自己的技术手段来对抗外来的间谍,而不是偏管理的手段。

安全建设方法

第一,进不来。这是目前市场上讲的最多的部分,通过各种纵深防御体系,安全产品、威胁情报、态势感知等手段尽可能的将威胁阻挡在外。

第二,看不到。假设入侵者进来了,即使渗透了一些服务器,也不知道我的数据在哪。可能我的数据都是加密的,甚至内网流量都是加密的。攻击者也分不清资产分布,我的代码也不是明文,找密钥也得找半天。

第三,拿不走。假设更坏的情况,攻击者能看到我的一些重要资产,但当他想拿的时候,我这时候就会采取一些措施让他尽可能拿不走。

第四,解不开。假设攻击者拿走了数据,我的加密很强或者有一部分加密的密钥链的顶层密钥没有办法通过入侵手段拿到。即使攻击者拖了我的全站数据库,还是解密不了。

反入侵方法

下面我就来说说现在互联网公司比较通用的安全建设方法论。

纵深防御

首先,将纵深防御这个概念分解一下,它首先要追求的是多维。多维举个形象的例子,假设你遇到的黑客很厉害,一道防御手段防御不了,就来两道三道。比如说SQL注入,我用WAF防一次,漏掉了没关系,RASP再防一次,漏掉了还没有关系,我再用数据库审计再做一次。我想你再厉害,能同时破三道关口的可能性还不是很大。

从另一个角度来说,如果正则表达式跑一遍SQL注入跑不出来,那就用机器学习再跑一遍,反正总有办法把你抓出来。

降维

大意是在攻击者不可控、不可感知的更深层次上做防御。比如说你是黑客,你进入一个操作系统你可能玩的很开心。但是你可能不知道在操作系统外围有一堆传感器,传感器的规则判定全部是在云端。这些判定、感知对于入侵者来说是完全不可控的。现在有很多具体的技术,像对于应用层的攻击,我可能是在最底层的内核做检测,实际上都属于降维的范围。

入侵容忍

入侵容忍也是一个比较关键的规则,因为现在的安全体系不可能保证百分百安全。这个理念类似于我们船坞设计的概念,船坞设计的概念是说船坞会把船舱分成很多个隔离的空间,即使有几个空间触礁了、进水了,但是我仍然能够保证我的船不沉。所以理念是说,在进行整个体系设计的时候,要考虑的是假设我在一定程度入侵的情况下,如何能够保证数据的完整性,而不是一味地追求零入侵。零入侵其实是不太现实的。

对于规模比较大的互联网公司而言,工程化是应对海量IDC规模的比较重要的手段。下图是一个常规渗透入侵的例子。

2.png

像SQL注入在IDC基础设施防御的第一点可能是个WAF。当入侵上升到利用SQL注入,生成webshell的时候,语言虚拟机层面有一个RASP产品会对webshell进行更深度的检测。假如说深度更近了一步,入侵者通过WebShell得到一个反弹Shell,也就是操作系统普通用户权限的时候,我们在主机层面也会有一些检测,专门针对反弹Shell。更深层次的像入侵下一步种植内核蠕体的时候,我们也会有一些更底层的操作。

狭义——网络安全

狭义的网络安全基本上可以反应大多数当前的互联网公司的安全防御体系。大致

包括反入侵(IDC和内网)、Anti-DDoS和产品安全。

其实IDC的防御就是刚才提到的纵深防御体系的具体化实例。因为IDC规模的问题,可能规模比较大,用到一些大数据的方法。也因为自身的技术广度比较深,所以用到一些偏底层的技术。

关于办公网络的解决方案,其实现在有一个趋势是办公OA的应用,全面的云化。云化就是把以前邮件、审批、财务、人事全部搬到了云端。然后追求的一个效果是服务端非常重,但是客户端很瘦,我只要一个浏览器随时随地都能打开。办公网络的安全解决方案,可能大家听说过谷歌的BeyondCorp模型,它不再依赖于传统的内网安全建设。而是更倾向于变成一个类似于在云端做很多防护,然后在客户端做得比较轻度的解决方案。

然后产品安全这一块呢,对于业界最顶级的公司,在这一块花的精力是非常多的。比顶级公司稍微差一点的业界安全做得比较好的公司,通常也会在这个层面上投入一些精力。主要做的部分可能是扫描器,基于源代码的审核等。

广义——信息安全

刚才讲的是一个相对狭义的网络安全。但是网络安全实际上并不是一家公司安全的全貌,从更深、更广的意义上来看的话,对于一家大型的互联网公司,通常安全体系的顶层是企业风险管理和IT风险管理。

下层分支会包含信息安全、业务安全、风控、业务持续性管理、IT审计。对于有海外业务的全球化公司而言,可能还会涉及隐私保护,当然还会涉及认证合格。譬如有外卖这一类业务的公司,甚至还有一部分是线下安全。这部分可能跟技术部不一定强相关,但是它也是互联网安全的重要组成部分。

在比较高层级的方法论层面,还包含周期性的风险评估。具体到了战术层面呢,实际上对于一家互联网公司而言,它最频繁的领域实际上就是研发和运维。那在研发侧呢,一个普遍的使用的方法论就是SDL,这个可能大家也听得比较多。在运维领域呢,我认为传统的P2DR模型就可以覆盖。更多的方法我认为也没有必要,大同小异。

在最底层的支撑部分,实际上现在各个安全论坛比较火热的态势感知、安全大数据,这些实际上都是最底层的实现手段了。

外挂式公司 vs 内建式公司

外挂式公司可能代表了国内的互联网行业的最佳实践,而内建式公司可能代表类似像谷歌这样的公司。我后来想了想为什么会有这样的一种差异呢?有可能是基于几个方面的原因。像国内的互联网公司,包括很多体量上不是很大的互联网公司,业务迅猛发展。其实它的业务更多是建立在大量使用开源软件的基础上的。然而开源软件其实很多设计之初并没有太考虑安全。所以做安全建设的思路上,可能还是延续了风尘仆仆,用外挂式的这种手段去切入各个点做安全。

而对于谷歌这样的公司而言呢,它从底层开始到上层,所有的东西全都是自研的。所以它可以在基础架构和应用的实现里面,从一开始就嵌入安全,内置安全机制。也就不需要通过外挂很多安全产品来实现安全防护。

另一方面有可能跟安全团队的知识结构有关。国内的安全团队更多是以攻防技能为主。但是在国外,可能这一点不太一样。面试的时候问的第一个问题,可能是抵御,而不是攻防。所以安全设计在国内可能是一个比较缺失的领域。

影响长期建设的因素

最后我们来探讨一下:对一家大型互联网公司而言,安全做得好与不好的关键长期因素。

工程技术能力

安全做得好与不好,很大程度上依赖于它的整体工程技术能力。其实做安全产品的能力,包括检出率,模型,或者说你机器学习的算法做得再好,这些都不是第一关键因素。因为对于比较大型的互联网公司,最终要使你的安全产品和安全技术转化为实现阶段,必须要在海量IDC上全部落地,这个落地的能力依靠的就是整体的工程技术能力。

举个例子,国内互联网公司和国外互联网公司一个很大的差距就是数据安全。以全站数据加密这件事情来说,以我的所见所闻,国内暂时没有公司能做到这一点。但是国外的顶级公司其实是可以做到这一点的。

回到技术原点来看,服务器加密、数据加密这个技术难吗?可能很多网络安全专家都有这种实现能力,但是为什么就是落地不了呢?其实不是安全技术的问题,而且整体工程技术能力不到。因为对于这项技术而言,在整个互联网公司落地,可能涉及到很多环节。譬如说全站服务的高可用、服务降级、故障容忍能力。只要有一个维度不达标,这个安全技术就没有办法落地。

架构统一

架构统一首先要解决的问题是安全做一套就解决问题了,还是要做很多套。在国外的公司中,比如说有的互联网公司规模很大,但是每个自成体系,可能每个都有一套技术体系。那安全工作的适配工作量就比较大。相当于一个安全部门要做十个安全体系,那最终可能人效比很低。

第二个方面呢,架构统一其实给安全的入口提供了很大的便利。其实我也曾经隐讳的提了一点,安全这件事情可以做得很辛苦,但是不一定讨好。举个例子,在一个技术规划做得不太好的公司,你的安全要做什么?可能要在网关上针对所有的协议,所有的流量做分析。但在一个做得比较好的公司,我可能不需要这样做。因为我对外开放的只有HTTP、HTTPS协议,我其它所有的协议全都不需要关注。我甚至禁止了IDC主动向外发起的链接,我连反弹这件事情都不用关注。那么我在这个基础上去做安全,我后端的安全体系,我的安全能力建设就会相对比较高效。所以安全这件事情做得好不好,也要看公司其它能力拖不拖后腿。

像架构的统一性呢,刚才也提到了技术,譬如白名单也提供了一定的可行性。架构不统一去做白名单这件事情,其实是不太可能的。

深入研发

如果想做到业界最牛的水平,可能还有很重要的一点要深入研发,深入源头。像谷歌那种安全体系可能大量先置于研发,把安全设计融入产品,最终才能达到这样的效果。跟外科手术般的外挂安全产品,可能还是有不同的投入点。

0×01 前言

1988年,世界上第一个缓冲区溢出攻击–Morris蠕虫在互联网上泛滥,短短一夜的时间全世界6000多台网络服务器瘫痪或半瘫痪,不计其数的数据和资料被毁。造成一场损失近亿美元的空前大劫难!

缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败、系统宕机、重新启动等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。

0×02 基础知识

在学习这篇教程之前,你需要准备以下东西:

1、一台拥有Linux虚拟机的计算机或者拥有Linux操作系统的物理机。

2、GCC编译器。

3、GDB调试器。

4、任意一款文本编辑器(如vim)。

除此之外,我们还需要了解一些基础知识。

栈操作

对于栈这个概念的最好诠释就是将其想象为一个装乒乓球的圆筒。

1.png

从上面口子往下一次放一个进去,先放进去的后面才能出来。栈也同样如此,不过这个圆筒是装乒乓球的,而栈是存储数据的。从计算机术语中来说,栈是一种具有先进后出队列特性的数据结构。

2.png

1、入栈或压栈,它在汇编语言中是通过push指令完成的。

2、从栈上取出元素的过程被称为出栈,它在汇编语言中是通过pop指令完成的。

在内存中,每个进程在其内存堆栈段中都拥有自己的栈,针对栈的处理我们需要了解两个寄存器EBP(扩展基址指针寄存器)和ESP(栈指针寄存器)的概念。

EBP指向当前栈的底部,而ESP总是指向栈顶。(如上图)

函数调用过程

函数其实就是一个可供其他函数调用的自包含的代码模块,这句话听起来很绕口,但理解起来很简单,这种函数调用其实就是导致程序流程的跳转,当我们在汇编程序中调用一个函数时,将会发生以下三个步骤:

1、按照调用约定,首先需要将函数参数按照逆序入栈,从而对函数调用进行设置。

2、将EIP保存到栈上(EIP是指令寄存器,存放当前指令的下一条指令的地址),这样程序在调用函数返回后能够在之前中断的地方继续执行下去,所以EIP存放的地址被称为返回地址。

3、执行call命令,将该函数地址放入EIP寄存器进行执行。

下面我们就以一个例子来了解函数调用过程。

示例C程序(function.c):

int foo(int a, int b)
{
    int e = a + b;
    return e;
}
int main(void)
{
    foo(5, 2);
    return 0;
}

首先我们进行编译

gcc -g function.c -o testfunction.o

-g选项使目标文件testfunction.o包含程序的调试信息。

11.png

很简单的一个程序,我们主要用它来了解一下函数调用过程。

我们使用gdb来调试程序:

3.png

start命令用于拉起被调试程序,并执行至main函数的开始位置。disassemble命令的/m指示显示汇编指令的同时,显示相应的程序源码。

我们先来看看调用foo()函数这段汇编代码:

0x80000580 <+0>:    55      push   %ebp
0x80000581 <+1>:    89 e5   mov    %esp,%ebp
0x80000583 <+3>:    e8 18 00 00 00  call   0x800005a0 <__x86.get_pc_thunk.ax>
0x80000588 <+8>:    05 78 1a 00 00  add    $0x1a78,%eax
 
0x8000058d <+13>:   6a 02   push   $0x2
0x8000058f <+15>:   6a 05   push   $0x5
0x80000591 <+17>:   e8 ca ff ff ff  call   0x80000560 <foo>

和前面我们所说的流程一样,首先将调用程序的EBP寄存器入栈。然后将当前ESP寄存器保存到EBP寄存器。之后获取要返回的地址。接下来就是将函数参数按照逆序入栈,最后执行call命令。

现在我们已经了解是如何进入函数的,接下来我们继续了解函数又是如何结束的呢。

foo函数被执行之后,我们使用 disassemble 命令显示其汇编指令:

4.png

函数收场白:

0x8000057e <+30>:   c9  leave 
0x8000057f <+31>:   c3  ret

被调函数在返回调用程序之前所要做的事情就是将栈清空,而有效的清空栈就是leave语句功能的一部分。然后就是从栈中弹出所保存的EIP返回调用程序。

0×03 缓冲区溢出

缓冲区是指一块可用于接受和存放数据的存储区域,缓冲区一旦分配,其大小也就固定了。首先我们来看一段c程序:

#include <string.h>
 
int main(){
    char test[10];
    strcpy(test,"AAAAAAAAAAAAAAAAAAAAAAAAAA");
}

这段代码非常简单,首先我们定义了一个10字节的字符串,然后使用strcpy函数复制了26个字节的A到test。这明显会发生问题,但是我们先不用管它,我们首先来编译运行一下这个程序:

gcc编译:gcc -ggdb -mpreferred-stack-boundary=2 -fno-stack-protector -o test test.c

运行结果:

5.png

可以发现出现了段错误提示,不用郁闷,这正是我们想要的,下面我们使用gdb调试器看看哪里出错了。

6.png

我们可以发现,程序试图执行0×41414141处的指令时程序崩溃,而0×41414141刚好是AAAA的十六进制编码。接下来,我们检查一下寄存器EIP:

7.png

检查完EIP我们可以清楚的发现问题所在了,从前面的基础知识我们了解到EIP存放的地址被称为返回地址,程序在调用函数返回后能够在之前中断的地方继续执行下去靠的就是EIP,现在EIP被这些A破坏了,程序肯定要崩溃,这就是经典的缓冲区溢出原理。

0×04 总结

本篇文章我们了解了栈的基本概念,函数调用过程以及缓冲区溢出的基本原理,但是这并没有结束,我们还没有去利用这个缓冲区溢出漏洞,下一篇文章我将给大家展示实际情况下缓冲区溢出漏洞出现的位置,以及如何去利用它获取一个Shell。

0×05 参考资料

1、百度百科

2、Buffer Overflow Tutorial: https://gist.github.com/apolloclark/6cffb33f179cc9162d0a

3、Buffer Overflow Exploit: https://dhavalkapil.com/blogs/Buffer-Overflow-Exploit/

4、维基百科: https://en.wikipedia.org/wiki/Buffer_overflow

5、基于堆栈的缓冲区溢出开发教程: https://www.exploit-db.com/docs/28475.pdf

6、函数调用过程探究: http://www.cnblogs.com/bangerlee/archive/2012/05/22/2508772.html

本文属于“合天智汇”原创保护文章,未经允许,静止转载!

0×01  前言

小表弟我看了看各大漏洞平台近一个月提交的情况,发现了这个现象:交xss,信息泄露、弱口令之类等看起来比较鸡肋的漏洞多了,交命令执行、权限绕过等比较相对而言高危的漏洞少了,更别提getshell了。

挖洞诚可贵,自由价更高。要是为了挖洞,不小心触到了《网络安全法》的底线真是得不偿失。而小白白们在学习挖洞时往往会忽略挖洞的底线,也不清除是否违法。为此,在正式挖洞教程之前,这篇文章将会介绍经典web靶场的安装,在实战前,大家可以先在本地搭建起来玩玩,顺便感受下所谓的白盒测试是什么样的,毕竟在真实环境下除了开放源代码的cms之类,能够进行白盒测试的环境还是比较少的。

话不多说,接下来就开始咯,上车吧!滴!学生卡!

0×02   搭建DVWA

(下载地址:http://www.dvwa.co.uk/

介绍:DVWA(demavulnerable web application)是一个基于PHP/MYSQL环境写的一个web应用。他的主要目的是帮助安全专业员去测试他们的技术和工具在合法的环境里面也帮助开发人员更好的理解如何加固他们开发的web系统同时帮助老师或者学生去教或者学习web应用安全在教学环境里面。

 

搭建:

我们使用phpstudy进行搭建

首先,安装phpstudy后启动如图

图片.png

点击“其他选项菜单”—》“网站根目录”,即WWW文件夹

将我们下载好的dvwa靶场源码放在这个文件夹下,如下图所示

图片.png

接下来打开浏览器输入127.0.0.1/dvwa-1.9即可进入如下页面

图片.png

上图中红色标示的表示相应的函数或者模块没有打开,这不影响我们使用其基本功能,我们忽略即可,这里我们点击下方create/reset database,结果会提示出错“could not connect to the mysql service”这是因为dvwa的config.inc.php中有关数据库的配置信息与phpstudy自带的mysql数据库的配置信息不符合导致结果会出错解决此问题步骤如下:

打开DVWA-1.9,-àconfigàconfig.inc.php

图片.png

我这里使用sublime打开,修改’db-password’处的密码为root,这是因为phpstudy自带的mysql的密码就是root,两者要保持一致

图片.png

这时候我们在尝试点击config/reset database,即可进入登陆页面

图片.png

图片.png

默认username:admin

Password:password

图片.png

点击login进入。

 图片.png

我们点击左侧的dvwa security可以调整靶场的安全级别,即测试的难易程度

图片.png

在下拉框中选择一个自己想要挑战的级别,点击submit即可设置完成

图片.png

我们以暴力攻击(brute force)为例,我们点击左下角的view resource即可查看源代码,然后可以根据代码中相应的函数、过滤规则等来进行下一步的测试(这也就是我们说所的白盒测试)

图片.png

Dvwa的靶场搭建就告一段落了。

本文仅侧重靶场的搭建,所以仅提及部分功能,详细的使用大家可以去合天网安实验室进行实验,地址:http://www.hetianlab.com/cour.do?w=1&c=C172.19.104.182015061009315500001

0×03  搭建webgoat

(下载地址:https://s3.amazonaws.com/webgoat-war/webgoat-container-7.0-SNAPSHOT-war-exec.jar

介绍:WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,当前提供的训练课程有30多个,其中包括:跨站点脚本攻击(XSS)、访问控制、线程安全、操作隐藏字段、操纵参数、弱会话cookie、SQL盲注、数字型SQL注入、字符串型SQL注入、web服务、OpenAuthentication失效、危险的HTML注释等等。WebGoat提供了一系列web安全学习的教程,某些课程也给出了视频演示,指导用户利用这些漏洞进行攻击。

 

搭建流程:

将文件下载下来后我们将其放入C盘根目录下

图片.png

使用jar命令来操作,输入java –jarwebgoat-container-7.0-SNAPSHOT-war-exec.jar回车即可得到如图所示结果

图片.png

图片.png

打开浏览器,输入localhost:8080/WebGoat/login.mvc即可访问

图片.png

Username和password页面下方已经给出,我们选择user或者admin账户登陆均可

图片.png

进入页面后我们可以看到左侧包含了大量实验

图片.png

图片.png

任意打开一个我们都可以在页面左边看到cookie以及一些参数的变化,这对于我们进行挖掘漏洞时是非常实用的

图片.png

同样,我们也可以查看源码

图片.png

如果关于webgoat想要有进一步的了解,可以登陆owasp中国官网下载相关文件及手册

图片.png

关于webgoat靶场的搭建就介绍到这

0×04

前面介绍了两个非常经典的靶场的搭建,方便大家在实战前、或者在没网的情况下在本地自己来进行联系。类似的靶场还有很多,如mutillidaemutillidae、hackxorhackxor等,基本上都是大同小异,这里不再赘述,大家有兴趣可以自己去尝试。

本系列的下一篇文章就正式开始漏洞挖掘了,在此之前希望大家能够把webgoat、dvwa等靶场遇到的漏洞类型等先熟悉、了解,方便接下来的学习。


0×05  建议

1.   为了规避可能触犯的法律风险,建议大家在挖洞前和相应的漏洞平台及厂商签好相应的涉及到具体测试的合约

2.   建议大家尽可能测试有src的厂家的漏洞,src的设立表明了企业对安全的重视,白帽子提交的漏洞能得到更及时的反馈,帮助更好地维护大环境下的网络安全

3.   可以多参加大平台发起的一些src的活动,如之前的携程src发起的活动,以及正在进行的京东src发起的“全民保障618”的活动等。

4.   白帽子的行为,在社会看来是收到法律的约束,但是每名白帽子心中都有自己的底线,坚守着白帽子的守则—Do not be evil(不作恶)

愿我们在挖掘漏洞的道路上,不忘初心。

0×06  预告

本系列的下一篇文章将会介绍sql注入漏洞的挖掘,大家对下一篇文章有什么好的提议都可以在下方留言,我们会尽量满足大家的。

更多干货学习也可关注“合天智汇”公众号!

引言

首先,我想要说明的是,我不是一个安全研究员、白帽子或者逆向工程方面的专家。我目前正在从事Java开发,但一直对信息安全感兴趣。

最近我对信息安全的诸多领域进行了研究,包括二进制、逆向工程到破解WPA。因此,我决定搭建一个信息安全学习博客,用于记录学到的知识。即便没有人读我的博客(译者:事实上还有个小可爱翻译成了中文),至少我能够记录下自己的收获,而且我发现把知识和经历写下来能够让我对知识有更深刻的认识。

寻找目标

今天我有相当多的空闲时间,所以我决定用逆向工程来试手。我具有多年的Java编程经验,而Java反编译器通常可以为我提供确切的源代码,因此对我来说逆向Java项目是个不错的选择。

当我正在考虑逆向哪个项目的时候,我想到之前看到的一条Eclipse插件的评价。在看到这条评价后,我决定停止使用这款插件。

Eclipse Class Decompiler插件页面

Eclipse Class Decompiler插件页面Eclipse Class Decompiler插件页面

这相当值得怀疑,我并不认为这款Eclipse插件需要具备这个功能。

请注意,这个插件上榜了Java Eclipse Plugin Top 20,并有将近400k的下载量。

Eclipse Class Decompiler排行

调查

我首先需要得到这个插件的副本,然后反编译它,或找到项目的源代码。

我第一个检查的地方是项目网站,它引导我前往项目的Github页面。我看过Github上的代码,但并没有找到所说的“phone home”的功能。也许我错过了一些东西,但是我怀疑开发者隐藏了相关的代码。所以我决定安装这个插件,然后反编译它的二进制文件。

这个插件可能会对我的电脑产生危害,所以我在VirtualBox上安装了Windows虚拟机,并在虚拟机内部安装了Java和Eclipse。

Windows虚拟机

接着我安装了该插件,通过研究了Eclipse插件二进制文件的存放位置,最后在<user_home>/.p2/pool/plugins文件夹找到了它们。

Eclipse插件二进制文件的存放位置

我把这些jar包从虚拟机复制到我主机的Eclipse里,使用了一个(我认为是)值得信赖的反编译器——jd,来分析这些类。打开主要的类文件以后,我马上发现了一些有趣的代码,这些代码用来存储在一个名为adclick.count的变量。

代码

值得注意的是,该代码并没有出现在插件的Github版本中。

插件的Github版本

我很快发现这个二进制文件包含了相当多的类,与其一个个检查它们(可能需要几个小时),根据Eclipse Marketplace上的评论,该插件产生了一些HTTP连接,所以我决定反编译所有调用java.net.*包的源代码。

反编译所有调用java.net.*包的源代码

现在我缩小了需要检查的代码的范围,这样就能更深入地看看这些代码。

检查这些类时,我在IOUtils中发现了一些可疑的代码,它似乎提供了一个关闭HTTP连接的Helper Method(为什么代码反编译器需要关闭HTTP连接?)。

可疑代码

接下来,我在UIUtil类中发现一个方法用来在外部浏览器中打开URL,并增加adclick.count变量。 

在外部浏览器中打开URL

UserUtil类中,我发现有一点值得关注——collectUserIp()方法中调用了多个(看似不相关)的各种网站。

collectUserIp()方法中调用了多个(看似不相关)的各种网站

我跟踪了这个方法,看看这些代码对用户信息做了什么…然后发现它被用在BackgroundHandler类中。

检查这个类后,我发现该代码收集了用户系统的大量信息,将其转换为JSON对象,然后将其发送到http://decompiler.cpupk.com/statistics.php&#8221

逆向一款恶意Eclipse

现在,我想看看插件收集并发送了哪些的信息到他的服务器上。我在主机上安装了Burp Suite,开启HTTP代理,这会让虚拟机中的流量通过这个代理转发。

逆向一款恶意Eclipse插件

然后在虚拟机中设置系统代理。

  逆向一款恶意Eclipse插件

我再次启动Eclipse,并检查通过代理发送的请求和响应。首先产生了一些来自Eclipse的调用,但是我很快收到了来自thecollectUserIp()方法的调用。pv.sohu.com/cityjson返回的是一个JavaScript变量,其中包含了调用者的IP、所在大陆的id和名称

逆向一款恶意Eclipse插件

接下来我观察了对ip.taobao.com/service/ipinfo.php的调用,它则返回了更多关于用户IP的地理信息。

逆向一款恶意Eclipse插件

最后我观察到了Eclipse Marketplace上的评论所描述的“call home”功能。它将用这些信息生成JSON对象并将其发送到decompiler.cpupk.com/statistics.php

call-home.png

把注意力转回analyzeUserInfo()类,调用上传用户信息的这个方法实际上必须有一个重要的服务器响应,而这个响应是通过其他更多的方法来处理的。

response-is-used.png

这时候我找到了checkAdConfig()方法。checkAdConfig()方法解析了JSON对象的诸多属性,比如adConfigadConditionadStyles等等。

逆向一款恶意Eclipse插件

根据BurpSuite显示的服务器响应,当前并没有提供其所需的所有变量。

逆向一款恶意Eclipse插件

因此我决定在代码中搜索之前注意到的adclick.count变量。这一次我发现了一个新的类——HtmlLinkTrimItem

逆向一款恶意Eclipse插件

这个类实现了一些值得琢磨的功能。首先,它实现了一个内部浏览器。其次,它在初始化时调用一个updateTrimUrl()方法,该方法在单独的线程中使用了隐藏的浏览器,并调用了由trayLinkUrl定义的URL。

逆向一款恶意Eclipse插件

我在代码中搜索了对HtmlLinkTrimItem类的引用,发现作者在多处引用了HtmlLinkTrimItem类。

逆向一款恶意Eclipse插件

LinkTrimChecker类使用了TrayLinkV1类和TrayLinkV2类,用于实例化HtmlLinkTrimItem(由此反过来触发后台浏览器)。

逆向一款恶意Eclipse插件

TrayLinkUtil.displayTrayLink()方法又调用了LinkTrimChecker.displayTrayLink()方法,然后被使用在BackgroundHandler.checkTrayLink()方法中。

如果你前面有仔细阅读,那么你可能已经注意到checkTrayLink方法正是处理服务器返回的JSON对象的方法之一。当响应中有trayLink时,TrayLinkUtil.displayTrayLink就会被调用。

checktraylink.png

BurpSuite上的记录表明这个对象存在,但它是空白的。

所以如果trayLink不是空白的话会发生什么?

如前面讨论的那样,程序将调用displayTrayLink()方法,它将委派给LinkTrimChecker处理。

display-tray-link.png

但是你可能会注意到displayTrayLink()方法的第二个参数TrayLinkUtil.enableShowTrayLink(),很显然只有在解析为true时,才能启用后台浏览器。enableShowTrayLink()方法会检查首选项中包含了trayLinkStrategy,然后UserUtil类中的matchAdCondition方法才会返回true

  enable-show-tray-link.png

根据我之前的研究,trayLinkStrategy是在从服务器返回的JSON对象中解析trayLink时设置的。

接下来我又看了一下matchAdCondition()方法。该方法检查首选项中是否包含adCondition(或默认为100),并将用户反编译类的总数与此值进行比较,如果用户反编译类的总数超过此数字,则返回true

matchadcondition.png

因此,在用户对超过100个类进行了反编译后,或者服务器返回的adCondition字段更改为小于用户反编译类计数的值时,则后台浏览器将开始发出请求。

接下来我要看看trayLinkUrl是如何被设置的,这是后台浏览器所要打开的URL。我在TrayLinkUtil类中发现了用于设置trayLinkUrl的代码。首先根据服务器返回值设置trayLinkStrategy属性,然后第二种方法检查属性,如果它包含一个具有url字段的JSON对象,则返回此URL。否则,它则为包含这些对象及其权重的数组,程序将根据权重随机选择URL。

逆向一款恶意Eclipse插件

我同时注意到后台浏览器是在一个定时器上打开的,这个定时器再次由TrayLinkUtil类中的getTrayUrlDisplayTime方法定义。该方法表明trayLinkStrategy还包含了showTime属性以及前面发现的URL。

逆向一款恶意Eclipse插件

我决定结合发现到的所有内容,使用BurpSuite修改服务器响应来触发广告软件功能。我修改了服务器返回的trayLink,使其包含URL到google.com,并将showTime改为1分钟。我还将adCondition属性改为2,毫无疑问,我现在反编译类的数目已经超出了这个限制。 

逆向一款恶意Eclipse插件

我使用jvisualvm来Hook Eclipse,并查看HeapDump,以确认我已经修改了相关属性。我在HeapDump上运行了以下查询语句(OQL)。

select s from java.lang.String s where s.toString().equals(“trayLinkStrategy”)

结果显示有两条记录,第一条为Eclipse InstanceProperties进行的引用,由此我观察到了之前进行的修改。

逆向一款恶意Eclipse插件

值得注意的是,键值表的第3和第8项分别包含trayLinkStrategyadCondition。现在设置添加的JSON对象,并将adCondition的值改为2

逆向一款恶意Eclipse插件

大约一分钟之后,我注意到BurpSuite有了动静,如图所示,虚拟机已经向google:80发送了一个请求。成功了! 

逆向一款恶意Eclipse插件

为了确保这不是一个意外(因为可能很多不同的应用程序/代码向Google发送请求),我重复测试了imgur.com 。

test-2-imgur-injected.png

结果是一样的,虚拟机向imgur.com:80发出请求。

hit2.png

此时虚拟机弹出了IE证书的问题。这可能是由于imgur通过TLS请求资源,但BurpSuite的证书不符合这些资源的DN(身份识别信息?)。

逆向一款恶意Eclipse插件逆向一款恶意Eclipse插件

当离开Eclipse窗口,可以在BurpSuite看到imgur的调用流。

逆向一款恶意Eclipse插件

结论

很高兴我对该插件进行的研究产生了一定的成果,我揭露了一个上榜Java Eclipse Plugin Top 20的插件内存在的恶意代码,以及分析了Eclipse Marketplace评论所说的“call home”方法。我认为这个功能的代码没有出现在Github版本的代码中就足以证明它可能不怀好意。

我想要补充的是,尽管这个功能存在,但我并没有观察到服务器提供了所需的JSON对象来触发广告。

我将就该问题联系Eclipse官方,他们不会容忍这种功能。

如果有任何问题,请随时发表评论。

Append:基于进一步的研究,这些恶意代码可能被用于下载文件到用户系统上(仍然要更深入的测试)。因为通信是完全未加密的,所以可能会产生非常恶劣的影响。

Append 2:我对上述猜想进行了测试。

我伪造了一个只包含一个带消息的JFrame的jar文件,并用python开放在80端口

sudo python3 -m http.server 80

然后我将主机IP地址设置为trayLink时,虚拟机中显示了以下内容。

逆向一款恶意Eclipse插件

我虽然不认为会有人打开或保存这个特定的文件,但可能存在另一个漏洞,在不必点击任何东西的情况下就会对操作系统产生危害,或运用社会工程学,例如,如果弹出窗口设置为EclipseUpdate.exe,那么可能就会有一些人上当了?

由于“call home”基于HTTP,因此也可以通过修改MITM来攻击受害者。

Append 3:Eclipse已经从市场上移除了该插件,并发布了相关通告,建议用户卸载该插件。

译者注

这篇文章是在cos的分享里看到的,因为英文不是很难,所以就花了点时间翻译成了中文,这篇文章同时也发表在我的博客上。

*参考来源:Reverse Engineering an Eclipse Plugin,作者:Pythong_song,已于作者取得联系,并获得翻译授权。转载请注明来自 FreeBuf.COM

9月18日,第四届网络安全博览会暨网络安全成就展将于上海国家会展中心召开。本次活动上海云盾信息技术有限公司也将应邀参加,为与会来宾及各级领导展示全新的智慧云安全产品动态。

7c1ed21b0ef41bd5ac710ca252da81cb39db3d41.jpg

本次网络安全博览会暨网络安全成就展由中央网信办、上海市人民政府指导,上海市互联网信息办公室主办,国家工业信息安全发展研究中心、上海市信息安全行业协会承办。博览会以“网络安全为人民,网络安全靠人民”为主题,宣传普及网络安全知识和技能,注重知识性、趣味性、参与性、体验性。

上海云盾届时也将携旗下太极抗D、红网卫士、盾眼等智慧云安全产品到场出展。太极抗D是专业的云抗D服务,由三个层级清洗中心组成,对DDoS攻击从源头到终端全方位清洗,全面防护各种类型DDoS攻击。抗D架构图如下:

1.png

红网卫士是面向政企客户推出的专业防入侵、云防控产品,提供高级云WAF、业务风控、内容访问控制、高级威胁分析以及专家团队服务。

上海云盾信息技术有限公司(YUNDUN)创立于2011年,是新兴的智慧云安全服务商,致力于网络空间安全的观测、保护、治理。专注于Anti-DDoS、应用安全、大数据安全和智慧城市安全等领域,曾先后为93阅兵、三届世界互联网大会、G20峰会、世界健康大会、金砖五国会议等重大活动提供全方位网络安全保障。

2.png

​上海云盾具备多年一线抗攻击实战经验,以超过8000万的投资自建数个超级抗D数据中心,总体储备带宽达10Tb。以数据智能和网络协同为双引擎的下一代ADS,无损的贴合用户业务,全天候解决任何级别的攻击威胁。

对于渗透测试的新手而言,往往需要通过大量的靶机来练手例如 VulnHub、Metasploitable、DVWA等。但我们不难发现这些靶机有个弊端就是,所有的漏洞都是已知和静态的,这与实际场景也存在着较大的出入。那么,有没有一款可以用来随机创建漏洞虚拟机的工具呢?答案是有。在Github上我挖掘到了一个叫做SecGen的生成器,SecGen是一个允许用户随机来创建漏洞虚拟机的工具,该项目使用Vagrant,Puppet和Ruby来快速创建可以用于学习或托管CTF的随机漏洞虚拟机。本文,我将为大家介绍SecGen在Kali Linux上的安装方法,以及如何使用SecGen并生成漏洞虚拟机。此外,你也可以选择在树莓派上安装使用

步骤1:安装SecGen

在正式开始之前按照惯例,我们先使用apt-get update命令来更新下软件列表。接着我们使用git clone命令,从git存储库克隆该项目的副本。

git clone https://github.com/SecGen/SecGen

如何使用SecGen随机生成漏洞靶机?

依赖关系安装,我们在终端中执行以下命令。

sudo apt install ruby-dev zlib1g-dev liblzma-dev build-essential patch virtualbox ruby-bundler vagrant imagemagick libmagickwand-dev

如何使用SecGen随机生成漏洞靶机?

完成依赖项安装后,我们使用cd SecGen命令进入到SecGen目录,并执行以下命令:

bundle install

注意这里我并没有使用sudo权限来执行以上命令,使用普通权限运行bundle会更合适,在必要时系统可能会提示你需要输入密码。以root用户身份运行bundle,可能会导致系统出现问题和冲突。

如何使用SecGen随机生成漏洞靶机?

如果你出现上述提示,可以键入以下命令来查看Ruby的版本号。

ruby --version

根据你的Ruby版本,来完成所需步骤即可。

步骤2:创建你的第一个虚拟机

生成随机漏洞虚拟机,只需在终端中输入以下命令。

ruby secgen.rb run

但不幸的是执行以上命令后我却发现,Kali存储库的Vagrant版本存在问题,并且Ruby gems也有问题。因此如果你的机器同样出现了致命的错误,那么我建议你将你的Vagrant版本进行降级。你可以执行以下命令:

apt purge vagrant

然后,从Vagrant站点下载Debian软件包。使用dpkg -i命令来安装vagrant.deb文件。

dpkg -i vagrant1.9.7x86_64.deb

现在,我们返回到SecGen文件夹,再次执行以下命令。

ruby secgen.rb run

如果这里没有错误,我们将可以顺利进入到下个操作。如果依然显示报错信息,你可以执行以下命令来清除你的Ruby gems。

sudo gem cleanup

在完成以上两个步骤后,我们再次执行创建命令:

ruby secgen.rb run

创建过程可能需要等待一段时间,但并不会太漫长。

如何使用SecGen随机生成漏洞靶机?

不一会儿一个漏洞虚拟机就生成了,在虚拟机软件上我们可以查看到它的一些细节信息。

如何使用SecGen随机生成漏洞靶机?

网络连接模式设置

VirtualBox将机器组网模式默认为NAT。这个模式可以让虚拟机接入互联网,但主机将无法成功访问到它。

如何使用SecGen随机生成漏洞靶机?

因此,我们需要将NAT转变为允许我们访问虚拟机的网络模式。根据我们的需求我们可以选择host-only(仅主机模式)或bridged(桥接)。但桥接模式将会将漏洞虚拟机直接曝露在我们的内部网络,因此我决定选择使用仅主机模式。在VirtualBox中,选择machine后选择“设置”,“网络”将NAT更改为“仅主机适配器”即可。

如何使用SecGen随机生成漏洞靶机?

在完成以上设置后,我们就可以通过浏览器来打开该漏洞虚拟机了。我们通过ifconfig命令来查看它的网络设备情况。

sudo ifconfig

如果你的ifconfig命令有问题,你可以运行安装apt-get install net-tools

如何使用SecGen随机生成漏洞靶机?

从ifconfig的返回结果可以看到一个名为vboxnet0的适配器,并且地址空间为172.28.128.0/24。接下来,我们执行以下命令。

nmap 172.28.128.0/24 -sn

Nmap应该会为我们返回两个结果,你的主机和你的漏洞虚拟机。

如果你在渗透的过程中卡在了某一步,你可以在SecGen存储库文件夹中执行以下命令,查看该虚拟机的生成方案。

cd projects

此目录中包含之前生成的机器。我只有一台机器,因此我将目录更改为了该机器目录。在该目录中,有一个scenario.XML的文件。我们可以通过以下来命令查看它。‘

cat scenario.xml | less

或者,你也可以选择自己喜欢的文本编辑器,如Vim进行查看。

vim scenario.xml

这里我更喜欢使用Vim,因为它提供语法的高亮显示。

如何使用SecGen随机生成漏洞靶机?

如果你想得到一些提示信息,你可以通过以下命令获取到。

cat marker.xml | less

这将给你提示帮助你找出随机生成的机器。

步骤3:生成其他场景

关于如何编写自己的场景方案,不在本文的讨论方位内。但在SecGen GitHub的页面上已经有详细的记录说明,除了使用默认方案生成随机虚拟机之外,用户还可以使用一些其他的生成方案。示例如下:

ruby secgen.rb --scenario scenarios/examples/remotely_exploitable_user_vulnerability.xml run

这将创建一个具有随机远程可利用漏洞的虚拟机。

ruby secgen.rb --scenario scenarios/security_audit/team_project_scenario.xml run

这将会为我们创建一组漏洞机器,并模拟一个迷你企业架构。SecGen创建了一个内网服务器,一台台式机和一台Web服务器。之后通过简单配置,就可以模拟存在漏洞的企业内部网络了。这对于新手能力的提升无疑将带来巨大的帮助。

更多示例你可以在 ./SecGen/scenarios/examples目录下找到。

总结

通过本文对SecGen的介绍,我们可以看到SecGen的优势所在。对于渗透测试的新手而言,SecGen不失为一款优秀的练习工具。随着该工具的不断完善和成熟,我也希望越来越多的人能够加入到这个项目中来,创建更多的优秀场景并分享它们!

 *参考来源:null-byte,FB小编 secist 编译,转载请注明来自FreeBuf.COM