linux环境OpenRASP使用教程,集成openRASP与攻击测试

1.介绍

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

2.集成openRASP到项目中

98c102192537?tdsourcetag=s_pcqq_aiomsg

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

2.1 下载压缩文件

98c102192537?tdsourcetag=s_pcqq_aiomsg

2.2 解压并复制文件

将上面下载的压缩包,解压,将其中的rasp文件复制到jar包的同级目录中

ps:复制文件夹命令:cp -R

98c102192537?tdsourcetag=s_pcqq_aiomsg

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/),编辑脚本,添加配置参数

98c102192537?tdsourcetag=s_pcqq_aiomsg

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

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

98c102192537?tdsourcetag=s_pcqq_aiomsg

image.png

验证是否安装成功有两点:

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

98c102192537?tdsourcetag=s_pcqq_aiomsg

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

98c102192537?tdsourcetag=s_pcqq_aiomsg

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

3.安装管理后台

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

管理后台依赖ElasticSearch和MongoDB才可以正常运行。

并且还有版本要求:

MongoDB >= 3.6

ElasticSearch >= 5.6

3.2 下载管理后台

98c102192537?tdsourcetag=s_pcqq_aiomsg

解压至任意服务器任意目录(后台管理的服务器和项目运行的服务器能联通)

本例中解压到:机器的/opt/rasp-cloud-2019-01-04/

98c102192537?tdsourcetag=s_pcqq_aiomsg

image.png

3.3 配置并启动管理后台

98c102192537?tdsourcetag=s_pcqq_aiomsg

image.png

启动后台管理:

98c102192537?tdsourcetag=s_pcqq_aiomsg

./rasp-cloud -d

3.4 访问后台管理页面

http://ip:8086

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

98c102192537?tdsourcetag=s_pcqq_aiomsg

默认有一个php示例应用

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

4.1 在管理后台创建应用

在此添加一个Java应用

98c102192537?tdsourcetag=s_pcqq_aiomsg

4.2 添加主机

98c102192537?tdsourcetag=s_pcqq_aiomsg

获取到这三个数据

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

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

98c102192537?tdsourcetag=s_pcqq_aiomsg

image.png

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

98c102192537?tdsourcetag=s_pcqq_aiomsg

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顺利的找到了漏洞:

98c102192537?tdsourcetag=s_pcqq_aiomsg

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

获取数据库名:

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

98c102192537?tdsourcetag=s_pcqq_aiomsg

获取数据库的表名:

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

98c102192537?tdsourcetag=s_pcqq_aiomsg

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

98c102192537?tdsourcetag=s_pcqq_aiomsg

可以看到,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就找不到注入点了:

98c102192537?tdsourcetag=s_pcqq_aiomsg

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

98c102192537?tdsourcetag=s_pcqq_aiomsg

最后查看openRASP后台管理页面

可以看到,openRASP的拦截记录

98c102192537?tdsourcetag=s_pcqq_aiomsg

image.png

6. 总结

openRASP的简单使用就是这样,它还有更多的功能,比如大规模部署,SIEM系统集成等。

同时我们还可以对openRASP进行插件开发,二次开发等,定制openRASP的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539899.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]

一、截图和示例共用Ext.FormPanel1.1  截图由于本文主要关注的是表单提交的几种方式&#xff0c;所以仅用了一个表单项以便于测试和减少示例代码。1.2  示例共用Ext.FormPanel <script type"text/javascript">Ext.onReady(function() { Ext.Qui…

struts2访问jsp页面404

问题描述 在搭建struts2环境的时候&#xff0c;拷贝了web.xml&#xff0c;拷贝了struts.xml&#xff0c;拷贝了jar包。运行&#xff0c;正常&#xff0c;访问jsp页面&#xff0c;报404错误。 web.xml <?xml version"1.0" encoding"UTF-8"?> <w…

centos7定制linux镜像,自定制Centos7.3系统镜像(ISO)

本文主要介绍如何根据官方的Centos镜像文件&#xff0c;在保留原有默认安装的RPM包的基础下&#xff0c;添加自己所需要的RPM包的&#xff0c;最终生成一个自定制版的ISO&#xff0c;节省了宝贵的时间并确保了安装的定制性。对于其他没有介绍的修改&#xff0c;后续在实践中会进…

调用打开另外一个APK

