JAVA 安全-JWT 安全及预编译 CASE 注入等(40)

这篇具有很好参考价值的文章主要介绍了JAVA 安全-JWT 安全及预编译 CASE 注入等(40)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在各种语言脚本的环境下,也会产生一些新的漏洞,如果是java又能产生那些漏洞,思维导图里面常规漏洞之前都有;

java的访问控制,jwt令牌(php几乎没有)组件安全,这些都是java特有的

#综合漏洞,sql注入

防御sql注入,接受session,参数绑定,存储过程中这样注入;

接受session:这个意思就是他取sql语句不是你发什么他就接受什么,取你s型里面的,类似于cookie的数据,这里的值,一般s型都存储在对方服务器里面,一般不去操作对方服务器,这个s型数据是不可伪造的。从服务器上面取固定值,而不是网站上发送什么数据,接受什么数据。

参数绑定方式:采用了预编译技术,这个就是,

---PreparedStatement ,SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。(这里是PreparedStatement不允许一个占位符(?)有多个值,注入的语句也就不会被执行)

使用整个PreparedStatement,可以阻止大部分sql注入,但还是可以尝试绕过;在使用参数化查询时,数据库系统不会将参数作为sql语句去执行,他不会将你的参数值当作sql语句去执行,就等于个字符串,没有意义,在参数化查询中,sql语句格式是已经规定好的,要查的数据也固定好了,

假如他只接受一个1,在1后面写上注入语句之后,他之后代入1正常sql查询,后面的sql攻击语句不给予执行的机会。

这种情况该如何去绕过,我们可以case when 语句去绕过预编译的,语句可以将 order by 后的 orderExpression 表达式中添加 select 语句。(原理类似堆叠注入,一条语句出现多条命令)

为什么可以绕过,在后面可以添加select语句,而case when,他把注入代码写到后门来,

预编译注入是围绕着order by绕过的,

打开靶场,在靶场哪里点排序,抓住数据包

JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

发送到重发器,正常数据包发送一下就正常返回JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全我们把参数ip随便改一下,在发送出去,看下报错信息JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全 因为这里涉及了预编译,所以不能用常规的注入思路了,必须结合用到case when语句,如何根据报错信息里面有一些表名之类的信息,直接用。

所以我们可以写一个python的脚本去跑sql注入,

java内置了预编译,所以很难sql注入到,怎么发现order by,这个字符串的功能是排序,如果对方涉及到了排序的话,就有,对方没有order by就直接算了。

JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

 但是并不妨碍我看不懂这个代码

##重点,jwt安全

经常出现,

JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

jwt是一种跨域验证身份的方案,身份凭据。比如你的网站是xioadi8.com,而另一个网站是xiaohei1.com而要实现两个网站的用户通讯问题,这个时候他就可以跨域进行身份的验证,比如你是xiaodi上面的xiaodi用户,可以实现这样的认证方式。

第一步先学习组成部分,分三个部分,头部,声明,签名,

涉及到攻击就伪造攻击,爆破,或配合其他漏洞去攻击。

如何检测,先看是不是javaweb的语言,第二个看有没有authorization的存在,第三个就是看数据包的格式,

JWT颁发流程

1、用户端登录,用户名和密码在请求中被发往服务器

2、(确认登录信息正确后)服务器生成JSON头部和声明,将登录信息写入JSON的声明中(通常不应写入密码,因为JWT是不加密的),并用secret用指定算法进行加密,生成该用户的JWT。此时,服务器并没有保存登录状态信息。

3、服务器将JWT(通过响应)返回给客户端

4、用户下次会话时,客户端会自动将JWT写在HTTP请求头部的Authorization字段中

5、服务器对JWT进行验证,若验证成功,则确认此用户的登录状态

6、服务器返回响应 

首先看一下结构

JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

 jwt在数据包里面传输的时候是这样的,这是加密后的值,没加密的值是这样的

上面这些都是base64加密方式,签名整合前面两个,但是签名哪里在base64之前有一个密匙,就是随机的密码,组合这个密码加密之后的签名,所以它需要得到密匙才能还原,重新加密也需要密匙,

头部(Header)

    {

    "alg":"HS256",

    "typ":"JWT"

    }

“alg”是该JWT的签名使用的算法参数,常见值用HS256加密(默认),HS512等,也可以为None。

“typ”是该token的类型,值为“JWT” 

##javawen身份认证绕过----jwt修改伪造攻击, 

打开靶场JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

 更改jwt信息类似于之前更改cookie

老规矩,用burp抓包JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

 然后这个一直点发生出去,就是一片空白,所以在抓一次这个数据包,点一下那个垃圾桶按钮,抓重置投票的数据包JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

 数据包里面就出现了这个值,这个就符合jwt的验证方式,JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

 我门需要解密一下这个字符串,就直接去这个网站,复制粘贴

解码、验证和生成JWT:https://jwt.io/#encoded-jwt 

JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

 这个只能识别前面两个,最下面那个要在白色框里面输入密匙之后才能识别;最后面的签名是由头部内容决定的,哪里有个hs512,所以他的加密方式是hs512再加上这个密匙。把hss512加密方式改一下为空,就相当于签名没有加密,密匙也就没有了。

不过先不说这个,按照题目来讲

根据数据吧分析,他是根据admin哪里判断,把admin哪里改为true(翻译中文是真)就可以了,因为false是假的意思,JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

 额。。。数据包抓错了,抓成登录的了,应该删除一个然后进入操作用户的数据包JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

 然后没有修改jwt发送出去,它会提示我们不是管理用户,所以不能点垃圾桶重置投票

换好jwt之后发送JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

 他有提示,token不对。

这是因为刚刚修改admin为true,但是签名不对。没有密匙就更改头部内容为不加密,所以这时候就把头部base64解密之后,把hs512改为none,意思就是不加密,在修改声明的admin为true。

然后因为--注意:在HTTP传输中,base64编码中的=,+,/等等特殊符号通过URL解码容易产生歧义,因此产生了与URL兼容的base64 URL编码,所以把那些符号都取消掉,然后因为头部选择的不加密,所以签名就可以不用写,只写一个点好。JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

 JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

 修改后jwt,发送过去了,成功了。

这一关就告诉我们jwt是什么,如果没有加密方式就把加密方式改为none,签名就为空,实现这个伪造,就涉及到思维导图里面攻击方式,伪造,没有那个签名加密方式就修改none,由密匙就直接用密匙加密;如果对方有签名认证这种方法就不行了。

##javawen身份认证绕过----jwt密匙爆破攻击

爆破前提:好的字典,一个完整的JWT

打开靶场JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

 这时候就可以通过已经获取的令牌,进行暴力破解,先拿去已经有的令牌去破解

JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

这里要进行的解密的话用到一个python脚本JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

他这里是把利用那个网站里面每次修改密匙,然后对应的签名就会改变,之后就是用那个字典里面就很多钟密匙,去调用下面的模块,进行一个jwt的加密,然后再去和上面的jwt进行一个对比,一模一样的,而他引用字典里面的值,就是密匙。

JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

爆破出来了。然后要对这个里面的信息修改,声明里面的用户名,失效时间要修改好

JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

 JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

 完整数据包。

##javawen身份认证绕过----jwt伪造修改冒充

打开下一关JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

点绿色的按钮抓一下数据包 

JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

 用户下次会话时,客户端会自动将JWT写在HTTP请求头部的Authorization字段中

但是用户为空,我们不知道。发送出去

然后我们打开她的日志看看,就是在主页的在此处那个蓝色的字体,点开就是

 发现token传参使用的jwt令牌,然后就拿去网站翻译和,这个思路也是把头部加密方式改为none就是空,然后把声明里面的有效时间改好,然后base64编译好,去掉url不好接受的特殊符号,就不用再写签名,然后修改到数据包的指定对方。JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

 发送出去成功了。

这个就是从日志里面获取到别人的身份令牌来伪造登录,重新把数据包构造。

如果你有之前别人的令牌,就可以修改失效时间,再一次有效;这是建立在对方没有检测签名的情况下,检测失效时间的判断没有在jwt数据包体现,

##Javaweb-身份验证attack-JWT安全结合sql注入

#参考:https://www.freebuf.com/vuls/216457.html

JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

 点一下汤姆猫的删除,抓一下数据包JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

 这是删除汤姆买的,同样拿去jwt解密JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

这里是jerry用户,所以只能删除Jerry,这里要把用户修改为tmo,我们没有签名,修改上面的加秘密方式,发现有一个kid,这是什么,看一下源代码

JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

这里有一个sql语句,kid这里就可以构造sql语句,进行sql注入,老师没有去做,不过可以看看上面的参考文章。

##CTFHub-历年真题:https://www.ctfhub.com/#/challenge 

 打开靶场JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

 先注册一个账户JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

注册好,点登录抓一下数据包JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全 把这个数据包发送到重发器,然后这个数据包发送出去,看看网页有什么变化,JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

但是点下面的蓝色按钮会提示权限被拒绝,这个就告诉我们要实现一个权限的跨越,一般管理员是admin,还有提示这个网站涉及到nodejs 框架,nodejs简介(猜测是一个前端框架) 

通过/controllers/api.js查看框架信息(这里发现管理员帐号:admin,而且他的JWT验证在前端)

JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

 这里也有提示在查看权限的时候是admin用户才可以,

所以把刚刚在重发器的数据包的jwt语言拿去解密一下,然后把用户名修改为adminJAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

因为不知道密匙,所以把上面加密方式改为none,签名就可以为空。构造新的jwt语言JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

在输入刚刚注册的账户密码登录,然后把账户修改为admin,改好jwt JAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

 然后进入之后,直接查看falgJAVA 安全-JWT 安全及预编译 CASE 注入等(40),安全

 游戏就结束了。

 怎么去发现jwt呢,1就是javaweb是很常见有jwt,第二个就是关键字,authorization,第三个就看数据包的数据格式。

