Re: exploit From: Felipe Kellermann To: Giovani Facchini Date: 28-04-2004 16:30 On Wed, 28 Apr 2004 9:09am -0300, Giovani Facchini wrote: > isso foi o que eles mandaram... > Como eu não sei nada de perl não entendi a solução... fazer o que?! :/ > (Pode fazer `forward' ou seja lá o que for para eles. Também poderíamos enviar para o autor do tal "desafio", que está feliz por já saber como escrever `defaced' em hexa! Ótimo! Que *repugnante*... ;-)) Esse "desafio" é _estúpido_. Eu não resisto. :-) Faz tempo que eu não falo ou penso sobre esse assunto. Por coincidência, a última vez que eu brevemente voltei a esse assunto foi em ~2001, com o Gera. Até pelo meu interesse por SPARC, e as idéias que ele estava bolando nessa época. Eu acho que esse negócio é coisa do passado.... E também, é estúpido. Sobre o uso do `perl', eles usam para fazer uma `grande string'. Aquele operador `x' vai fazer o papel de multiplicador. A idéia é a mesma de qualquer outro `repetidor' (jot, seq, ...). Aquele `-e' que eles usam é para fazer uma expressão inline, `perl -e expressão'. Normalmente usado nos `perl pie', não sei se eles usam... wehee Sobre o "desafio", tecnicamente: Eu não gostaria de falar isto: Mas esse exemplo de exploração do Júlio é descaradamente uma fraude. Eu não sei se há alguma graça ou motivo para isso ser feito, mas qualquer um, que alguma vez já se interessou pelo assunto, sabe, já à primeira vista, que isso não vai funcionar. O motivo é que todos sabem, e principalmente via "Gera", que, por ele não estar evitando aquela `exit', ele está perdendo tempo querendo "explorar" alguma coisa. Além do tal `exploit' dele não evitar isso, ele também faz mais um monte de coisas sem sentido. Não há nem razões técnicas, e muito menos teóricas, para que essa idéia possa funcionar. Esse caso tem um exemplo particularmente interessante de um caso que tem uma dependência mutuamente exclusiva entre o tipo de exploração e o tipo de arquitetura que seria usada para fazer essa exploração. Em um caso de crescimento contrário da stack, nós só temos uma alternativa: Precisamos garantir que aquele `i' continue em `0' (e é por isso que ele já foi declarado no stack como `0'), garantir que nós vamos subir até `I' e colocar o valor `0xdefaced' nele e ainda colocar o `\x64 \x34' logo no início de `b'. Mais ou menos isto: ``RRRRRRRRRRRRRRRRRRRR0dcefaded"00''. Garantindo isso, tu vai conseguir ter o valor seguro para explorar. Aqui tem outro problema, que está relacionado com a heap. Mas esse caso também é muito simples. A questão é que tu precisa chegar nesse ponto. Os dois motivos que poderiam influenciar no conteúdo são: Um tipo desconhecido de valor para `b' {e, ou} um tipo diferente de endian. Mesmo sabendo o valor tu precisaria saber qual é a ordem da máquina. Se não chegou até aqui, só tá perdendo tempo e querendo enganar... :-) Se ele achar que eu estou enganado, podemos continuar essa thread. Apesar de eu considerar um assunto pra lá de atrasado (não usam W^X? SSP?), esse assunto às vezes pode ser legal e interessante. Mas, sem mentiras, não há motivos para fazer isso. Só quero lembrar a ele que o `bang' com `uid 0' é `#' e não `$' :-) Que coisa... Eu não entendo. -- Felipe Kellermann