首页 > 作文

java分布式基于RestTemplate的使用方法

更新时间:2023-04-05 02:06:28 阅读: 评论:0

1.前言

最近在接触到分布式方面知识的时候,学习了resttemplate的一些使用。resttemplate比较常见的就是用来进行一些http请求。本人在使用之后,在语法简洁的同时,感觉非常的方便。

于是乎空间背景大图在后面就想到了,通过resttemplate来做成在线的”武器库”,会不会更方便呢。因为springboot开发本来就比较简单,而且在后期进行一些团队协作的时候,用在线的平台是不是相对于团队更方便?避免了因为环境不一致而造成的问题。

2.resttemplate get请求及传参

2.1正常get请求不带参

首先来用一下正常不带参的请求,既然要使用resttemplate,那么肯定首先要new出来。之后使用rest.exchange进行请求。

exchange参数说明如下:

类型说明url请求路径method请求的方法(get、post、put等)requestentityhttpentity对象,封装了请求头和请求体respontype返回数据类型urivariables支持pathvariable类型的数据。

参数1,2不做过多讲解,参数3的话,在初始化httpentity的时候,就可以传入一个自定义的headers。

所以提前通过httpheaders headers = new httpheaders();

进行设置headers并传入即可。

在上方的代码中,请求的是一个php文件,而该php文件非常简单,只是打印出ur_agent。

在打印出ur_agent之后,responentit高中题目y res这儿就接收到了回显信息,最后在通过res.getbody();成功获取到页面的回显数据

2.2 get请求带参使用

了解完上面的无参get请求之后,接下来了解一下如何传参?

是不是感觉有点枯燥了?为此加了点ctf元素。代码如下,只有当用户传参符合第四行的if判断,才会进行输出正确的flag

传参方式:

这种也是最为常见的一种,就是使用参数接收,是不是感觉和上方无参get方式的代码非常相似?下方形参agent和value就是在网页中的参数名(ps:学过springboot的小伙伴应该都知道)。之后将agent设置到headers里面,而value进行了拼接到**t.php?value=**后面进行当做参数值传入

最后进行测试一下,成功进行传参获取到了“flag”

2.3 编写在线目录扫描脚本

既然玩转了get请求之后,那就来做一个目录扫描的小功能吧。毕竟学以致用。

整体实现流程如下,采用springboot,并整合mybatis。这里没有写rvice层,因为毕竟都是初步实现而已。

而最为显著的一个优点就是:站点目录都会存入到数据库中,这就在后期发展中避免了字典少,不够用的问题。因为团队成员都可以将自己的字典存入到该数据库中。

首先准备好数据库和一些”字典”,测试阶段,本人自己就手动添加了几个。后续如果字典庞大,可自己写个小脚本导入到数据库即可。

数据库准备好之后,就可以进行整合mybatis了。这里pom文件需要加载mybatis和mysql的依赖。

目录结构如下:一个controller,一个mapper和xml配置文件,以及一个用来存储的类

application主配置文件,主要用来写一些数据库配置

mapper代码如下,记得要加上@mapper注解

mapper.xml配置,用来查询数据库中的 “字典”

既然配置好之后,那就开始实现重要功能点了!代码简单讲解一下:首先通过@autowired把mapper自动注入。

之后 list<catalogue> list = mulumapper.lectall();

会到mapper.xml中执行lect查询语句,并将其保存到list集合中。最后到for循环中进行循环遍历过程中,将url与获取的数据库中的name字段内容拼接保存到temp这个临时变量。

举个例子:

用户输入url为http://127.0.0.1

name字段第一个内容为:admin

那么最终 temp=http://127.0.0.1/admin

拼接完成之后,通过exchange访问,最终res.getstatuscodevalue()获取响应码,为200的话,就判定该文件存在。(ps:这里判断的比较潦草,比如403等情况没有进行判断)

看一下最终成品吧,成功实现一款简易的在线web目录扫描

3.resttemplate post请求

3.1 post请求玩法

有了上面的思路之后,post也类似。那么为了防止大家感觉枯燥,继续来玩这道”ctf”

php的代码没有太大变动,只是请求换成了post

resttemplate代码如下:传参将agent设置到headers里面,而value添加到了linkedmultivaluemap中,可以理解为这个linkedmultivaluemap就是用来存储post要提交的数据,而最后这个稍作不同的是,用的resttemplate.postforentity()进衢州学院是几本行post提交数据即可,与get是非常类似的。

最后传参即可,dong的一下,“flag”也就出现了

3.2 mongo-express 远程代码执行漏洞脚本编写

靶场安装直接去vulhub下载即可。安装过程很简单,启动之后

漏洞利用过程更为简单execsync中输入要执行的命令即可。返回valid表示执行成功了。

之后前往docker查看即可,发现成功创建1.txt

接下来编写利用脚本

先准备一个比较丑的前端页面,存到static目录中,这是springboot默认存放静态资源的地方。

controller编写思路,首先可以看到action提交到了exec,所以requestmapping写成exec即可,参数的话,一个url用来接收url地址的,一个command用来接收命令。

完整controller如下,笔者带你进一步分析:在parammap.add语句中,可以看到对输入进来command进行了拼接,开眼角的后遗症假设笔者这里输入的为“ls”,从而构成了如下数据

document=this.constructor.constructor(“return process”)().mainmodule.require(“child_process”).execsync(“ls”)

最后使用的exchange方法进行的post提交,提交的url为笔者传入的,而command传入并拼接进去之后,数据最终存到了httpentity中,,而这里的参数就不做过多讲解,因为有了前面的基础,应该都能一看懂什么意思。

最终测试过程,编写脚本利用成功

4.结尾

在进行内部团队协作的时候,后期效率确实是可以提升,同时也提升了自己的代码水平~。

以上就是基于resttemplate的在线武器库的详细内容,更多关于resttemplate的在线武器库的资料请关注ww毕业赠言阅读答案w.887551.com其它相关文章!

本文发布于:2023-04-05 02:06:24,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/9313eff2927c20aab7536595957cbfd5.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:java分布式基于RestTemplate的使用方法.doc

本文 PDF 下载地址:java分布式基于RestTemplate的使用方法.pdf

标签:在线   代码   参数   武器库
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图