s文章来源地址https://www.toymoban.com/news/detail-519172.html

s

s

到了这里,关于JAVA 安全-JWT 安全及预编译 CASE 注入等(40)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Java安全]—Mybatis注入

    Mybatis注入留在了Spring后,因为感觉用Spring搭建web端后再进行注入比较贴合实际一些。 Mysql:5.7 Springboot:2.1 mybatis:3.5 创建了一个测试用的数据库Mybatis 这里用的Springboot环境,配置文件较多,先放出关键文件,最终项目放在后边 接口 配置 测试 执行语句是 select * from users wh

    2024年02月06日
    浏览(27)
  • 【java安全】JNDI注入概述

    什么是JNDI? JNDI(Java Naming and Directory Interface) 是 Java 提供的 Java 命名和目录接口。通过调用 JNDI 的 API 可以定位资源和其他程序对象。 命名服务将名称和对象联系起来,使得我们可以用名称访问对象 JDNI的结构 jndi的作用主要在于\\\"定位\\\"。比如定位rmi中注册的对象,访问ldap的目录

    2024年02月11日
    浏览(28)
  • 漏洞攻击中怎么去做最全面覆盖的sql注入漏洞攻击?表信息是如何泄露的?预编译就一定安全?最受欢迎的十款SQL注入工具配置及使用

    漏洞攻击中怎么去做最全面覆盖的sql注入漏洞攻击?表信息是如何泄露的?预编译就一定安全?最受欢迎的十款SQL注入工具配置及使用。 SQL注入是因为后台SQL语句拼接了用户的输入,而且Web应用程序对用户输入数据的合法性没有判断和过滤,前端传入后端的参数是攻击者可控

    2024年01月24日
    浏览(35)
  • WEB攻防-Java安全&JWT攻防&Swagger自动化&算法&签名&密匙&Druid未授权

    知识点: 1、Java安全-Druid监控-未授权访问信息泄漏 2、Java安全-Swagger接口-文档导入联动批量测试 2、Java安全-JWT令牌攻防-空算法未签名密匙提取 参考:https://developer.aliyun.com/article/1260382 Druid是阿里巴巴数据库事业部出品,为监控而生的数据库连接池。Druid提供的监控功能,监

    2024年02月04日
    浏览(33)
  • [Java安全]—Shiro回显内存马注入

    文章首发于先知社区:Shiro回显内存马注入 接上篇[Java安全]—Tomcat反序列化注入回显内存马_,在上篇提到师傅们找到了一种Tomcat注入回显内存马的方法, 但他其实有个不足之处:由于shiro中自定义了一个filter,因此无法在shiro中注入内存马。 所以在后边师傅们又找到了一个

    2024年02月06日
    浏览(32)
  • Day69:WEB攻防-Java安全&JWT攻防&Swagger自动化&算法&签名&密匙&Druid泄漏

    目录 Java安全-Druid监控-未授权访问信息泄漏 黑盒发现 白盒发现 攻击点 Java安全-Swagger接口-导入联动批量测试 黑盒发现 白盒发现 自动化发包测试 自动化漏洞测试 Java安全-JWT令牌-空算法未签名密匙提取 识别 JWT 方式一:人工识别 方式二:Burp插件识别 解析JWT数据 JWT安全 空加

    2024年04月13日
    浏览(27)
  • Day66:WEB攻防-Java安全&SPEL表达式&SSTI模版注入&XXE&JDBC&MyBatis注入

    目录 JavaSec搭建 Hello-Java-Sec搭建 Java安全-SQL注入-JDBCMyBatis JDBC:Java语言连接数据库操作 MyBatis( mybatis是一个优秀的基于java的持久层框架,它内部封装了 jdbc) 代码审计案例:inxedu后台MyBatis注入 Java安全-XXE注入-ReaderBuilder 配置XML允许引入外部解析实体 白盒测试-XXE Java安全-SSTI模版

    2024年04月25日
    浏览(33)
  • java中Runtime.exec()可能带来的命令注入安全问题的解决办法

        我们在使用Runtime.getRuntime().exec()的时候,可以指定一个命令或者脚本,让它执行,类似于调用系统指令来进行完成一项任务。     但是这个方法如果有安全检查,它会被报出一个Command Injection的风险,也就是命令注入的风险,因为命令可能是外部传入,这个时候,正常的

    2024年02月08日
    浏览(25)
  • JAVA安全之Log4j-Jndi注入原理以及利用方式

    什么是JNDI? JDNI(Java Naming and Directory Interface)是Java命名和目录接口,它提供了统一的访问命名和目录服务的API。 JDNI主要通过JNDI SPI(Service Provider Interface)规范来实现,该规范定义了对JNDI提供者应实现的接口。在JNDI体系中,JNDI提供者是指实际提供命名和目录服务的软件组

    2024年01月19日
    浏览(74)
  • JWT 安全 JWT-WebGoat靶场

    cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。 cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在

    2024年02月03日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包