Java代码审计中的其他漏洞
java代码审计中的其他漏洞
目录穿越漏洞(任意文件下载/读取)
出自:Java代码审计之目录穿越(任意文件下载/读取) - chm0d的安全避风港 - 博客园
此漏洞一般配合文件操作进行使用
什么是目录穿越
所谓的目录穿越指利用操作系统中的文件系统对目录的表示。在文件系统路径中,”..”表示上一级目录,当你使用”../“时,你正在引用当前目录的上一级目录。如果你使用”../../“,你实际上在两次”..”的基础上,再次引用上一级目录,从而返回到上两级目录。
例子:假设你目前所在目录为:C:\Windows\System32\drivers\etc
- 使用”../“ 一次返回上一级目录,即:C:\Windows\System32\drivers
- 使用”../../“ 一次返回上一级目录,即:C:\Windows\System32
这是因为在文件系统路径中,每个”..”都表示回到上一级目录。所以多个连续的”..”会连续返回到更高级别的目录。然而在漏洞利用中Windows和Linux系统会有区别,后续漏洞利用中会提到。
目录穿越漏洞成因
目录穿越漏洞,也叫做目录遍历/路径遍历漏洞。常发生于文件上传,文件下载,文件下载等处。由于后端直接接收前端传过来的文件名或路径,没有对其进行检测与过滤,导致攻击者利用../的方式进行目录穿越,达到任意文件读取/下载,任意文件删除,或将任意文件上传到指定目录等。
目录穿越漏洞的利用
Windows中目录穿越漏洞由于操作系统可能导致只能在设定好的盘符下进行穿越,不能越过其他盘符读取,如:读取日志文件,后端代码F:/wwwroot/logs + “前端传递的文件名”。此时通过../进行目录穿越只能在F盘下进行读取,不能读取F盘以外的任何文件,如:C:\windows\win.ini。而Linux中却不受到这种限制,只要有足够的权限可以读任意目录下的文件。
一般目录穿越导致的主要为任意文件读取,一般都是读取配置文件,因为配置文件中保存着大量敏感信息,如:各种数据库连接地址与账号密码
代码实例
1 | |
此处就是对filename参数没有任何过滤,导致攻击者使用../可实现任意文件下载
绕过方式
url编码绕过
单次url编码,../编码后..%2f,%2e%2e%2f。
双/多重url编码
进行双重url编码,多了个25
1 | |
Unicode的URL编码
1 | |
UTF-8的Unicode编码
1 | |
超长UTF-8编码
1 | |
空字节截断
也就是大家熟知的00截断,用于判断后缀名,使用空字节URL编码绕过(出现几率非常小)
1 | |
漏洞修复
通过前面原理介绍,目录穿越是由于文件系统的特性所导致的,通过../进行目录的跨越。修复只需要检测字符”..”与”/“即可,在对应语言中加入检测即可,以java为例:写一个工具类检测即可
1 | |
url重定向
参考:《网络安全Java代码审计实战》
漏洞描述
也称URL跳转、URL重定向漏洞,由于目标网站未对程序跳转的URL地址及参数做合法性判断,导致应用程序直接跳转到参数中指定的的URL地址。攻击者可通过将跳转地址修改为指向恶意站点,即可发起网络钓鱼、诈骗甚至窃取用户凭证等。
实现代码
1.通过 ModelAndView 方式
1 | |
URL 跳转使用方式:http://www.any.com/index.jsp?url=http://www.xxx.com。
2.通过返回 String 方式
1 | |
URL 跳转使用方式:http://www.any.com/index.jsp?url=http://www.xxx.com。
3.使用 sendRedirect 方式
1 | |
URL 跳转使用方式:http://www.any.com/index.jsp?url=http://www.xxx.com。
4.使用 RedirectAttributes 方式
对于一般的 URL 跳转,使用 redirect 即可满足要求。如果需要进行参数拼接,则一 般使用 RedirectAttributes
1 | |
URL 跳转使用方式:http://www.any.com/RedirectAttributes。 “ @RequestMapping(“/RedirectAttributes”) ” 在 方 法 前 面 要 说 明 URL 访 问 是 通 过 http://192.168.88.2:8080/RedirectAttributes 来访问的,代码中“return “redirect:/test/index”;”, 就 会 重 定 向 到 http://192.168.88.2:8080/test/index 这 个 URL , 通 过 “ redirectAttributes. addAttribute(“id”,”2”)”传递了 id=2 这个参数,所以最终访问的其实是 http://192.168.88.2: 8080/test/index?id=2 这个 URL 地址。

5.通过设置Header来进行跳转
1 | |
通过“response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY)”设置返回的状态码,“SC_MOVED_PERMANENTLY”是301 永久重定向,“SC_MOVED_ TEMPORARILY”是302 临时重定向。
URL跳转使用方式:http://www.any.com/index.jsp?url=http://www.xxx.com。
常见场景
主要是业务逻辑中需要进行跳转的地方。比如登录处、注册处、访问用户信息、订单信息、加入购物车、分享、收藏等处。
- 登陆跳转是最常见的跳转类型,认证完后会跳转,所以在登陆的时候建议多观察url参数
- 用户分享、收藏内容过后,会跳转
- 跨站点认证、授权后,会跳转
- 站内点击其它网址链接时,会跳转
- 在一些用户交互页面也会出现跳转,如请填写对客服评价,评价成功跳转主页,填写问卷,等等业务,注意观察url。
- 业务完成后跳转这可以归结为一类跳转,比如修改密码,修改完成后跳转登陆页面,绑定银行卡,绑定成功后返回银行卡充值等页面,或者说给定一个链接办理VIP,但是你需要认证身份才能访问这个业务,这个时候通常会给定一个链接,认证之后跳转到刚刚要办理VIP的页面。
关键字
url跳转常用参数
1 | |
实现url跳转需要的方法
1 | |
漏洞危害
攻击者可能会使用Web服务器攻击其他站点;
如果对输出没有做严格限制,将可能导致反射性XSS漏洞;
黑产将利用此漏洞,从信任网站跳转到攻击者构造的恶意网站用来进行钓鱼、诈骗等行为;
结合csrf漏洞,攻击者可通过url重定向获取cookie
实战案例(黑盒)
出自:(https://xz.aliyun.com/news/14506)
该漏洞场景是对一个视频分享它会生成一个二维码跳转到我们要分享的视频,可我们可以在生成二维码的时候进行抓包导致ur跳转漏洞。
- 首先我这里给分享视频地址生成的二维码

这个分享二维码的url如下:
1 | |
- 修改该地址为 https://www.baidu.com 修改完成后,刷新该界面

- 然后就直接使用我们的手机扫描二维码,直接跳转到修改的地址
