极客大挑战2023-pwn-nc_pwntools WriteUp
主要考查点
Pwntools工具的基本使用方法
解题思路
1.nc 连接题目,得到提示:
根据题目,要求发送一个100长度的字符串,而且末尾需要为Syclover
b'A'*92 + b'Syclover'
2.发送第一个请求后进入第二步
要求短时间内计算一个复杂算式,自己算是肯定不可能的,所以pwntools的recv来接收并完成计算然后发送回去,所以就要把算式前面的几行无关文本给接收掉,只保存最后一行算式
点击查看代码
io.recvuntil(b'first one\n')
que = io.recvline().decode().strip()
result = eval(que.split('=')[0].strip())
io.sendline(str(result))
exp
点击查看代码
from pwn import *
io = remote('train.geesec.com',30893)
#context.log_level = 'debug'
payload = b'A'*92 + b'Syclover'
io.sendline(payload)
io.recvuntil(b'first one\n')
challenge = io.recvline().decode().strip()
print("Received challenge:", challenge)
result = eval(challenge.split('=')[0].strip())
io.sendline(str(result))
io.interactive()
学习心得
学习到了Python函数:
.decode():将接收到的字节数据(bytes)转换为字符串(str)。这是因为 recvline() 返回的是字节类型。
.strip():去掉字符串开头和结尾的空白字符(包括换行符和空格),确保得到的字符串干净。
challenge.split('='):将字符串根据等号(=)分割成多个部分。结果是一个列表,列表的第一个元素是等号左边的部分,第二个元素是右边的部分(如果存在)。
[0]:取列表的第一个元素,即等号左边的部分,这通常是我们需要计算的数学表达式。