読者です 読者をやめる 読者になる 読者になる

Alex CTF Writeup

Alex CTFにも参戦してました。 解いた問題もCTFらしくはないですが、一応Writeupを

[Scripting 100] SC1: Math bot

アクセスするとひたすら計算問題を出されるのでひたすらpythonで解かせる 500問解くとflagが落ちてくる。適当にスクリプト組んだのでこれだけ上げとく.

import socket,telnetlib
import math

# common funcs ---
def sock(remoteip, remoteport):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((remoteip,remoteport))
    return s, s.makefile('rw',bufsize=0)

def read_until(f,delim='\n'):
    data = ''
    while not data.endswith(delim):
        data+= f.read(1)
    return data

def ans():
    r= ''
    # Questionの文字まで読み込む
    while "Question" not in r:
        r += f.read(1)
        print(r)

    r = ''
    # Question番号まで読み込む
    while "\n" not in r:
        r += f.read(1)
    print(r)
    r = ''
    first = ''
    second = ''
    r = read_until(f)
    print(r)
    # 問題を読み込む
    lis = r.split(' ')

    first = long(lis[0])
    ope = lis[1]
    second = long(lis[2])

    # math
    if ope == "+":
        ret = int(first + second)
    elif ope == "-":
        ret = int(first - second)
    elif ope== "*":
        ret = first * second
    elif ope== "/":
        ret = math.floor(first/second)
    elif ope== "%":
        ret = int(first % second)
    if ret == int(ret):
        ret = int(ret)
    f.write(ret)
    f.write("\n")
    print(str(ret)+"\n")

# main
s, f = sock('195.154.53.62', 1337)
r = ''
for i in range(10000):
    ans()