WEB攻防-JAVA安全
引言
在当今数字化时代,JAVA已经成为主流编程语言之一。无论是企业级应用程序还是个人项目,JAVA应用程序都承载着大量的敏感数据和业务逻辑。所以,学好对JAVA安全的防护变得尤为重要。同时,JAVA语言相对于PHP以及其他语言来说有着更高的安全性,所以如果采用JAVA语言编写的web,几乎不可能存在sql注入,面对JAVA开发的应用程序,如果要对其进行安全测试的话,一般是要拿到其源码才可以的,所以,JAVA安全是很难的,也是最有价值去研究的
WebGoat8靶场搭建
这一部分笔者折腾了很久,按照一般的教程,大家都是通过把WebGoat的jdk下载下来,然后用自己的jdk命令行打开就行,但是笔者在实操的时候发现了虽然有jdk,但是jdk版本太老了,不能带动WebGoat的运行,于是我也去升级了一下我的jdk,下了一个全新版本的jdk,然后就和我的老jdk冲突了🤬,在网上试了很多方法,都没成功,最后决定下载Docker镜像,在服务器上搭建,好在是这样成功了
按照如下方式在你的虚拟机上安装docker镜像
docker pull webgoat/webgoat-8.0 //拉取镜像 |
之后在自己的浏览器访问xx.xx.xx.xx:8080/WebGoat/login
,其中,前面输入自己服务器的公网IP即可,出现以下页面即代表成功
之后随便注册一个账户就可以登录进去,然后就可以愉快的刷题了🤩🤩🤩
路径穿越
应用场景:在文件上传时,我们可能会遇到上传的路径不允许执行php或者其他木马后缀,这个时候我们可以进行路径穿越,将文件上传到上层目录或者根目录下,因为根目录不可能限制很多文件运行,如果限制文件运行,则这个项目的部分功能可能无法实现,所以进行路径穿越是很有必要的
首先我们打开pathtraversal关卡,我们可以学到一些关于pathtraversal的基本知识
第一关
打开第一关,首先我们可以看到如下页面
我们先随机上传一个头像试试,可以看到文件被放在了如下路径
所以本题其实就是要跨越那个borgeous目录,放到上级目录,所以很简单,经典../
即可
所以只需要加一个../
就可以完成路径穿越
第二关
看第二关,同样很简单,只是禁用了../
我们同样先测试一下是怎么过滤../
的
很容易看出,这个时候输入../
已经没什么用了,显然被过滤了,我们先试试能不能进行编码绕过
很显然,编码绕过没有什么作用,我们试试双写绕过
显然,双写绕过是可以的
第三关
首先观察提示,发现又进行了一些修复,对Full name
字段又进行了部分限制,我们仍然通过抓包看看有没有什么有用的信息
发现这里把1.jpg
传进去了,我们对filename字段进行路径穿越即可
第四关
很明显,是让我们在路径上进行目录穿越,找到path-traversal-secret.jpg
,老样子,先抓个包
通过不停的抓包放包,可以发现图片是用id字段进行拼接的,所以我们只需要将我们需要访问的图片和id进行拼接即可,但要注意要进行编码绕过,因为其过滤了相关特殊字符
成功解出本关
身份认证
认证问题
当我们忘记密码时,出现这个回答问题是非常正常的,但是当管理员对问题的设置不当时,就会引发很严重的安全问题,比如通过更改键名来进行非法绕过,而这一关所考察的问题也是这个
首先我们随便输入,然后用bp抓包
当把键值改为不存在的键值时,此时系统查找数据库发现没有这一项,进而无论输入什么都会返回正确,如下所示
但是如果管理员将键名固定,只接受键值,那么这种方法是不可行的,需要其他的方法
JWT
JWT是一种身份鉴别手段,经常用在java和python中,对于jwt的详解可以参考以下这篇文章
JWT介绍&空加密&暴破密钥&私钥泄露&密钥混淆&黑盒_jwt泄露-CSDN博客
对于jwt,比较常用的方法就是空加密和密钥爆破,我们还是用例题来进行讲解
对于该关卡,我们需要先获得一个身份,然后提权到管理员身份即可,我们先用bp进行抓包
我们将access_token字段拿去解密,解密出来的结果如下所示
我们只需要将false改为true,并把算法置为none即可,我们使用相关脚本进行生成(在线网站是生成不了的),这里推荐jw_tool进行生成
# 使用None算法 |
根据其提示一步一步往下操作,最终将得到的去掉最后signature部分,重新发包即可
JWT_Crack
首先题目中给了我们一串jwt加密后的信息,根据题目信息,我们首先要把username换成WebGoat后进行加密,所以我们首先需要知道密钥
查看源码,将下列secret加入我们的字典中,然后进行爆破
用jwt_tools爆破密钥,如下所示
我们找到了正确的密钥,然后根据正确的密钥重新生成jwt即可
同时,注意将exp字段改大一点,exp表示的是jwt失效时间,否则会提示invalid
第三方组件
Java安全问题80%都出在组件安全上,主要是因为JAVA会导入很多个外部包,这就导致容易因为组件爆出漏洞进而影响整个JAVA应用受到影响,比较出名的就是log4j漏洞
组件安全比较复杂,后期和其他通用漏洞一起总结