# VolgaCTF 2015 Quals – math problem

**Category:** PPC
**Points:** 300

nc mathproblem.2015.volgactf.ru 8888

This problem remind me of HITCON CTF 2014 – 24

The server gave us 5 numbers `v1`

, `v2`

, `v3`

, `v4`

& `v5`

, and ask us to use `+`

, `-`

, `*`

, `/`

, `(`

& `)`

to do some operation with `v1`

, `v2`

, `v3`

& `v4`

, and make it equal to `v5`

The solution is pretty simple: since it gave us a lot of time to solve a round, we can easily beat the challenge by brute-forcing all the possible combinations of operators & operands

```
from pwn import *
import re
import sys
import itertools
HOST="mathproblem.2015.volgactf.ru"
PORT=8888
r = remote(HOST, PORT)
def solve(numbers, answer):
ops = "+ - * /".split(" ")
wrap = ["", "(", ")"]
iterN = list(itertools.permutations(numbers, 4))
iterO = list(itertools.product(ops, repeat=3))
iterW = list(itertools.product(wrap, repeat=8))
for number in iterN:
for op in iterO:
for w in iterW:
expr = w[0]+number[0]+w[1]+op[0]+w[2]+number[1]+w[3]+op[1]+w[4]+number[2]+w[5]+op[2]+w[6]+number[3]+w[7]
try:
val = eval(expr)
if val == answer:
return expr
else:
continue
except:
pass
cnt = 0
while True:
if cnt == 30:
r.interactive()
s = r.recvuntil("Solve!\n")
print s
s = r.recv(1024)
print s
temp = s.split(" ")
numbers = [temp[i] for i in xrange(4)]
answer = int(temp[5])
print numbers, answer
ans = solve(numbers, answer)
print ans
r.send(ans+'\n')
cnt += 1
```

Flag: `{you_count_as_fast_as_a_calculator}`

## Comments