陈志伟
(福建林业职业技术学院 自动化工程系,福建 南平 353000)
随着网络技术和信息安全技术的不断深度融合发展,每天有大量的数据信息往来于互联网,获取这些数据信息变得越来越便捷的同时,存在其中的某些敏感数据会因Web系统本身的漏洞或者弱点而被泄漏,这将给社会或公众带来潜在危害.由此,进行网络安全渗透测试系统的设计[1],开发出具有高可靠性、低成本和长生命周期等优点的系统[2],以此为平台测试发现网站页面可能存在的安全漏洞,并给出应对措施.
J2EE是在SUN公司的引领和推动下,召集多家公司技术人员协同合作而制定出的一套企业级应用程序开发规范,该规范采用分层设计思想,为搭建具有高复用、高扩展、松耦合的应用系统提供了良好的技术支持.
图1 SSM框架划分系统层次
SSM作为经典的模型(M)—视图(V)—控制器(C)框架,将系统划分为持久化(Persistence)层、数据访问(DAO)层、业务(Service)层和Web表现层,如图1.
网络安全渗透测试系统设计按“区”划分,主要分为测试(题目)区、功能区和推荐区.从具体各区功能的实现角度出发,对测试区、功能区和推荐区设计作如下说明:
1.2.1 测试区 提供进行安全渗透测试的平台,用来发现可疑的网站页面弱点并给出应对措施.部署有脚本测试模块、注入测试模块、上传测试模块、综合测试模块等,是系统的核心功能所在.图2是系统的核心——测试(题目)区功能模块划分情况.
1.2.2 功能区 负责对登录测试人员的记录.首先要确认测试人员的有效身份,通过登录拦截器类LoginInterceptor获取并判断Session中是否有此用户数据,对不符合条件的给出提示信息.
1.2.3 推荐区 定期收集、整理当下网络安全、渗透测试新技术等,并及时发布公告.
图2 测试区模块
系统配置:运行内存为4GB;固态硬盘为100 GB;数据库服务器为Mysql-8.0.12-winx64;Web服务器为Apache-tomcat-8.0.53;JDK版本为Java(TM) SE Runtime Environment (build 1.8.0_181-b13).
本系统前端页面使用Bootstarp和jQuery框架完成页面功能的展示,后端则通过J2EE和SSM框架整合来实现系统的前后端分离设计[3].
Spring框架为开发设计人员提供了注入和面向切面的支持.MyBatis框架通过XML或注解形式进行配置,在实体类和SQL语句间建立关联,以便实现数据的存储、查询、修改和删除等操作[4].
数据持久化是将内存中的数据模型转换为存储模型以及将存储模型转换为内存中数据模型的统称[5],该系统设计的持久化类包括:用户持久化类(User)和数据字典持久化类(BaseDict),如表1、表2所示.
表1 系统用户表
表2 数据字典表
从图2可以看出测试(题目)区为本系统的核心,下面主要介绍该区的实现:
首先,创建持久化类,在edu.czw.core.po包中,创建登录用户和数据字典持久化类.其次,实现DAO层,创建用户DAO层接口和映射文件UserDao接口,接着创建一个与接口同名的映射文件;创建数据字典DAO层接口映射文件BasicDicDao,然后创建一个与接口同名的映射文件.再次,实现Service层,创建数据字典和用户的Service层接口,并创建这两个接口对应的实现类BaseDicServiceImpl和UserServiceImpl.最后,实现Controller层,在edu.czw.core.web.controller包中,创建用户控制器类UserController.其中,引入分页标签文件Page.java用于实现分页,部分代码如下:
try {
// 计算总页数
int pageCount = page.getTotal() / page.getSize();
if (page.getTotal() % page.getSize() > 0) {
pageCount++;
}
writer.print("
String homeUrl = append(url,"page",1);
String backUrl = append(url,"page",pageCount);
// 显示“上一页”按钮
if (page.getPage() > 1) {
String preUrl = append(url,"page",page.getPage() - 1);
preUrl = append(preUrl,"rows",page.getSize());
writer.print("
");writer.print("
");}
// 显示“下一页”按钮
if (page.getPage() < pageCount) {
String nextUrl = append(url,"page",page.getPage()+1);
nextUrl = append(nextUrl,"rows",page.getSize());
writer.print("
");writer.print("
");}
writer.print("");
} catch (IOException e) {
e.printStackTrace();
}
假冒(counterfeit),也称伪装、冒充,是一种欺骗或绕过系统登陆验证的手段.一旦系统被冒充者登陆,就会造成越权侵犯行为,给系统安全和数据信息安全造成威胁.
分析网站页面查找可能的渗透点→发现疑似假冒的弱点→利用该弱点传递/修改参数→获取Key值证实漏洞存在→给出应对措施.
进入页面http://ncd3.zugencd.eqo/dcug1_cd841f990g5c41762fhf82h4g760c7gd/kpfgz.php,发现Cookies中有一个键值是Login=0,怀疑是可以用于假冒渗透测试的弱点,传递或修改参数Login=1,由此思路编写脚本进行渗透:
import requests
ym= ' http://ncd3.zugencd.eqo/dcug1_cd841f990g5c41762fhf82h4g760c7gd/kpfgz.php'
r = requests.post(ym,cookies={"Login":"1"})
r.encoding = 'utf8'
print(r.text)
运行上述脚本,得到Key值证实存在安全漏洞,如图3.
图3 渗透得到Key
用户可通过IE浏览器“隐私”选项,将隐私设置为完全禁止以阻止Cookie记录信息,也可对网站设置禁止使用Cookies进行编辑,再有就是养成定期清除Cookies的习惯.
综上,使用框架技术在提升设计人员开发Web系统效率的同时,也有助于系统呈现更好的伸缩性、扩展性和可维护性[6].本文运用SSM、Bootstarp、jQuery等技术,面向当前主流的Web渗透测试需要,设计实现了该渗透测试系统的主要功能.