1
I’m trying to avoid writing off the application due to the excess buffer, but I don’t know how. The application is simple: it shows a message that asks the user to type something, then takes this typed data and shows on the screen. However, when the user exceeds the established limit the overflow occurs.
Code:
section .data
userMsg db 'Digite um número : '
lenUserMsg equ $ - userMsg
dispMsg db 'O número digitado foi : '
lenDispMsg equ $ - dispMsg
section .bss
num resb 5
section .text
global main
main:
;User prompt
mov edx, lenUserMsg
mov ecx, userMsg
mov ebx, 1
mov eax, 4
int 80h
;Lendo e guaradando os dados do usuário
mov eax, 3
mov ebx, 2
mov ecx, num
mov edx, 5
;5 bytes (1 para sinal) da informação
int 80h
;Mostra a mensagem 'O número digitado foi: '
mov eax, 4
mov ebx, 1
mov ecx, dispMsg
mov edx, lenDispMsg
int 80h
;Mostra o número digitado
mov eax, 4
mov ebx, 1
mov ecx, num
mov edx, 5
int 80h
;Saindo
mov eax, 1
mov ebx, 0
int 80h
Example of execution:
Everything is fine for the byte limit -- here I type 1234:
rafael@Gauss:~ $ ./entrada
Digite um número: 1234
O número digitado foi: 1234
Here with buffer overflow, even running an operating system command -- in this example I type 12345ls to run ls (command to show files in linux) in overflow:
rafael@Gauss:~ $ ./entrada
Digite um número: 12345ls
O número digitado foi: 12345rafael@Gauss:~ $ ls
entrada entrada.asm entrada.o
How do I -- in a simple way -- so that this does not occur and at the same time keep the byte limit ? This is possible?
I understand there’s a security breach in this program.
– user38530