美文网首页
集成openRASP与攻击测试

集成openRASP与攻击测试

作者: 虫儿飞ZLEI | 来源:发表于2019-03-17 13:06 被阅读0次

1.介绍

openRASP是一个百度的安全框架,将其集成到我们的web项目中,就像是给web项目安装了一款“安全管家”的软件,它可以检测到攻击,并进行拦截。

更多详细的说明可以参考官方文档:https://rasp.baidu.com/doc/

2.集成openRASP到项目中

openRASP针对不同的服务器,提供了不同的安装方法,但是基本上都大同小异,本文以SpringBoot为例,springboot又可以打成jar包或者war包,本项目使用jar包部署,演示如何将openRASP集成到SpringBoot项目中。

2.1 下载压缩文件

下载地址:https://github.com/baidu/openrasp/releases

2.2 解压并复制文件

将上面下载的压缩包,解压,将其中的rasp文件复制到jar包的同级目录中
ps:复制文件夹命令:cp -R


image.png

修改rasp目录的权限
命令:chmod 777 -R rasp

2.3 配置启动参数

ps:添加配置参数时,指定了rasp-log4j.xml 文件,这是启动时自动生成的,无需创建。

如果是直接java -jar启动jar包

直接追加启动参数:

java -javaagent:"/weblogic/app/deploy/jcpt/rasp/rasp.jar" -Dlog4j.rasp.configuration="file:///weblogic/app/deploy/jcpt/rasp/conf/rasp-log4j.xml"  -jar jcpt.jar

本项目是jenkins部署,利用shell脚本启动jar包,所以需要修改shell脚本内容,添加启动参数

找到对应的shell脚本位置(本项目shell位置:/weblogic/shell/),编辑脚本,添加配置参数


2.4 重启springboot项目,并验证是否安装openRASP成功

本项目使用jenkins部署,重启项目,需要重新build


image.png

验证是否安装成功有两点:
一:查看rasp的log:/rasp/logs/rasp/下的log文件,如果出现OpenRASP Engine Initialized 字样,就表示安装成功

二:访问web网站,检查响应的 Header 是否包含 X-Protected-By 字样,有就表示安装成功


到此为止,就已经将openRASP集成到了项目中

3.安装管理后台

安装管理后台以后,可以在图形化的界面查看openRASP信息,比如拦截情况等等。

3.1 安装 ElasticSearchMongoDB

管理后台依赖ElasticSearch和MongoDB才可以正常运行。
并且还有版本要求:
MongoDB >= 3.6
ElasticSearch >= 5.6

3.2 下载管理后台

下载地址:https://github.com/baidu/openrasp/releases

解压至任意服务器任意目录(后台管理的服务器和项目运行的服务器能联通)
本例中解压到:机器的/opt/rasp-cloud-2019-01-04/


image.png

3.3 配置并启动管理后台

image.png

启动后台管理:


./rasp-cloud -d

3.4 访问后台管理页面

http://ip:8086
默认的用户名密码是:openrasp/admin@123

默认有一个php示例应用

4 将管理后台和项目连接起来

4.1 在管理后台创建应用

在此添加一个Java应用


4.2 添加主机

获取到这三个数据

4.3 将上述三个数据配置到rasp的配置中

/rasp/conf/下面(是springboot项目的rasp的conf,不是后台管理的conf)


image.png

4.4 重启springboot项目,检测后台管理页面是否可以查看到对应的主机

image.png

到此,后台管理也搭建完成

5. 攻击测试

openRASP是安全框架,在这里就使用sqlmap进行sql注入攻击,来查看openRASP是否有效果,关于sqlmap的使用,可以查看本人另一篇文章,地址是:https://www.jianshu.com/p/3d3656be3c60
但是由于项目中的代码并没有sql可以注入的地方,所以本人故意在项目中添加一个拥有sql漏洞的接口,用于检测openRASP是否可以拦截到

5.1 包含sql漏洞的接口代码

package com.base.web.aisino.web;

import com.alibaba.fastjson.JSONObject;
import com.base.web.common.base.ApiResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;

import java.sql.*;

/**
 * @author ah.zhanglei3@aisino.com
 * @ClassName
 * @Description 测试OpenRasp
 * @Date 18:42 2019/3/16
 */
@RestController
@RequestMapping("/test")
public class TestOpenRaspWebService {
    private final Logger logger = LoggerFactory.getLogger(TestOpenRaspWebService.class);
    private String resultSetString1;
    private String resultSetString2;
    private String resultSetString3;
    private String resultSetString4;

