Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Устройство конвейера и перенаправление ввода-вывода (глава для начинающих)

Rusa


Устройство конвейера и перенаправление ввода-вывода (гла& 424f58e #1074;а для начинающих)



В этой гла& 424f58e #1074;е:

MS DOS

UNIX

и . Это справедливо для большинства консольных приложений MS DOS Windows x Windows NT

UNIX

copy MS DOS MS DOS con

copy con myfile

Hello, World!

^Z

copy myfile con

Hello, World!

Начинающим, вероятно, следует пояснить - символ <Ctrl Z> указывает программе на завершение ввода и конец файла. В самом файле он отсутствует.

SRC/io.c

#include <stdio.h>

int main(int argc, char *argv[])

return 0;

ASCII

io.exe con con

Hello, Sailor!

0x48

0x65

0x6C

0x6C

0x6F

0x2C

0x20

0x53

0x61

0x69

0x6C

0x6F

0x72

0x21

0xA

con con .

В стандартной библиотеке языка Си для этой цели используются файловые манипуляторы stdin и stdout, связанные со стандартными устройствами ввода и вывода соответственно. Модернизированный вариант программы может выглядеть так (на диске он находится под именем "/SRC/iostd.c

#include <stdio.h>

int main(int argc, char *argv[])

return 0;

Но как в этом случае заставить программу выводить результаты работы в файл, а не терминал? Стандартный ввод-вывод выгодно отличается возможностью направить его куда угодно, указав в командной строке специальный символ ">" для вывода и "<" для ввода.



Например, используем ранее созданный файл myfile и выведем результат работы iostd в файл "out txt

iostd.exe <myfile >out.txt

copy out.txt con

0x48

0x65

0x6C

0x6C

0x6F

0x2C

0x20

0x53

0x61

0x69

0x6C

0x6F

0x72

0x21

0xA

/SRC/iohack.c UNIX

#include <stdio.h>

main()

запрашиваемого файла! Например

iohack.exe

$Hello!

Hello!

iohack.exe

$<myfile

Hello, Sailor!

.

UNIX, встретив конструкцию "</etc/passwd" выдаст на экран содержимое файла паролей, или любого другого файла который будет запрошен. С первого взгляда ничего страшного в этом нет, - программа наследует все привилегии пользователя и получает доступ к тем, , файлам, которые пользователь мог бы просмотреть и без помощи этой программы, скажем, командой "cat

UNIX SendMail

SendMail не одинок, и подобные ошибки допущены во множестве приложений, щедро разбросанных по серверам. Часто для их поиска даже не требуется кропотливого изучения исходных текстов программы - достаточно во всех вводимых строках (или полях заголовка) подставить символ "<" и посмотреть на реакцию программы - нет-нет, да повезет!

ls sort ls' (или dir в MS DOS temp sort r

ls >temp

$ sort -r <temp

temp

sioux.pl

passwd

iohack.o

iohack.c

index_hack.htm

demos.txt

bomb.pl

attack2.htm

или труба (от английского pipe



". Разумеется, стандартный ввод первой программы в цепочке и стандартный вывод последней могут быть перенаправлены с помощью символов "<" и ">" соответственно (результат попытки перенаправления остальных непредсказуем, и обычно разрывает цепочку конвейера).

FIFO First Input First Output

txt

$ ls | sort -r

sioux.pl

passwd

iohack.o

iohack.c

index_hack.htm

demos.txt

bomb.pl

attack2.htm

UNIX MS DOS

dir /b | sort /r

sioux.pl

passwd

iohack.o

iohack.c

index_hack.htm

demos.txt

bomb.pl

attack2.htm

MS DOS

UNIX yes y

UNIX y yes MS DOS yes yes

txt UNIX MS DOS MS DOS

SRC/pipe.hack.pl

open(FH,<>);

if (FH)

ls|

sioux.pl

passwd

iohack.o

iohack.c

index_hack.htm

demos.txt

bomb.pl

open Perl негла& 424f58e #1089;но поддерживает конвейер! Вместо открытия файла происходит его запуск! Вряд ли стоит объяснять, какие последствия вытекают из этого! Так, одна из версий SendMail позволяла в качестве обратного адреса отправителя письма подставить строчку "|/usr/bin/sh" и оболочка действительно запускалась, предоставив атакующему привилегированный доступ в систему (от имени демона).



код . Аналогично перенаправлению ввода-вывода, конвейерные дырки могут быть обнаружены не только тщательным изучением исходных тестов приложений, но и простой подстановкой знака "|" во все доступные строки ввода и поля заголовков. Не так уж и редко это срабатывает.

UNIX Windows x Windows NT pipe hack pl Windows

dir |

Том в устройстве F не имеет метки

Серийный номер тома: 2F42-0AE8

Содержимое папки F:\TPNA\src

<ПАПКА> 28.06.00 23:14 .

<ПАПКА> 28.06.00 23:14 ..

IO  C 294 06.07.00 10:29 io.c

IO OBJ 775 06.07.00 10:18 io.obj

IO EXE 32 768 06.07.00 10:18 io.exe

IOSTD C 228 06.07.00 10:30 iostd.c

IOSTD OBJ 627 06.07.00 10:26 iostd.obj

IOSTD EXE 32 768 06.07.00 10:26 iostd.exe

MYFILE 16 06.07.00 10:53 myfile

OUT TXT 89 06.07.00 10:53 out.txt

IOHACK C 295 06.07.00 15:18 iohack.c

IOHACK OBJ 827 06.07.00 14:58 iohack.obj

IOHACK EXE 32 768 06.07.00 14:58 iohack.exe

PIPEHA~1 PL 65 06.07.00 22:29 pipe.hack.pl

12 файлов 101 520 байт

1 710 641 152 байт свободно

Методы противодействия и защиты от подобных ошибок будут описаны в гла& 424f58e #1074;е «Атака на WEB-сервер», а ниже будет объяснено почему символ конвейера появляется то слева от команды (как в примере с "|/usr/bin/sh"), то справа ("dir |"). Вообще-то «классический» конвейер состоит минимум из двух программ, и вывод первой из них попадает на ввод второй. То есть конструкцию "program 1 | program 2" можно изобразить как "stdin   program 1   program 2  stdout". А в случае, когда используется всего лишь одна программа, вывод программы, стоящей до символа конвейера, перенаправляется в открываемый функцией "open

/SRC/pipe.test.pl

open(FH,<>);

if (FH)

x

echo Hello, Sailor |

Этот текст прочитан из файла:Hello, Sailor

|echo Hello, Sailor!

Hello, Sailor!

echo open манипулятор, откуда он может читается оператором "<>" и выводится на экран вызовом "printf

echo print

И так-то славно дело пошло! Я сижу на мачте верхом, кручу бочку одной рукой, другой снимаю с конвейера готовую продукцию, передаю Фуксу, тот Лому, а Лом считает, записывает и выпускает на берег. Часа за три весь остров заселили.






Document Info


Accesari: 3745
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2025 )