极客大挑战2023-pwn-nc_pwntools WriteUp

主要考查点

Pwntools工具的基本使用方法

解题思路

1.nc 连接题目,得到提示:

image

根据题目,要求发送一个100长度的字符串,而且末尾需要为Syclover
b'A'*92 + b'Syclover'

2.发送第一个请求后进入第二步

image
要求短时间内计算一个复杂算式,自己算是肯定不可能的,所以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]:取列表的第一个元素,即等号左边的部分,这通常是我们需要计算的数学表达式。

posted @ 2024-09-28 23:12  vstral  阅读(30)  评论(0编辑  收藏  举报