Diese Challenge (Wolfram Beta) verlangt, dass wir aus einem Berechnungsdienst ausbrechen und die Flagge auslesen. Dieser Dienst soll unter der angegebenen IP-Adresse lauschen, was wir sofort überprüfen.
rup0rt@lambda:~/BostonKeyParty2013$ nc 54.218.12.97 34567 Wolfram Beta - BkP CTF 2013 Team Wolfram Beta is a great calculator. just put in a number at the prompt then put in the operator then finally the second number and the calculation will be done INSTANTLY no accounts necessacary, unlike some of our competition! first num: 1 operator: + second num: 2 Thinking... . Done Thinking! 3
Der Rechner fordert uns also zur Eingabe von zwei Zahlen und einem Operator auf. Nach einer Denkphase, die wohl auf Wolfram Alpha anspielen soll, wird uns das Ergebnis ausgegeben.
Beim Versuch anstatt der Zahlen Buchstaben oder Sonderzeichen zu übergeben, wird die Verbindung sofort mit einem entsprechenden Verbot abgebrochen. Der Operator jedoch lässt sich nach einigen Versuchen so manipulieren, dass eine Fehlerausgabe erscheint:
first num: 1
operator: +asfetrrr
second num: 2
Thinking...
.
Done Thinking!
{interactive}(1,14): error CS0119: Expression denotes a `type', where a `method group' was expected
Unhandled Exception: System.ArgumentException: The expression did not set a result
at Mono.CSharp.Evaluator.Evaluate (System.String input) [0x00000] in <filename unknown>:0
at wolfram_beta.MainClass.ReplCalculator () [0x00000] in <filename unknown>:0
at wolfram_beta.MainClass.Main (System.String[] args) [0x00000] in <filename unknown>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.ArgumentException: The expression did not set a result
at Mono.CSharp.Evaluator.Evaluate (System.String input) [0x00000] in <filename unknown>:0
at wolfram_beta.MainClass.ReplCalculator () [0x00000] in <filename unknown>:0
at wolfram_beta.MainClass.Main (System.String[] args) [0x00000] in <filename unknown>:0
Wir erkennen, dass es sich um ein C#-Programm (Csharp) handelt. Außerdem wird MONO verwendet, also die Linux-Variante von C#. Zur Auswertung des übergebenen Ausdrucks wird die Evaluate-Funktion aufgerufen. Damit könnte es also möglich sein, einen Operator zu übergeben, der testweise Zeichenketten konkateniert.
Continue reading