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相关推荐

  1. [转]java.lang.instrument 学习(一)

    [转]java.lang.instrument 学习(一)  收藏 sunyh 发表于 10个月前 阅读 40 收藏 3 点赞 1 评论 0 转自:http://jiangbo.me/blog/201 ...

  2. Java IO流学习总结二:File

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54581478 本文出自[赵彦军的博客] Java IO流学习总结一:输入输出流 J ...

  3. 20165235 Java第一周学习总结

    (# 20165235 Java第一周学习总结 Ubuntu下git的安装与使用 首先Ubuntu下git的安装,使用sudo apt-get install git下载Ubuntu,下载完成后可以用 ...

  4. Java 8 实战学习笔记

    Java 8 实战学习笔记 @(JAVASE)[java8, 实战, lambda] 文章目录 Java 8 实战学习笔记 参考内容 Lambda表达式 Lambda环绕执行模式(抽离步骤) 原始代码 ...

  5. 保存ResultSet中的数据(Java Source Code)

    当我们在编写程序的时候,免不了要与数据库打交道,相信ResultSet大家也并不陌生,从数据库读取的数据将会存入其中. 操作结束关闭数据库连接以及ResultSet,否则保持数据库的连接并直接对Res ...

  6. 【Java Web开发学习】Spring MVC 拦截器HandlerInterceptor

    [Java Web开发学习]Spring MVC 拦截器HandlerInterceptor 转载:https://www.cnblogs.com/yangchongxing/p/9324119.ht ...

  7. Java云同桌学习系列(十五)——MySQL数据库

    本博客java云同桌学习系列,旨在记录本人学习java的过程,并与大家分享,对于想学习java的同学,我希望这个系列能够鼓励大家一同与我学习java,成为"云同桌". 每月预计保持 ...

  8. Java基础 快速学习(一)

    注意:本系列博客是在作者已经有一年多的C++经验的基础上学习Java的个人总结,可能并不适合所有看到这篇博客的人. 一.数据类型 1.整数:byte,short,int,long  分别对应1,2,4 ...

  9. java和Android学习书籍

    java书籍推荐: 入门 <Head First Java, 2nd Edition(中文版)> 这本书不仅内容丰富.有趣且通俗易懂,并且涵盖了所有 Java 相关的基础知识.如果你是 J ...

最新文章

  1. 鸿蒙操作系统在使用了吗,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可 !【手机吧】_百度贴吧...
  2. 结构控制Switch Case
  3. 02 - Unit06:弹出对话框
  4. 在.NET Core 中收集数据的几种方式
  5. java事件类_关于Java事件类的一些思考
  6. CSS Grid 网格布局教程
  7. 替换 Nginx 使用 Caddy 作为博客静态服务器
  8. 蓝桥杯评分标准_新闻 | 人工智能学院创新创业实践中心开展蓝桥杯国赛经验分享会...
  9. C# Sql 触发器
  10. 基于MATLAB的车牌识别实现
  11. 省市县GDP、地级市三大产业产值数据、农业GDP相关数据
  12. 信息系统项目管理知识记忆口诀-总结
  13. java 菱形_java空心菱形
  14. 计算机中的随机存储器和只读存储器是什么,只读存储器和随机存储器的主要区别是什么...
  15. java海贼王秘宝传说下载_海贼王秘宝传说攻略 星月岛任务详解一览
  16. java商城答辩_毕业答辩-基于Java的网上购物商城的设计与实现.ppt
  17. 尚硅谷李立超老师讲解web前端---笔记(持续更新)
  18. 企业邮箱登录入口和界面如何设置
  19. new UI-布局之LinearLayout(线性布局)详解
  20. c语言中max代表什么,什么是C中的DBL_MAX?

热门文章

  1. Buuctf --hellow world
  2. java-unrar-0.3.jar_java-unrar-0.3.jar解压
  3. matlab 曲线数据输出,Mathlab 如何输出曲线各数据点值?
  4. 金多多配资盘面预测收益大于风险
  5. 淘宝装修之模块之间有间隙(淘宝装修一)
  6. Qt setStyleSheet 透明图片叠加
  7. 解决Xcode真机测试时ineligible devices的问题
  8. Scala学习笔记(三)类层级和特质
  9. 【千纸诗书】—— PHP/MySQL二手书网站后台开发之项目设计
  10. 《网络是怎样连接的》-----户根勤,读书笔记