    @PostMapping("/openrasp")
    public ApiResponse getRecidDateData(@RequestParam("userId") String userId) throws ClassNotFoundException, SQLException {

        logger.info("请求->测试opensasp->输入参数【userId:"+userId+"】");
        //1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2.获取链接
        Connection connection = DriverManager.getConnection("jdbc:mysql://192.168.202.162:3306/jcpt?useUnicode=true&characterEncoding=utf8", "root", "ybf5mysql");

        //3.创建执行sql语句的对象
        Statement statement = connection.createStatement();

        //4.sql语句
        String sql = "select * from sys_user where user_id= "+userId+";";

        //5.执行sql语句
        ResultSet resultSet = statement.executeQuery(sql);
        //6.对结果集进行处理
        if(resultSet.next()){
            logger.info("取值成功");
            //获取第一列和第二列的值,不是从0开始
            resultSetString1 = resultSet.getString(1);
            resultSetString2 = resultSet.getString(2);
            resultSetString3 = resultSet.getString(3);
            resultSetString4 = resultSet.getString(4);
            logger.info(resultSetString1+"--"+resultSetString2+"--"+resultSetString3+"--"+resultSetString4);
        }else {
            logger.info("取值失败");
        }

        //7.关闭
        if (resultSet != null){
            resultSet.close();
        }
        if (statement != null){
            statement.close();
        }
        if (connection != null){
            connection.close();
        }

        JSONObject jsonObject = new JSONObject(16);
        jsonObject.put("data",resultSetString1+"--"+resultSetString2+"--"+resultSetString3+"--"+resultSetString4);
        logger.info("数据库返回结果->测试opensasp->返回结果参数【result:"+jsonObject+"】");
        return ApiResponse.ofSuccess(jsonObject);
    }
}

5.2 sqlmap攻击本地没有集成openRASP的代码

执行sqlmap:

python2 sqlmap.py -u "http://localhost:9099/test/openrasp?userId=1" --cookie="JSESSIONID=d8f4209e-848b-405c-8986-907c4de6d984" --method=POST

sqlmap顺利的找到了漏洞:


现在尝试利用这个漏洞获取一些数据库的信息

获取数据库名:
python2 sqlmap.py -u "http://localhost:9099/test/openrasp?userId=1" --cookie="JSESSIONID=d8f4209e-848b-405c-8986-907c4de6d984" --method=POST --dbs

获取数据库的表名:
python2 sqlmap.py -u "http://localhost:9099/test/openrasp?userId=1" --cookie="JSESSIONID=d8f4209e-848b-405c-8986-907c4de6d984" --method=POST -D jcpt --tables
image.png
获取数据库jcpt的sys_user表的列名:
python2 sqlmap.py -u "http://localhost:9099/test/openrasp?userId=1" --cookie="JSESSIONID=d8f4209e-848b-405c-8986-907c4de6d984" --method=POST -D jcpt -T sys_user --columns

可以看到,sqlmap可以通过注入拿到一些数据库的信息

5.3 sqlmap攻击集成了openRASP的代码

执行sqlmap:

python2 sqlmap.py -u "ip:9099/test/openrasp?userId=1" --cookie="JSESSIONID=95571903-b864-4ef7-8c22-d52fe3203e8a" --method=POST

这时sqlmap就找不到注入点了:


同时查看网站日志,可以看到,sqlmap的攻击行为都被openRASP拦截了


最后查看openRASP后台管理页面
可以看到,openRASP的拦截记录


image.png

6. 总结

openRASP的简单使用就是这样,它还有更多的功能,比如大规模部署,SIEM系统集成等。
同时我们还可以对openRASP进行插件开发,二次开发等,定制openRASP的功能。

相关文章

  • 集成openRASP与攻击测试

    1.介绍 openRASP是一个百度的安全框架,将其集成到我们的web项目中,就像是给web项目安装了一款“安全管...

  • 集成测试

    集成测试 基本概念:将软件集成起来后进行测试。集成测试又叫子系统测试、组装测试、部件测试等。集成测试主要是针对软件...

  • 性能测试与持续集成

    目的 将性能测试与持续集成挂接起来 性能测试: JMeter 持续集成: Jenkins JMeter 下载JMe...

  • 网络安全之burp安装

    burp(目前渗透测试的神器) Burp Suite 是用于攻击web 应用程序的集成平台,包含了许多工具。Bur...

  • Brup Suite使用教程

    Burpsuite介绍 一款可以进行再WEB应用程序的集成攻击测试平台。 常用的功能:抓包、重放、爆破 配置代理 ...

  • 系统学习---软件测试的分类

    1.按照测试阶段 单元测试,集成测试,系统测试,验收测试(正式验收测试,Alpha测试,Beta测试) 集成测试-...

  • Burpsuite神器常用功能使用方法总结

    Burpsuite介绍: 一款可以进行再WEB应用程序的集成攻击测试平台。 常用的功能: 抓包、重放、爆破 1.使...

  • 软件测试方法和技术有哪些?

    软件测试方法和技术有哪些?包括软件测试基础、软件测试方法、软件测试流程和规范、单元测试与集成测试、系统测试、验收测...

  • 【吾优测试】互联网测试信息一周精华速递(2017.8.7 - 2

    [测试技术] Jenkins & Docker 持续集成实践这一篇关于Jenkins 与 Docker 的持续集成...

  • 契约测试

    业界认为应该让契约测试来替代集成测试。认为你写的2-5%的集成测试和单元测试有重复,或者和其它地方的集成测试存在重...

网友评论

      本文标题:集成openRASP与攻击测试

      本文链接:https://www.haomeiwen.com/subject/fvwemqtx.html