2019独角兽企业重金招聘Python工程师标准>>> Intent mIntent new Intent(); mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ComponentName comp new ComponentName("com.mm.android.direct.gdmssphoneLite", "com.mm.android.direct.gdmsspho…

Jquery Mobile dialog的生命周期

JQuery Mobile对htm5的移动开发绝对是个好用的东西&#xff0c;今天简单谈谈JQuery Mobile中的dialog的使用。 1.对话框的弹出。 2.对话框的生命周期。 3.对话框内事件的注册。 1&#xff09;第一个问题&#xff1a;对话框的弹出。 如果要弹出一个对话框&#xff0c;可以在页面…

c语言源程序最多可能由组成,一个C语言源程序由若干函数组成,其中至少应含有一个()。...

个C语言源由I am interested in the training course, which _____ at Hilton Hotel in Beijing from March 8 to 12, 2018.程序成“万物莫不有对”体现了中国传统哲学的矛盾观。用户在进行产品的三维设计时&#xff0c;干函可以采用以下( )的设计方法。数组少意识是人脑对客观…

Citrix Netscaler版本管理和选择

Citrix Netscaler版本管理和选择 来源 http://blog.51cto.com/caojin/1898164 随着Citrix Netscaler的快速发展&#xff0c;有很多人在维护设备时经常搞不懂Netscaler软件版本是如何查看和选择&#xff0c;当前软件是否需要升级&#xff0c;当前软件是否稳定等。基于以上问题&a…

oracle实例与数据库

一、名称 Oracle数据库服务器。单叫数据库或服务器都不全面。 二、组成 oracle数据库服务器由二部份组成&#xff1a;实例和数据库 实例&#xff1a; 可理解为对象&#xff0c;看不见。数据库&#xff1a; 理解为类&#xff0c;看得见的&#xff0c;E:\app\Administrator\…

WEB前端面试题汇总整理01

1.JS找字符串中出现最多的字符 例如&#xff1a;求字符串nininihaoa中出现次数最多字符 var str "nininihaoa"; var o {}; for (var i 0, length str.length; i < length; i) {var char str.charAt(i);if (o[char]) {o[char]; //次数加1} else {o[char] 1;…

c语言 文件游程统计,游程 码表 如何形成

游程 码表 如何形成求一个程序 将下表用huffman 树存储表示用传统的霍夫曼建立的树 好像不能形成此码表。我感觉应该有一个特等的算法。我也试了好几种方法&#xff0c;感觉都不行&#xff0c;希望大家给点建议。(码表 要利于编码和解码)(部分码表)白游程 码子 黑游程 码子(长…

2.ORM思想

一、ORM思想介绍 orm是一种思想&#xff0c;是dao层代码的一种编写思想。其中&#xff1a;o代表Object&#xff0c;java对象&#xff1b;r代表Relation&#xff0c;关系型数据库&#xff1b;m代表Map&#xff0c;java对象和关系型数据库表的映射关系。该思想主张&#xff1a;1、…

android 字体颜色选择,Android中颜色选择器和改变字体颜色的实例教程

易采站长站为您分析Android中颜色选择器和改变字体颜色的实例教程,其中改变字体颜色用到了ColorPicker颜色选择器,需要的朋友可以参考下1.构建一张七彩图:我们经常看到这种样子的颜色选择器吧..然后其实右边的亮度选择是:这样我们的代码就可以进行啦...// 创建七彩图片private …

新版vue-cli搭建多页面应用

2019独角兽企业重金招聘Python工程师标准>>> 折腾了好久&#xff0c;终于把坑踩完了&#xff0c;废话不多说&#xff0c;上教程~ github地址&#xff1a;https://github.com/guolihuaGitHub/vue-cli-multipage 另外推荐一下我另一篇博客&#xff0c;我觉得这篇好用&…

2017 Google 开发者大会直播入口

今年&#xff0c;Google 开发者大会再度来袭&#xff01;大会将于 12 月 13 日和 14 日在上海举办&#xff0c;主题涵盖机器学习 (Machine Learning)、Android、移动网络&#xff08;Mobile Web)、TensorFlow、Firebase、云服务 (Cloud)、AR/VR、设计 (Design) 以及更多开发者相…

日志组件slf4j介绍及配置详解

2019独角兽企业重金招聘Python工程师标准>>> 原文出自 1 基本介绍 每一个Java程序员都知道日志对于任何一个Java应用程序尤其是服务端程序是至关重要的&#xff0c;而很多程序员也已经熟悉各种不同的日志库&#xff0c;如java.util.logging、Apache log4j、logback。…

count(*),count(1),count(0)效率

网上文章很多&#xff0c;今天分别跑了一张2000多万行的表&#xff0c;该表没有主键&#xff0c;索引&#xff0c;约束条件。 结果是&#xff0c;效率差不多

android 转场动画兼容问题,【Android】关于ARouter转场动画的问题

实现从主页跳转到搜索页&#xff0c;再从搜索页回退主页withTransition(int resId,int resId)这个方法两个参数第一个的意思是&#xff0c; A 到 B&#xff0c; B 的入场动画第二个的意思是&#xff0c;A 到 B&#xff0c; A 的出场动画即&#xff0c;入场动画&#xff0c;出场…

react不同环境不同配置angular_叫雨山斗鸡优势在哪里,环境不同,价值不同

叫雨山斗鸡优势在哪里&#xff0c;环境不同&#xff0c;价值不同 原生态高端食材网站&#xff0c;专注金线莲、散放斗鸡、斗鸡蛋、野生蜂蜜、小耳黑猪肉等云南原生态套餐定制的高端食材供应商。云南叫雨山斗鸡叫雨山斗鸡原生态饲养 叫雨山斗鸡源自于鲁西斗鸡&#xff0c;初代斗…

android studio 布局拖拽,为什么使用android studio不能像老师一样在Design里随意拖动控件...

qq_喷泉_02017-07-25 13:08已采纳xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tools"http://schemas.android.com/tools"android:layout_width"match_parent"android:layout_height"match_parent"tools:context"co…

Oracle自定义函数(不断更新)

1、将数字转为ip地址&#xff1a;IPAdd_DotNumFormat create or replace FUNCTION IPAdd_DotNumFormat(v_LfValue number)return varchar2 asv_DotNumString varchar2(50);v_flg Integer;v_NewLfValue number;v_tmp Integer;v_P1 Integer;v_P2 Integer;v_P3 Integer;v_P4…