# CSAW’18 CTF Qualification: Algebra

Event | Challenge | Category | Points | Solves |
---|---|---|---|---|

CSAW’18 CTF Qualification | Algebra | MISC | 100 | 410 |

### Description

Are you a real math wiz?

nc misc.chal.csaw.io 9002

### TL;DR

This challenge consists in equations being thrown at us that we have to solve and send the result in order to get the flag. Python and sage, guide us please !

### Methology

A friend I was talking with while solving this chall told me :

Well, the equations are simple, let’s write a quick script to solve it !

Hearing that, I went like :

Hum… Hum no. That’s not how it works, they wouldn’t give 100 points for that…

In fact, during CSAW 2017 quals, there was an other Misc I worked on, and the
questions (bank card number to compute) were getting harder and harder, so I
knew we had to find a better way to solve it automatically. So I took my worst
coding skills, and used `popen`

and `eval`

like I it was my last day on earth.
Here’s the result, 10mn coding ! :)

```
#!/usr/bin/env python2
from pwn import *
import os
r = remote("misc.chal.csaw.io", 9002)
while True:
try:
data = r.recvuntil("equal?: ")
line = [line for line in data.splitlines() if "=" in line][0]
print "\n" + line
out = os.popen("sage -c \"var('X'); print solve([" + line.replace("=", "==") + "], X)\"").read()
answer = out.split("== ")[1].split("\n")[0]
print answer
if "/" in answer: # Sage does not simplify, so python will do it ! :)
answer = eval(answer.replace("/", "/float(") + ")")
print answer
r.sendline(str(answer))
except:
print "out", out # In case of failure, please tell us why...
r.interactive()
```

Just so you can laugh a bit, here are the first and last equations…

If I had to code something that can handle that… I would… I wouldn’t.

The flag is : **flag{y0u_s0_60od_aT_tH3_qU1cK_M4tH5}**

-Laluka