linux环境OpenRASP使用教程,集成openRASP与攻击测试
1.介紹
openRASP是一個(gè)百度的安全框架,將其集成到我們的web項(xiàng)目中,就像是給web項(xiàng)目安裝了一款“安全管家”的軟件,它可以檢測到攻擊,并進(jìn)行攔截。
2.集成openRASP到項(xiàng)目中
openRASP針對(duì)不同的服務(wù)器,提供了不同的安裝方法,但是基本上都大同小異,本文以SpringBoot為例,springboot又可以打成jar包或者war包,本項(xiàng)目使用jar包部署,演示如何將openRASP集成到SpringBoot項(xiàng)目中。
2.1 下載壓縮文件
2.2 解壓并復(fù)制文件
將上面下載的壓縮包,解壓,將其中的rasp文件復(fù)制到j(luò)ar包的同級(jí)目錄中
ps:復(fù)制文件夾命令:cp -R
image.png
修改rasp目錄的權(quán)限
命令:chmod 777 -R rasp
2.3 配置啟動(dòng)參數(shù)
ps:添加配置參數(shù)時(shí),指定了rasp-log4j.xml 文件,這是啟動(dòng)時(shí)自動(dòng)生成的,無需創(chuàng)建。
如果是直接java -jar啟動(dòng)jar包
直接追加啟動(dòng)參數(shù):
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
本項(xiàng)目是jenkins部署,利用shell腳本啟動(dòng)jar包,所以需要修改shell腳本內(nèi)容,添加啟動(dòng)參數(shù)
找到對(duì)應(yīng)的shell腳本位置(本項(xiàng)目shell位置:/weblogic/shell/),編輯腳本,添加配置參數(shù)
2.4 重啟springboot項(xiàng)目,并驗(yàn)證是否安裝openRASP成功
本項(xiàng)目使用jenkins部署,重啟項(xiàng)目,需要重新build
image.png
驗(yàn)證是否安裝成功有兩點(diǎn):
一:查看rasp的log:/rasp/logs/rasp/下的log文件,如果出現(xiàn)OpenRASP Engine Initialized 字樣,就表示安裝成功
二:訪問web網(wǎng)站,檢查響應(yīng)的 Header 是否包含 X-Protected-By 字樣,有就表示安裝成功
到此為止,就已經(jīng)將openRASP集成到了項(xiàng)目中
3.安裝管理后臺(tái)
安裝管理后臺(tái)以后,可以在圖形化的界面查看openRASP信息,比如攔截情況等等。
管理后臺(tái)依賴ElasticSearch和MongoDB才可以正常運(yùn)行。
并且還有版本要求:
MongoDB >= 3.6
ElasticSearch >= 5.6
3.2 下載管理后臺(tái)
解壓至任意服務(wù)器任意目錄(后臺(tái)管理的服務(wù)器和項(xiàng)目運(yùn)行的服務(wù)器能聯(lián)通)
本例中解壓到:機(jī)器的/opt/rasp-cloud-2019-01-04/
image.png
3.3 配置并啟動(dòng)管理后臺(tái)
image.png
啟動(dòng)后臺(tái)管理:
./rasp-cloud -d
3.4 訪問后臺(tái)管理頁面
http://ip:8086
默認(rèn)的用戶名密碼是:openrasp/admin@123
默認(rèn)有一個(gè)php示例應(yīng)用
4 將管理后臺(tái)和項(xiàng)目連接起來
4.1 在管理后臺(tái)創(chuàng)建應(yīng)用
在此添加一個(gè)Java應(yīng)用
4.2 添加主機(jī)
獲取到這三個(gè)數(shù)據(jù)
4.3 將上述三個(gè)數(shù)據(jù)配置到rasp的配置中
/rasp/conf/下面(是springboot項(xiàng)目的rasp的conf,不是后臺(tái)管理的conf)
image.png
4.4 重啟springboot項(xiàng)目,檢測后臺(tái)管理頁面是否可以查看到對(duì)應(yīng)的主機(jī)
image.png
到此,后臺(tái)管理也搭建完成
5. 攻擊測試
openRASP是安全框架,在這里就使用sqlmap進(jìn)行sql注入攻擊,來查看openRASP是否有效果,關(guān)于sqlmap的使用,可以查看本人另一篇文章,地址是:https://www.jianshu.com/p/3d3656be3c60
但是由于項(xiàng)目中的代碼并沒有sql可以注入的地方,所以本人故意在項(xiàng)目中添加一個(gè)擁有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("請(qǐng)求->測試opensasp->輸入?yún)?shù)【userId:"+userId+"】");
//1.注冊(cè)驅(qū)動(dòng)
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.創(chuàng)建執(zhí)行sql語句的對(duì)象
Statement statement = connection.createStatement();
//4.sql語句
String sql = "select * from sys_user where user_id= "+userId+";";
//5.執(zhí)行sql語句
ResultSet resultSet = statement.executeQuery(sql);
//6.對(duì)結(jié)果集進(jìn)行處理
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.關(guān)閉
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("數(shù)據(jù)庫返回結(jié)果->測試opensasp->返回結(jié)果參數(shù)【result:"+jsonObject+"】");
return ApiResponse.ofSuccess(jsonObject);
}
}
5.2 sqlmap攻擊本地沒有集成openRASP的代碼
執(zhí)行sqlmap:
python2 sqlmap.py -u "http://localhost:9099/test/openrasp?userId=1" --cookie="JSESSIONID=d8f4209e-848b-405c-8986-907c4de6d984" --method=POST
sqlmap順利的找到了漏洞:
現(xiàn)在嘗試?yán)眠@個(gè)漏洞獲取一些數(shù)據(jù)庫的信息
獲取數(shù)據(jù)庫名:
python2 sqlmap.py -u "http://localhost:9099/test/openrasp?userId=1" --cookie="JSESSIONID=d8f4209e-848b-405c-8986-907c4de6d984" --method=POST --dbs
獲取數(shù)據(jù)庫的表名:
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
獲取數(shù)據(jù)庫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可以通過注入拿到一些數(shù)據(jù)庫的信息
5.3 sqlmap攻擊集成了openRASP的代碼
執(zhí)行sqlmap:
python2 sqlmap.py -u "ip:9099/test/openrasp?userId=1" --cookie="JSESSIONID=95571903-b864-4ef7-8c22-d52fe3203e8a" --method=POST
這時(shí)sqlmap就找不到注入點(diǎn)了:
同時(shí)查看網(wǎng)站日志,可以看到,sqlmap的攻擊行為都被openRASP攔截了
最后查看openRASP后臺(tái)管理頁面
可以看到,openRASP的攔截記錄
image.png
6. 總結(jié)
openRASP的簡單使用就是這樣,它還有更多的功能,比如大規(guī)模部署,SIEM系統(tǒng)集成等。
同時(shí)我們還可以對(duì)openRASP進(jìn)行插件開發(fā),二次開發(fā)等,定制openRASP的功能。
總結(jié)
以上是生活随笔為你收集整理的linux环境OpenRASP使用教程,集成openRASP与攻击测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转载] Java获取一个类继承的父类或
- 下一篇: [转载] 2020最新Java面试题,常