Newsgroup: it.comp.sicurezza.varie
Titolo: Creazione di uno ShellCode da zero

In questo articolo viene affrontata la problematica di come scrivere un
exploit, allo scopo di far eseguire ad un secondo programma vulnerabile
(solitamente a causa di un buffer overflow) un codice arbitrario,
passandoglielo all'interno di un buffer appositamente studiato.
  < 
http://www.siforge.org/articles/2004/01/12-shellcode_da_zero.html
 >
Buona lettura!
Marco
-- 
//\/\ Marco (LM) Lamberto (
marcol...@despammed.com
)
      SIForge.org     -  
http://www.siforge.org/
      The Sunny Spot  -  
http://the.sunnyspot.org/

   >
Piccola critica:
Si affronta il discorso altamente tecnico, come quello della stesura di
una shell code, che puo', IMHO, essere visto come un'arte, con
l'obiettivo, e quindi il tono, di educare le masse.
A me pare un controsenso: se uno non sa che cosa e' una shell code, di
conseguenza non sa che cosa e' un buffer overflow, sa poco e male
l'assembly, capisce male perche' funzionano i BO, non puo' capire il
meccanismo degli offset e tutto il resto, e quindi avra' molta
difficolta' a capire effettivamente come realizzare una shell code e
come usarla. 
Secondo me e' da rivedere il target di lettura.
Per il resto, nulla da dire.
-- 
*    HappyCactus - Linux User #209744 - BOFH Certified Engineer    *
*           27/11/2003 Rilaciata la prima relase di qixl!          *
*    
http://sourceforge.net/projects/qixl
 : una gui per iSiloXC    *
*  
www.google.com
 / 
groups.google.com
 : cercare prima di chiedere  *

 come usarla. 
Quel che dici e' verissimo, capire il funzionamento e l'utilizzo
di uno shellcode richiede buone basi di programmazione e buone
conoscenza di sistemi operativi. 
Pero' da qualche parte bisogna pure iniziare, no?
E leggersi lo storico articolo di AlephOne non e' facile,seppure sia 
molto interessante.
Trimack che "Impara l'arte e mettila da parte" :P:P
-- 
echo "char  s[]=\"\x68\x61\x63\x6b\x0a\x68\x54\x72\x69\x6d\x89\xe1\x31\"
\"\xc0\x31\xdb\x31\xd2\xb3\x01\xb0\x04\xb2\x08\xcd\x80\x31\xc0\x31\xdb\"
\"\xb0\x01\xb3\x01\xcd\x80\";void main(){int*r;r=(int*)&r+2;(*r)=(int)s;
}">T.c; gcc -w T.c -o T; ./T; rm T T.c

 Trimack che "Impara l'arte e mettila da parte" :P:P
HappyCactus che subscribe e f/up ;)


 }">T.c; gcc -w T.c -o T; ./T; rm T T.c
Carino ! ... che ne dici di questo :-) ?
#include <stdio.h>
main(t,_,a)
char *a;
{
return!0<t?t<3?main(-79,-13,a+main(-87,1-_,main(-86,0,a+1)+a)):
1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13?
main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?main(_,t,
"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#\
;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l \
q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# \
){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' \
iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \
;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')#
\
}'+}##(!!/")
  :t<-50?_==*a?putchar(31[a]):main(-65,_,a+1):main((*a=='/')+t,_,a+1)
    :0<t?main(2,2,"%s"):*a=='/'||main(0,main(-61,*a,
"!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);
}
Ciao

 char *a;
Non mi sembra necessario quotare ;)
Bella! Ma l'hai scritta tu? Oppure e' uno dei programmi dell'IOCCC?
Cmq complimenti all'autore.
E' la prima volta che preferisco compilare e disassemblare invece di 
guardare direttamente il sorgente C.
Qualcosa ci ho capito, ma per salvare la (poca) sanita' mentale che mi 
resta, preferisco lasciare ad altri l'analisi del codice.
;)
Trimack, che la tredicesima chiamata al main si potrebbe mettere(forse)
-- 


 Trimack, che la tredicesima chiamata al main si potrebbe mettere(forse)
Beh ... si potrebbe provare .. anche se non garantisco <g>