MENU

利用 pwntools 编写 socket 脚本

July 21, 2016 • Read: 383 • CTF

今天遇到了一道 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()

区别不是很大,只是做了一点小小的工作。

Last Modified: February 14, 2017
Archives QR Code
QR Code for this page
Tipping QR Code