java-sec-code学习之path_traversal
java-sec-code学习之path_traversal
- 前言
- 0x01 从原版java代码分析
- 0x02 官方过滤处理
- 0x03 存在的问题
前言
开始我的java代码审计学习,使用的环境是idea
项目是java-sec-code:https://github.com/JoyChou93/java-sec-code
从java代码审计从零开始的第一更,会从网上找各种资源整合学习
0x01 从原版java代码分析
进入controller文件
/src/main/java/org/joychou/controller/PathTraversal.java
在PathTraversal类前面我们可以看到有一个@RestController注解
他是Sring中的一种注解,@RestController的作用等同于@Controller + @ResponseBody。
先来看@Controller注解:它是声明该类是一个控制器类,也就是我们常说的MVC框架中的C,一般在控制器类下面还需要加一个@RequestMapping注解,用来映射不同的请求,比如GET,POST等。
@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/users",method= RequestMethod.GET)public String users() {return "users";}}
// 此时请求users方法的url路径就是:.../user/users
// 此时请求users方法的url路径就是:…/user/users
@ResponseBody注解是将相应的返回值以指定的格式返回给http response,一般是返回JSON格式,不加这个注解的话只能进行跳转。很麻烦,所以Spring4之后加了新的注解@RestController
来看原版的文件穿越代码
我们使用的是windows,工作目录为E:\java-sec-code
我们在工作路径下创建个1.txt可以轻松读取
没有进行对文件路径过滤的,在linux下我们就可以进行目录穿越,去对非工作目录的内容进行读取,造成数据泄露。
http://localhost:8080/path_traversal/vul?filepath=…/…/…/…/…/etc/passwd
因此我们来看官方的过滤处理。
0x02 官方过滤处理
可以看到加了一个条件判断,我们跟进。
先对路径进行url解码,以防url编码绕过下面的过滤条件,再对url路径进行判断,若是存在 … 或者路径首字符为 / 则被禁止读取
测试如下
从根源上解决了Linux系统路径穿越问题。
0x03 存在的问题
如果是拿windows复现的小伙伴就很容易发现,windows的盘符首字母一般不是/,若是直接给他个绝对路径,还是可以读取出来的
所以还是多添加几个条件吧。
ref : midi
java-sec-code学习之path_traversal相关推荐
- [转]java.lang.instrument 学习(一)
[转]java.lang.instrument 学习(一) 收藏 sunyh 发表于 10个月前 阅读 40 收藏 3 点赞 1 评论 0 转自:http://jiangbo.me/blog/201 ...
- Java IO流学习总结二:File
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54581478 本文出自[赵彦军的博客] Java IO流学习总结一:输入输出流 J ...
- 20165235 Java第一周学习总结
(# 20165235 Java第一周学习总结 Ubuntu下git的安装与使用 首先Ubuntu下git的安装,使用sudo apt-get install git下载Ubuntu,下载完成后可以用 ...
- Java 8 实战学习笔记
Java 8 实战学习笔记 @(JAVASE)[java8, 实战, lambda] 文章目录 Java 8 实战学习笔记 参考内容 Lambda表达式 Lambda环绕执行模式(抽离步骤) 原始代码 ...
- 保存ResultSet中的数据(Java Source Code)
当我们在编写程序的时候,免不了要与数据库打交道,相信ResultSet大家也并不陌生,从数据库读取的数据将会存入其中. 操作结束关闭数据库连接以及ResultSet,否则保持数据库的连接并直接对Res ...
- 【Java Web开发学习】Spring MVC 拦截器HandlerInterceptor
[Java Web开发学习]Spring MVC 拦截器HandlerInterceptor 转载:https://www.cnblogs.com/yangchongxing/p/9324119.ht ...
- Java云同桌学习系列(十五)——MySQL数据库
本博客java云同桌学习系列,旨在记录本人学习java的过程,并与大家分享,对于想学习java的同学,我希望这个系列能够鼓励大家一同与我学习java,成为"云同桌". 每月预计保持 ...
- Java基础 快速学习(一)
注意:本系列博客是在作者已经有一年多的C++经验的基础上学习Java的个人总结,可能并不适合所有看到这篇博客的人. 一.数据类型 1.整数:byte,short,int,long 分别对应1,2,4 ...
- java和Android学习书籍
java书籍推荐: 入门 <Head First Java, 2nd Edition(中文版)> 这本书不仅内容丰富.有趣且通俗易懂,并且涵盖了所有 Java 相关的基础知识.如果你是 J ...
最新文章
- 鸿蒙操作系统在使用了吗,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可
!【手机吧】_百度贴吧...
- 结构控制Switch Case
- 02 - Unit06:弹出对话框
- 在.NET Core 中收集数据的几种方式
- java事件类_关于Java事件类的一些思考
- CSS Grid 网格布局教程
- 替换 Nginx 使用 Caddy 作为博客静态服务器
- 蓝桥杯评分标准_新闻 | 人工智能学院创新创业实践中心开展蓝桥杯国赛经验分享会...
- C# Sql 触发器
- 基于MATLAB的车牌识别实现
- 省市县GDP、地级市三大产业产值数据、农业GDP相关数据
- 信息系统项目管理知识记忆口诀-总结
- java 菱形_java空心菱形
- 计算机中的随机存储器和只读存储器是什么,只读存储器和随机存储器的主要区别是什么...
- java海贼王秘宝传说下载_海贼王秘宝传说攻略 星月岛任务详解一览
- java商城答辩_毕业答辩-基于Java的网上购物商城的设计与实现.ppt
- 尚硅谷李立超老师讲解web前端---笔记(持续更新)
- 企业邮箱登录入口和界面如何设置
- new UI-布局之LinearLayout(线性布局)详解
- c语言中max代表什么,什么是C中的DBL_MAX?
热门文章
- Buuctf --hellow world
- java-unrar-0.3.jar_java-unrar-0.3.jar解压
- matlab 曲线数据输出,Mathlab 如何输出曲线各数据点值?
- 金多多配资盘面预测收益大于风险
- 淘宝装修之模块之间有间隙(淘宝装修一)
- Qt setStyleSheet 透明图片叠加
- 解决Xcode真机测试时ineligible devices的问题
- Scala学习笔记(三)类层级和特质
- 【千纸诗书】—— PHP/MySQL二手书网站后台开发之项目设计
- 《网络是怎样连接的》-----户根勤,读书笔记