今天遇到了一道 ppc 的题目,并不难,连接服务器端口后,计算返回的一个算式,发送答案,连续答对十次拿到 flag。
这一操作一般是利用 Python 的 socket 编程实现,后来看到有人说用 pwntools 也可以做,就尝试了一下。
先放正常的 socket 编程脚本。
# coding=utf-8
import re
import socket
HOST = '115.159.89.123'
PORT = 11002
BUFFER = 4096
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((HOST,PORT))
title = sock.recv(BUFFER)
print(title)
i = 1
while 1:
recv = sock.recv(BUFFER)
if recv:
print 'calc' + str(i)
print recv
if re.search(r'(.*?)=', recv):
calc = re.search(r'(.*?)=', recv).group(1)
result = eval(calc)
print result
sock.send(str(result) + '\n')
i += 1
elif re.search(r'flag', recv):
print recv
break
else:
continue
sock.close()
pwntools 好像不能再 Windows 下安装,于是转战 Kali。
pip install pwntools
一般来说都可以成功的,如果有问题,或者用的是其他发行版,可能需要先装点别的。
apt-get install python2.7 python2.7-dev python-pip
#! python
# coding=utf-8
import re
from pwn import *
HOST = '115.159.89.123'
PORT = 11002
BUFFER = 4096
r = remote(HOST, PORT)
title = r.recv(BUFFER)
print title
i = 1
while 1:
recv = r.recv(BUFFER)
if recv:
print 'calc' + str(i)
print recv
if re.search(r'(.*?)=', recv):
calc = re.search(r'(.*?)=', recv).group(1)
result = eval(calc)
print result
r.sendline(str(result))
i += 1
elif re.search(r'flag', recv):
print recv
break
else:
continue
r.close()
区别不是很大,只是做了一点小小的工作。