View on GitHub

Sikkerhetsdagen 2022 CTF @ UiA

Kalkulus fart 2

Kalkulus fart 2

Kan du bevise at du har lært noe litt mer avansert i kalkulus? Løs alle disse (litt) vanskeligere mattematikk stykkene så skal du få en premie!

ctf.uiactf.no:5002

Når vi kobler til serveren blir vi møtt med følgende melding:

$ nc ctf.uiactf.no 5002
Kan du hjelpe meg løse disse 'få' tusen mattestykkene?:
503-46*300-504+871*783*747*121 = ?
61643287490
315*558-586*573+224-826-783+1014+519*17-712*288*993 = ?
-203772164
381 = ?
381
734*556 = ?

Litt mer kompliserte oppgaver enn i Kalkulus fart 1 her altså. Her tyr vi rett og slett til eval for å enklere løse de matematiske uttrykkene. Her tenkte jeg faktisk litt frem og prøvde meg på regex for å hviteliste hva som er tillatt i uttrykkene.

Oppdatert solve.py skript:

from pwn import *
import re

io = connect("ctf.uiactf.no", 5002)

print(io.recvline().decode())

while (True):
    exp = io.recvline(False).decode()
    
    if (exp.find('=') > -1):
        exp = exp.replace('=', '').replace('?', '')
        if (re.match("[0-9\+\-\*\/].*", exp) != None):
            print(exp)
            answer = eval(exp)
            print(answer)
            io.sendline(f"{answer}")
        else:
            print("Contains illegal chars! exp: " + exp)
    else:
        io.interactive()

Jeg regnet faktisk med at det skulle være en eval-felle i denne oppgaven, så ble litt lei meg når jeg så følgende:

$ python solve.py
# ...abbreviated
341
92+463-866*194   
-167449
106+591*701+796-593+875-841*169+524+566   
274436
[*] Switching to interactive mode
UIACTF{flott_at_du_stoler_paa_all_input}
[*] Got EOF while reading in interactive
$

Etter at skriptet har kjørt en del sekunder blir vi presentert med flagget! 🚩

Flag

UIACTF{flott_at_du_stoler_paa_all_input}

Tja, tenkte hvertfall på å gjøre en innsats ved å hviteliste ;)