# UMassCTF 2022 writeup - quickmaths- Write-Up Author: [Ivan Mak](https://ank.pw/tech/)
Flag : UMASS{s3v3naten1n3}
## Question:
Connect to [34.148.103.218:1228](34.148.103.218:1228)，solve 1000 of math problems
## Write up
### 1. use netcat
```shellnc 34.148.103.218 1228```
```shellYou must solve 1000 of these math problems that are outputted in the following format {number} {operation} {number} to get the flag. Division is integer division using the // operator. The input is being checked through python input() function. Good luck! 
-21 // 95-1Correct!-52 - 53-105Correct!-28 // 65```There are some maths need to solve. Actually, It can be solved manually. but this is not an effective idea.
### 2. use pwntools
[Pwntools](https://docs.pwntools.com/en/stable/) is a great tools to solve the remote program automatically via python.
```pythonfrom pwn import *
p = remote("34.148.103.218",1228)p.recvuntil("Good luck")p.recvline()p.recvline()
for i in range(1000):    print("======",i)    a = p.recvline()    a = a.decode('ascii').strip()    print("Q",a)    b = eval(a)    print("A:",b)    p.sendline(str(b))    p.recvuntil("Correct!")    p.recvline()
c = p.recvline()print(c)```
But there is a tricky problem, process always be interrupted due to `EOFError` issue.
![img](./img/1.png)
It is due to server side has no response, pwntools will be interrupted.
### 3. keep connection alive at server side
Modify the code, use while-loop instead of for-loop. Make pwntools to keep connection alive at the server side when server side has no response.
```pythonfrom pwn import *
p = remote("34.148.103.218",1228)p.recvuntil("Good luck")p.recvline()p.recvline()
i = 1while i <= 1000:    try:        print("======",i)        a = p.recvline()        a = a.decode('ascii').strip()        print("Q",a)        b = eval(a)        print("A:",b)        p.sendline(str(b))        p.recvuntil("Correct!")        p.recvline()        i +=1    except:        p = remote("34.148.103.218",1228)
c = p.recvline()print(c)```
![img](./img/2.png)
