173 lines
7.4 KiB
PHP
173 lines
7.4 KiB
PHP
<?php
|
|
require_once("vendor/autoload.php"); // Incluye autoload de Composer para Selenium WebDriver y PHPMailer
|
|
|
|
use Facebook\WebDriver\Remote\RemoteWebDriver;
|
|
use Facebook\WebDriver\Remote\DesiredCapabilities;
|
|
use Facebook\WebDriver\WebDriverBy;
|
|
use Facebook\WebDriver\WebDriverExpectedCondition;
|
|
use Facebook\WebDriver\WebDriverWait;
|
|
use Facebook\WebDriver\WebDriverKeys;
|
|
use Facebook\WebDriver\Chrome\ChromeOptions;
|
|
use PHPMailer\PHPMailer\PHPMailer;
|
|
use PHPMailer\PHPMailer\Exception;
|
|
|
|
//Se optienen las variables de entorno (Crear un archivo .env en la raiz del proyecto con las variables EMAIL y PASSWORD)
|
|
|
|
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
|
|
$dotenv->load();
|
|
$email = $_ENV['EMAIL'];
|
|
$password = $_ENV['PASSWORD'];
|
|
|
|
// Crear ChromeOptions
|
|
|
|
$options = new ChromeOptions();
|
|
$options->addArguments([
|
|
'--start-maximized',
|
|
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.6312.122 Safari/537.36',
|
|
'--disable-blink-features=AutomationControlled'
|
|
]);
|
|
$host = 'http://localhost:4444/wd/hub';
|
|
$capabilities = DesiredCapabilities::chrome();
|
|
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
|
|
$capabilities->setCapability('pageLoadStrategy', 'normal');
|
|
|
|
//DEFINIMOS LOS SITIOS OFICIALES
|
|
|
|
$sitios_oficiales = [
|
|
'https://www.gugler.com.ar/',
|
|
'https://mi.gugler.com.ar/',
|
|
'https://campusvirtual.gugler.com.ar/'
|
|
];
|
|
|
|
//COMENZAMOS EL TEST
|
|
|
|
try {
|
|
$palabra_buscar = "gugler";
|
|
$logs ="";
|
|
// Crear el cliente de Selenium
|
|
echo "0 - Ejecutando test de monitoreo del sitio oficial en Chrome.\n";
|
|
//$driver = RemoteWebDriver::create($host, $capabilities); // opcion para las capabilities.
|
|
$driver = RemoteWebDriver::create($host, [
|
|
'browserName' => 'chrome',
|
|
'goog:chromeOptions' => $options->toArray(),
|
|
'pageLoadStrategy' => 'normal'
|
|
]);
|
|
$wait = new WebDriverWait($driver, 10);
|
|
$driver->executeScript("Object.defineProperty(navigator, 'languages', {get: () => ['es-ES', 'es']})");
|
|
$driver->executeScript("Object.defineProperty(navigator, 'plugins', {get: () => [1, 2, 3]})");
|
|
$driver->manage()->window()->maximize();
|
|
|
|
// Paso 1: Navegar a Google
|
|
$driver->get('https://www.google.com/');
|
|
echo "1 - Ingresando al buscador google.\n";
|
|
$driver->executeScript("window.scrollTo(0, 500)");
|
|
$searchBox = $driver->findElement(WebDriverBy::name('q'));
|
|
|
|
// Paso 2: Ingresar la palabra "gugler" en el cuadro de búsqueda
|
|
$letras = str_split($palabra_buscar);
|
|
foreach ($letras as $letra) {
|
|
$searchBox->sendKeys($letra);
|
|
sleep(rand(1, 2)); # Simula escritura
|
|
}
|
|
$searchBox->submit();
|
|
echo "2 - Se realizó la búsqueda de la palabra --> ". $palabra_buscar .".\n";
|
|
|
|
// Paso 3: Esperar a que se carguen los resultados
|
|
sleep(2); // Esperar a que se carguen los resultados
|
|
$captcha = $driver->findElements(WebDriverBy::id('captcha-form'));
|
|
if ($captcha) {
|
|
echo "⚠️ Captcha detectado, se espera 15 segundos para completarlo.\n";
|
|
sleep(15);
|
|
}
|
|
|
|
// Verificar si el primer resultado es uno de los sitios oficiales
|
|
$wait->until(
|
|
WebDriverExpectedCondition::presenceOfElementLocated(
|
|
WebDriverBy::cssSelector('div#search a[href^="http"]')
|
|
)
|
|
);
|
|
// Obtener el primer resultado
|
|
$resultados = $driver->findElements(WebDriverBy::cssSelector('div#center_col a[href^="http"]'));
|
|
$primero = $resultados[0]->getAttribute('href');
|
|
|
|
|
|
// Se muestran todos los resultados
|
|
echo "\n";
|
|
$lista_resultados = "";
|
|
foreach ($resultados as $index => $elemento) {
|
|
$url = $elemento->getAttribute('href');
|
|
// Valor por defecto
|
|
$esPatrocinado = "";
|
|
// Buscar si el enlace está dentro de un bloque de anuncios (#tads o #tadsb)
|
|
$anuncios = $elemento->findElements(
|
|
WebDriverBy::xpath('ancestor::*[@id="tads" or @id="tadsb"]')
|
|
);
|
|
if (count($anuncios) > 0) {
|
|
$esPatrocinado = "(Patrocinado)";
|
|
}
|
|
$lista_resultados .= "Resultado #" . sprintf("%2d",($index + 1)) . " " . $esPatrocinado . ": " . substr($url,0,50) . "\n";
|
|
echo " Resultado #" . sprintf("%2d",($index + 1)) . " " . $esPatrocinado . ": " . substr($url,0,50) . "\n";
|
|
}
|
|
echo "\n";
|
|
|
|
// Comprobamos si el primer resultado está en nuestra lista de sitios oficiales
|
|
echo "3 - Comprobando el resultado con la lista de sitios oficiales.\n";
|
|
echo "4 - Resultado del test: ";
|
|
if (in_array($primero, $sitios_oficiales)) {
|
|
$detectado = false;
|
|
$logs .= "✅ ¡Test exitoso! El primer resultado es un sitio oficial --> ". $primero .".\n";
|
|
} else {
|
|
$detectado = true;
|
|
$logs .= "❌ Test fallido. El primer resultado no es un sitio oficial --> ". $primero .".\n";
|
|
}
|
|
echo $logs;
|
|
echo "5 - Se realizó una captura de pantalla.\n";
|
|
$screenshotPath = './capturas/google_search.png'; // Asegúrate de que este directorio sea escribible
|
|
$driver->takeScreenshot($screenshotPath);
|
|
|
|
// Se realiza una captura de pantalla
|
|
echo "6 - Se envia correo electrónico con la captura de pantalla del sitio detectado.\n";
|
|
if ($detectado) {
|
|
|
|
$mail = new PHPMailer(true);
|
|
try {
|
|
// Configuración del servidor SMTP
|
|
$mail->isSMTP();
|
|
$mail->Host = 'smtp.gmail.com';
|
|
$mail->SMTPAuth = true;
|
|
$mail->Username = $email; // Tu correo de Gmail
|
|
$mail->Password = $password; // Tu contraseña
|
|
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
|
|
$mail->Port = 587;
|
|
$mail->isHTML(true);
|
|
// Remitente y destinatario
|
|
$mail->setFrom('ccharlaselenium@gmail.com', 'Monitoreo Buscador - Posible phishing de sitio Gugler');
|
|
$mail->addAddress('exequiel84@gmail.com'); // Destinatario
|
|
|
|
// Asunto y cuerpo del correo
|
|
$mail->Subject = 'Monitoreo Buscador - Posible phishing de sitio Gugler';
|
|
$cuerpo_mail = 'Se ha detectado un posible intento de phishing del sitio oficial que se esta comprobando. Se incluye una captura de pantalla con los resultados de la prueba y el listado completo de resultados.<br><br> <b>Resultado del test:</b> <br><br>';
|
|
$cuerpo_mail .= $logs;
|
|
$cuerpo_mail .= "<br><br> <b>Lista de resultados:</b> <br><br>";
|
|
$cuerpo_mail .= nl2br($lista_resultados);
|
|
$cuerpo_mail .= "<br> Quedamos a disposición ante cualquier consulta.<br> Saludos cordiales.<br> Sector de Monitoreo.";
|
|
$mail->Body = $cuerpo_mail;
|
|
// Adjuntar la captura de pantalla
|
|
$mail->addAttachment($screenshotPath);
|
|
// Enviar el correo
|
|
$mail->send();
|
|
echo '7 - Se envió correo con el caso detectado.\n';
|
|
} catch (Exception $e) {
|
|
echo "7 - Hubo un error al enviar el correo: {$mail->ErrorInfo}";
|
|
}
|
|
} else { echo "7 - No se envió correo ya que no se detectó un sitio no oficial.\n";}
|
|
|
|
} catch (Exception $e) {
|
|
echo "Importante, hubo un error el test: " . $e->getMessage() . "\n";
|
|
} finally {
|
|
// Cerrar el driver
|
|
$driver->quit();
|
|
}
|
|
?>
|
|
|