分类
标签
Bash C/C++ CI/CD CMU Cookie CS231n CS50 CSS CTF Diffie-Hellman Emmet Floyd算法 FPGA GitHub Actions Github Pages golang GOT表 Hexo HTML HTTP Java JavaScript Jupyter LeetCode Linux logrus MIT Missing Semester NumPy OpenSSL PLT表 Python RSA Session Shell sing-box socket SQL SQLite SQL注入 SVD SymPy TCP/IP Verilog Web开发 writeup XPath ZJU校巴 主定理 代理 信息安全 内存 前端 动态规划 动态链接 博客 压缩 参考 后端 命令行 国际交流 图像处理 图解 堆 堆排序 复杂度分析 密码学 开发 归并排序 微积分 心得 快速排序 抽象代数 搜索 操作系统 数字电路 数字逻辑 数学 数据库 数据结构 数论 文件系统 时间戳 有限状态自动机 机器学习 正则表达式 汇编 游戏开发 爬虫 物理 环境配置 科学计算 竞赛 笔记 算法 线性代数 编程语言 编译 网络 网络安全 背包DP 计算机基础 计算机视觉 计算机网络 课程 课程推荐 谱定理 踩坑 逆向 逆向工程 逻辑电路 非对称加密 题解 高斯消元法 魔塔
443 字
2 分钟
ZJU校巴::calculator writeup
题目
给了一个IP和端口,提示使用netcat连接:
nc 10.214.160.13 11002
连接后显示以下文本
================================================
Mom: finish these 10 super simple calculations,
and you will get a flag
Melody: that's easy...
Mom: yep, in 10 seconds
================================================
1941304599 + 1278737850 + 446307018 + 197487298 + 305703907 + 1425271161 - 806389023 + 1991017585 - 490014616 + 1353220023 =
分析
只有10秒的时间要完成10题,显然要编程来完成。但是先尝试一下手动输入答案,把上面的式子拷到Python REPL里,再把答案拷回去,显示“Good, next:”,并展示了下一道题目。10秒时间到,显示“Ah oh, timeout! bye now”。
1941304599 + 1278737850 + 446307018 + 197487298 + 305703907 + 1425271161 - 806389023 + 1991017585 - 490014616 + 1353220023 = 7642645802
Good, next:
1260408124 + 767415738 + 280455885 - 1070077818 - 646925359 - 1211049829 + 103524629 - 840188120 - 1202673923 + 1399044781 = Ah oh, timeout! bye now
实现
根据题目给的hint,使用Python socket编程完成。
from socket import *
import re
with socket(AF_INET, SOCK_STREAM) as s:
# 创建一个socket对象,AF_INET设置使用IPv4连接,SOCK_STREAM设置使用TCP连接
s.connect(('10.214.160.13', 11002))
while True:
data = s.recv(1024).decode() # 接收信息,最多1024字节
if not data: # 若没有信息,代表连接已关闭
break
print(data, end='')
if re.match(r'^[^A-z]*$', data): # 用正则表达式匹配,如果没有字母,就判断是题目部分
res = str(eval(data.split('=')[0])) + '\n' # 使用eval计算结果,加上'\n'才能模拟手动输入的回车
s.sendall(res.encode()) # 发送结果
print(res)
写出这段代码并不难,但是我调试了很久,原因就在那个'\n'
,多次尝试手动输入答案,服务端会给出下一题的题面,但是在脚本中使用sendall之后,并没有任何反馈,排查了各种原因,发现是因为没有回车,所以服务端视作输入还未结束,继续等待输入。
ZJU校巴::calculator writeup
https://cyrus28214.github.io/posts/zju-school-bus-calculator-writeup/