Видео смотреть бесплатно

Смотреть жесткий видео

Официальный сайт interaktiveboard 24/7/365

Смотреть видео бесплатно

sensor_ua 17.04.2011 16:10

How-to`sЗапуск программ в guest-машине VirtualBox из-под host-Linux

Запускать приложения предлагается старинным способом - посредством кроссплатформенной утилиты netcat.

Запуск netcat на 2-х компьютерах приводит к созданию TCP-подключения с указанными реквизитами и замыканием стандартного ввода на сетевой вывод и наоборот, стандартного вывода на сетевой ввод.

В рамках задачи запуска приложений требуется на стороне исполнителя сборка netcat с поддержкой ключа запуска на выполнение -e сторонней программы (что в принципе открывает брешь уязвимости). Для Windows такую сборку можно скачать на securitylab.ru.

Для обмена потоками ввода-вывода выберем какой-нибудь непримечательный номер порта, например, 4455.

Если в командной строке Windows XP запустить
nc -l -p 4455 -d -L -e "cmd.exe"
то netcat будет слушать порт 4455 и всё полученное передавать cmd.exe.

Далее описываю действия для Ubuntu 10.10 и VirtualBox 4.04.
Утилиту netcat доустанавливаем обычным способом
sudo apt-get install netcat
Для изоляции виртуальной машины от внешней сети создаём в Ubuntu средствами user-mode-linux виртуальный сетевой адаптер и разрешаем работу по выбранному порту. Для этого инсталлируем
sudo apt-get install user-mode-linux
и добавляем в /etc/rc.local запуск виртуального сетевого адаптера (имя ему выбрал vbox0) от имени пользователя, запускающего VirtualBox, при этом выбираем IP для guest-машины 192.168.56.3 и разрешаем прохождение пакетов между виртуальным интерфейсом vbox0 и этим IP по порту 4455.

$ sudo gedit /etc/rc.local
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

TUN=vbox0 #имя предполагаемого хост-интерфейса
IP=192.168.56.1 #IP-адрес хост-интерфейса
USERNAME=vitaly #ваш логин
NETMASK=24 #маска подсети
tunctl -t $TUN -u $USERNAME
ifconfig $TUN up
ifconfig $TUN $IP/$NETMASK
arp -Ds $IP $TUN pub
iptables -A FORWARD -i vbox0 -d 192.168.56.3 -p tcp --dport 4455 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/conf/$TUN/proxy_arp

exit 0
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Далее пробуем запустить виртуальный сетевой адаптер
sudo /etc/init.d/rc.local stop
sudo /etc/init.d/rc.local start

Если после этого в выдаче ifconfig виртуальный сетевой адаптер не появился, то, к сожалению, требуется перезагрузка.

Тогда в виртуальной Windows не забудем запустить
nc -l -p 4455 -d -L -e "cmd.exe"
и при запуске в Ubuntu
$ nc 192.168.56.3 4455
увидим приглашение типа такого
Microsoft Windows XP
(C) Copyright 1985-2001 Microsoft Corp.

c:\Pr\NetCat>

Далее можно, например, запустить калькулятор в Windows просто введя calc, а далее, в следующем приглашении exit. Guest-Windows, запущенная в бесшовном режиме (штатная возможность для современных версий VirtualBox) позволит увидеть запущенное приложение (калькулятор виндовс) прямо на десктопе Linux (Gnome для Ubuntu).

Но это случай, когда файлы лежат на машине с Windows. Для запуска файлов, размещенных на разделах host-а, можно сделать пути к файлам доступными для guest-системы и передать их для выполнения той же cmd.exe

Для этого даём виртуальной машине средствами VirtualBox доступ к общей папке - у меня это /home/vitaly/vboxshare, замонтированная в guest-Windows как раздел x:. В неё укладываю симлинк на домашнюю директорию
ln -fs /home/vitaly /home/vitaly/vboxshare/vhome
В /home/vitaly/my создал файл скрипта, обозвал "windows". Дополнительная фишка - конвертирование кодировок, чтобы нормально работало с кириллицей в путях.

Прошу сильно не пинать за силу скриптостроения;) - получилось вот как:
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
#! /bin/bash
#
# echo '"'x:$1'"'|iconv -f utf-8 -t cp866 |sed 's/\/home\/vitaly/\/vhome/g'|sed 's/\//\\/g'> a.txt
# echo '"'x:$1'"'|iconv -f utf-8 -t cp866 |sed 's/\/home\/vitaly/\/vhome/g;s/\//\\/g' > a.txt
# echo exit >> a.txt
echo -e '"'x:$1'"\nexit'|iconv -f utf-8 -t cp866 |sed 's/\/home\/vitaly/\/vhome/g;s/\//\\/g' > a.txt
nc -i 1 192.168.56.3 4455 < a.txt
rm a.txt
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
(192.168.56.3 - адрес виртуалки, 4455 - порт, на котором в виртуалке висит netcat и передаёт параметры cmd.exe). Делаем скрипт исполняемым
chmod +x /home/vitaly/my/windows
В строке запуска файла с определенным разрешением, например,exe, в подменю "Открыть в программе" nautilus-а выбираю /home/vitaly/my/windows и "запомнить". Не забываем в виртуальной Windows создать bat-файл с содержимым
nc -l -p 4455 -d -L -e "cmd.exe"
и положить линк на него в автозагрузку. Одно НО - придётся его закрывать руками при каждом запуске Windows - это не страшно, так как ключ -d осталяет работать netcat в фоне в режиме демона.

Теперь правый клик в Nautilus-е на файле *.exe, выбираем windows, а далее поднимается приложение в запущенной виртуальной (удаленной) Windows прямо на рабочем столе Gnome. Точно так же можно передать файл с любым зарегистрированным в Windows расширением и тогда поднимется соответствующая обслуживающая программа.

Описанные действия возможно произвести и с гостевыми *nix системами, но потребуется соответствующая сборка netcat. В случае с Ubuntu 10.10 x86_64 оказалось достаточно удалить пакет netcat-openbsd, собрать пакет из исходников через
$ ./configure
$ sudo checkinstall
в директории с распакованными исходниками, а затем обычная установка deb-пакета. Далее
$ nc -l -p 4499 -e /bin/bash

В VMware Player 3.1.4 не удалось пройти по симлинкам в сетевой шаре. Вместо симлинков годится использование mount --bind /home/user/ home/user/sharefolder/homemnt. Использовал Host-only сетевой адаптер и виртуальный адаптер от VMware - vmnet1 - подсеть 192.168.174.255. Передача пути немного отличается, потому что сетевая шара монтируется в виртуальной Windows несколько иначе, чем принято в VirtualBox - у меня получилось z:\vboxshare.
Способы автоматического закрытия окна с работающим netcat-ом можно найти на форумах хакеров.


Тэги: virtualbox
+ 10 -
Похожие Поделиться

kma21 17.04.2011 17:28 #
+ 0 -
Статейка годная, но уберите это под cut, пожалуйста.
sensor_ua 17.04.2011 17:32 #
+ 0 -
Извиняюсь. Положил под кат. Почему-то пропала(не видел/не нашёл) кнопа редактирования
Daria 17.04.2011 18:09 #
+ 0 -
в последнем скрипте можно соединить оба sed, разделив команды точкой с запятой.

писать во временный файл совсем не обязательно, так как можно тот же exit добавить в уже существующий echo.
sensor_ua 17.04.2011 18:31 #
+ 0 -
exit дописывается в следующую, а не в текущую строку. Строки нужно передавать отдельно - сначала вызов программы, потом, через паузу, exit. Не нашел другого способа. Варианты приветствуются.
Daria 18.04.2011 04:00 #
+ 0 -
"/nexit"
Daria 17.04.2011 18:27 #
+ 0 -
#! /bin/bash
#
SOMECOMMAND=$(echo x:$1 |iconv -f utf-8 -t cp866 |sed 's/\/home\/vitaly/\/vhome/g;s/\//\\/g')"/nexit"

nc -i 1 192.168.56.3 4455 "$SOMECOMMAND"
я думаю, что будет работать, но не проверяла.

зы: с техникой, представленной в статье, я ещё
обязательно поиграюсь.
sensor_ua 17.04.2011 18:51 #
+ 0 -
Попробовал. К сожалению так не получилось.
Daria 18.04.2011 04:04 #
+ 0 -
ну или разбирайся в синтаксисе nc, чтоб он читал стринг команды, или наивно echo $SOMECOMMAND > a ; nc < a; rm a
Daria 18.04.2011 04:04 #
+ 0 -
экранирование нужно конечно вокруг $SOMECOMMAND
sensor_ua 18.04.2011 09:58 #
+ 0 -
Не получается сделать с помощью echo перевод строки. Пробовал просто пару букв и превод и с прямым, и с обратным слешом - не хочет:(
sensor_ua 18.04.2011 10:09 #
+ 0 -
echo -e сработало
sensor_ua 17.04.2011 18:54 #
+ 0 -
Один sed работает. Спасибо!
wiz 18.04.2011 09:54 #
+ 0 -
ssh hostname cmd
kstep 18.04.2011 10:42 #
+ 0 -
Это-то понятно. Но тут кагбе ещё одна альтернатива, что очень даже неплохо.
sensor_ua 18.04.2011 11:01 #
+ 0 -
Ещё есть cryptcat - позиционируется как netcat с шифрованием.
kstep 18.04.2011 12:44 #
+ 0 -
А ещё в голову пришла идея, которая требует проверки, но очень даже может сработать. Пустить неткат на двух машинах в конвеере с gpg или openssl с шифрованием на одной стороне и дешифровкой на другой с соответствующими ключами. Должно получиться забавно.
kstep 18.04.2011 12:51 #
+ 0 -
Только что попробовал в разных терминалах:

cat wget-log | openssl enc -e -aes-256-cbc | nc -l -p 11111
nc localhost 11111 | openssl enc -d -aes-256-cbc

Работает!
sensor_ua 18.04.2011 13:51 #
+ 0 -
Вот статейка интересная по использованию netcat
koom 18.04.2011 22:02 #
+ 0 -
Серьёзно думаешь виндовое использование тут будет интересно?
Хотя бы это давал: http://handynotes.ru/2010/01/unix-utility-netcat.html
sensor_ua 19.04.2011 09:24 #
+ 0 -
Оно кроссплатформенное - сало как сало. Когда-то узнал о netcat отсюда.

Смотреть онлайн бесплатно

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн