Все, что нужно для этого вписать в body следующий вызов
body onunload="alert(document.body.innerHTML)"
После обновления страницы можно читать код в нормальном виде.
Забавный взлом с элементами волшебства :)
Читать дальше...
Записки злого сисадмина...
body onunload="alert(document.body.innerHTML)"
cat /proc/cpuinfo
sudo dmidecode -t memory
free
gurza@cave:~$ free
total used free shared buffers cached
Mem: 509144 502728 6416 0 13348 66424
-/+ buffers/cache: 422956 86188
Swap: 995988 494180 501808
$date="11.08.1984";
$arr = explode('.',$date);
$day = $arr[0];
$month = $arr[1];
$year = $arr[2];
$date1 = arr[2].'-'.arr[1].'-'.arr[0];
echo (gmdate('Y', time() - strtotime($date1)) - 1970);
The valid range of a timestamp is typically from Fri, 13 Dec 1901 20:45:54 GMT to Tue, 19 Jan 2038 03:14:07 GMT. (These are the dates that correspond to the minimum and maximum values for a 32-bit signed integer). However, before PHP 5.1.0 this range was limited from 01-01-1970 to 19-01-2038 on some systems (e.g. Windows).
Замечание: В семействе ОС Microsoft Windows системные библиотеки, реализующие эту функцию, содержат ошибки, поэтому функция gmdate() на этих системах не поддерживает отрицательные значения аргумента timestamp.
В операционных системах Unix/Linux эта проблема не возникает, так как системные библиотеки в этих системах реализованы корректно.
PHP не может исправить ошибки в системных библиотеках. Для решения этой и подобных проблем обращайтесь к производителю операционной системы.
if (isset($_GET['bday'])) {
if (!eregi('^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4}$', $_GET['bday'])) {
$message = 'Некорректный формат даты.
';
$message .= 'Введите пожалуйста Вашу дату рождения в формате дд.мм.гггг (например, 29.11.1985).';
} else {
$arr = explode('.',$_GET['bday']);
$day = $arr[0];
$month = $arr[1];
$year = $arr[2];
$bday = $arr[2].'-'.$arr[1].'-'.$arr[0];
if ( $bday=strtotime($bday) ) {
$bday = (gmdate('Y', time() - $bday) - 1970);
} else {
$valid = 'false';
$message = 'Некорректный формат даты.
';
$message .= 'Введите пожалуйста Вашу дату рождения в формате дд.мм.гггг (например, 29.11.1985).';
echo "[{val:'$valid',msg:'$message'}]"; exit;
}
if ( $bday>=18 ) {$valid = 'true'; $message='';
} else {
$valid='false';
$message = 'Извините, но согласно правилам регистрироваться на сайте могут только совершеннолетние.';
}
}
}
root@debian:~# apt-get install iproute
root@cave:~# dmesg | grep -i ethВ примере, показанном в листинге выше, все достаточно просто. В компьютере установлено только два контроллера, причем меня интересует настройка только Ethernet сетевой карты Realtek, которой соответствует сетевой интерфейс eth0. Приведу еще один пример
r8169 Gigabit Ethernet driver 2.2LK-NAPI loaded
eth0: RTL8169s/8110s at 0xffffc20000030000, 00:0f:ea:66:40:f6, IRQ 193
eth1394: eth0: IEEE-1394 IPv4 over 1394 Ethernet (fw-host0)
r8169: eth1: link up
root@gn:~# zcat /var/log/messages.6.gz | grep -i ethВо-первых, стоит заметить, что использовалась другая команда для определения соответствия сетевых карт и интерфейсов. Дело в том, что команда dmesg выводит на экран только содержание файла /var/log/messages, но так как сервер gn, листинг с которого приведен в примере, имеет uptime порядка 50 дней, то записи стоит искать в более старом файле. Сетевой интерфейс eth0 соответствует интеловской сетевой карте, встроенной на материнской плате, eth1 и eth3 – две гигабитные карты, которые когда-то использовались для соединения двух различных сегментов сети. Получив эту информацию можно переходить к настройке.
Nov 10 19:11:51 gn kernel: e100: eth0: e100_probe: addr 0xfe9fd000, irq 169, MAC addr 00:30:48:22:2B:F8
Nov 10 19:11:51 gn kernel: e1000: eth1: e1000_probe: Intel(R) PRO/1000 Network Connection
Nov 10 19:11:51 gn kernel: e1000: eth3: e1000_watchdog: NIC Link is Up 1000 Mbps Full Duplex
root@cave:~# cat /etc/network/interfacesРассмотрим настройки более подробно. Запись auth eth0 означает, что интерфейс должен быть автоматически запущен при загрузке операционной системе.
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth1
iface eth1 inet static
address 192.168.1.11
netmask 255.255.255.0
gateway 192.168.1.1
iface eth1 inet staticОзначает, что происходит конфигурирование сетевого интерфейса eth1 и что IP-адрес будет задан статическим.
address 192.168.1.11 – непосредственно IP-адрес, присваиваемый сетевому интерфейсу;Настройка динамического IP адреса
netmask 255.255.255.0 – маска сети;
gateway 192.168.1.1 – шлюз, который должен осуществлять маршрутизацию в сети.
root@cave:~# cat /etc/network/interfacesЛегко видеть, что строка iface eth1 inet dchp определяет получение сетевого адреса по протоколу DHCP, то есть сетевой интерфейс получит динамический IP-адрес.
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth1
iface eth1 inet dchp
root@cave:~# dpkg -l | grep dhcpЗамечание. Обычно, для облегчения работы пользователей компьютерной сети системный администратор настраивает DHCP сервер таким образом, чтобы он передавал адреса первичного и вторичного DNS серверов при выдачи динамического адреса. Поэтому для некоторых настройка сети ограничивается записью двух строчек в файл /etc/network/interfaces. Но не лишним будет знать, как все-таки прописать руками доверенные DNS сервера в систему.
ii dhcp3-client 3.0.4-13 DHCP Client
ii dhcp3-common 3.0.4-13 Common files used by all the dhcp3* packages
root@cave:~# vim /etc/resolv.confАдреса прописываются следующим образом
nameserver 192.168.1.1Отметим, что записей nameserver может быть произвольное количество.
nameserver 4.2.2.2
auto eth0Конечно, вместо 01:02:03:04:05:06 – необходимо указать нужный Вам MAC. Отметим, что при использовании стационарного IP-адреса MAC-адрес будет прописываться точно также.
iface eth0 inet dhcp
hwaddress ether 01:02:03:04:05:06
root@cave:~# ifconfig eth0 down
root@cave:~# ifconfig eth0 hw ether 01:02:03:04:05:06
root@cave:~# ifconfig eth0 up
root@cave:~# /etc/init.d/networking restart
root@debian:~# ip addr showПозволяет вывести на экран сведения о всех сетевых интерфейсах системы. Для вывода информации по конкретному интерфейсу нужно использовать команду
root@debian:~# ip addr show eth0Чтобы узнать какие используются DNS-сервера в системе, необходимо выполнить команду nslookup.
gurza@hird:~$ nslookupВ приведенном примере на компьютере hird используются два DNS-сервера, с IP-адресами 193.232.114.64 и 212.192.229.127 соответственно. Связь осуществляется по стандартному 53 порту.
> server
Default server: 193.232.114.64
Address: 193.232.114.64#53
Default server: 212.192.229.127
Address: 212.192.229.127#53
gurza@hird:~$ nslookupа также доменные имена, чтобы получить в ответ IP-адреса.
> 4.2.2.2
Server: 193.232.114.64
Address: 193.232.114.64#53
Non-authoritative answer:
2.2.2.4.in-addr.arpa name = vnsc-bak.sys.gtei.net.
gurza@hird:~$ nslookupВременно перенаправить запрос к другому DNS-серверу можно следующим образом
> gurza.ipib.msu.ru
Server: 193.232.114.64
Address: 193.232.114.64#53
Name: gurza.ipib.msu.ru
Address: 212.192.237.30
gurza@hird:~$ nslookup
> server 4.2.2.2
Default server: 4.2.2.2
Address: 4.2.2.2#53
> lab110.imec.msu.ru
Server: 4.2.2.2
Address: 4.2.2.2#53
Non-authoritative answer:
lab110.imec.msu.ru canonical name = hird-u.imec.msu.ru.
Name: hird-u.imec.msu.ru
Address: 193.232.114.5
SSH-2.0-OpenSSH_4.3p2 Debian-9etch3
root@cave:~# cat /etc/apt/sources.list | grep deb-srcПредполагаем, что в системе установлены пакеты up-to-date, если нет, то в целях обеспечения безопасности пакеты требуется обновить.
#deb-src http://security.debian.org/ etch/updates main contrib
deb-src ftp://debian.sectorb.msk.ru/debian/ etch main
deb-src ftp://debian.sectorb.msk.ru/debian-security/ etch/updates main
root@cave:~# apt-get install build-essential dpkg-dev debhelper devscripts fakerootВ моем случае, так как установка производилась с netinstall дистрибутивом, требуется установить дополнительные пакеты (листинг только для build-essential)
The following extra packages will be installed:Подтвердите установку выбрав Y (Do you want to continue [Y/n]? Y
binutils cpp cpp-4.1 dpkg-dev g++ g++-4.1 gcc gcc-4.1 libc6-dev libssp0 libstdc++6-4.1-dev linux-kernel-headers make patch
The following NEW packages will be installed:Также необходимо установить все библиотеки, которые необходимы для создания пакета, который Вы хотите модифицировать, а именно нужно выполнить команду
binutils build-essential cpp cpp-4.1 dpkg-dev g++ g++-4.1 gcc gcc-4.1 libc6-dev libssp0 libstdc++6-4.1-dev linux-kernel-headers make patch
0 upgraded, 15 newly installed, 0 to remove and 0 not upgraded.
Need to get 14.7MB of archives.
root@cave:~/openssh-4.3p2# apt-get build-dep openssh-server
root@cave:~# apt-get source openssh-serverВ результате ее выполнения в директории, откуда была запущенна команда появятся несколько файлов, в моем случае
root@cave:~# ls -la | grep opensshЕсли почитать немного исходники, а именно файлы openssh-4.3p2/version.h и openssh-4.3p2/debian/rules (можете добавить себе памятку, что debian/rules - это скрипт, который осуществляет сборку пакетов, иными словами, это Makefile), то становится понятным, как формируется баннер OpenSSH сервера. Номер версии и параметр PORTABLE (в данном случае приставка p2 в названии пакета) сервера определяется в version.h
drwxr-xr-x 7 root root 12288 2008-12-25 15:45 openssh-4.3p2
-rw-r--r-- 1 root root 275859 2008-09-17 01:02 openssh_4.3p2-9etch3.diff.gz
-rw-r--r-- 1 root root 1310 2008-09-17 01:02 openssh_4.3p2-9etch3.dsc
-rw-r--r-- 1 root root 920186 2006-05-12 16:17 openssh_4.3p2.orig.tar.gz
#define SSH_VERSION "OpenSSH_4.3"Название дистрибутива в version.h содержится в
#define SSH_PORTABLE "p2"
#define SSH_EXTRAVERSIONопределяется данный параметр в файле rules
SSH_EXTRAVERSION := Debian-$(shell dpkg-parsechangelog | sed -n -e '/^Version:/s/Version: //p' | sed -e 's/[^-]*-//')
/* #define SSH_RELEASE SSH_VERSION SSH_PORTABLE SSH_EXTRAVERSION */Необходимо также внести изменения в changelog (чтобы при обновлении репозитария наши изменения не были затерты).
#define SSH_RELEASE "OpenSSH_0.9beta OpenBSD3.1"
openssh (1:4.3p2-9etch3FakeBanner) stable-security; urgency=highЭтот способ прост, но он правильнее выбрать второй, так как он приучает к хорошему тону, красивому стилю и т.д.
dch -iкоторая откроет файл debian/changelog для редактирования в текстовом редакторе по-умолчанию. Разница с 1-ым способом в том, что сразу будут сформированы блоки, согласно правилам описания модификаций пакетов (с данными правилами можно ознакомиться здесь). Ниже приведен мой пример записи в changelog
openssh (1:4.3p2-9etch3FakeBanner) stable-security; urgency=low
* only fake banner
-- gurza Thu, 25 Dec 2008 16:38:41 +0300
root@cave:~/openssh-4.3p2# dpkg-buildpackage -rfakerootи откидываемся на спинку кресла. Все таки, имхо, GNU/Debian это дистрибутив для ленивых системных администраторов, которые не любят ждать выполнения ./configure && make && make install. Ну ради изменения баннера, или ради какой-нибудь более высокой цели подождать иногда приходится. Результатом выполнения данной команды будут deb пакеты в дирриктории выше.
root@cave:~# dpkg -r openssh-server openssh-clientУдаление производится в смысле deinstall
deinstallТо есть удаляются только бинарные файлы, а файлы конфигурации и сгенерированные ключи остаются на месте. Теперь необходимо установить модифицированные пакеты
The package is selected for deinstallation (i.e. we want to remove all files, except configuration files).
root@cave:~# dpkg -i openssh-server_4.3p2-9etch3FakeBanner_amd64.deb openssh-client_4.3p2-9etch3FakeBanner_amd64.debПроверим теперь баннер OpenSSH сервера
root@cave:~# telnet localhost 8022Все работает именно так, как мы и хотели.
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
SSH-2.0-OpenSSH_0.9beta OpenBSD3.1
^]
telnet> quit
Connection closed.
root@cave:~# dpkg -l | grep opensshКак видно из листинга, приведенного выше, на моем сервере сейчас стоит только клиент. Ищем нужный пакет сервера.
ii openssh-client 4.3p2-9etch3 Secure shell client, an rlogin/rsh/rcp repla
root@cave:~# apt-cache search openssh
openssh-server - Secure shell server, an rshd replacement
root@cave:~# apt-get install openssh-server
root@cave:~# netstat -tanp | grep LISTENИз листинга становится понятным, что открыт 22 порт на всех сетевых интерфейсах. Прослушивает его sshd, pid (process identify – номер процесса) его 4098. Нас, как привередливых администраторов, уже сейчас не должно устраивать то, что сервис доступен на всех интерфейсах (возможно, что в целях безопасности администратор должен получать доступ только с определенных локальных интерфейсов), а также то, что используется неактуальный (по крайней мере, для меня) протокол tcp6 по верх tcp4. Поэтому переходим к конфигурированию под себя нового сервиса.
tcp6 0 0 :::22 :::* LISTEN 4098/sshd
# Package generated configuration fileПоэтому, если что-то не ясно сначала лучше набрать
# See the sshd(8) manpage for details
root@cave:~# man 8 sshd
Port 22
Port 8022
AddressFamily inet
Protocol 2
ListenAddress 0.0.0.0
TCPKeepAlive no
ClientAliveInterval 20
ClientAliveCountMax 3
PermitRootLogin no
PermitEmptyPasswords no
StrictModes yes
LoginGraceTime 60
MaxStartups 3:30:10
AllowUsers gurza admin
AllowUsers gurza@172.16.16.1
AllowGroups staff
PasswordAuthentication yes
ChallengeResponseAuthentication, задавДанная опция может понадобиться, если для аутентификации пользователя будут использоваться pam-модули. Для меня это излишнее, поэтому я отключаю. Если Вам вообще ничего не говорит словосочетание pam-модуль, то тоже смело отключайте, на функциональности sshd не отразится.
ChallengeResponseAuthentication no
GSSAPIAuthentication noДля любознательных оставлю ссылки на ресурсы, где можно прочитать про Kerberos, GSSAPI
KerberosAuthentication no
HostbasedAuthentication no
SyslogFacility AUTHОпция SyslogFacility определяет, список каких событий администратор хочет видеть в лог-файле сервера. Меня интересует только авторизация (а вообще доступны: DAEMON, USER, AUTH, LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7). Опция LogLevel определяет уровень детализации сообщений. Практика показала, что самым оптимальным (в смысле, стремление к единице отношения информативность информации и ее количество) является пара AUTH, INFO для соответствующих опций.
LogLevel INFO
Banner /etc/ssh/bannerОпция PrintMotd выводит при подключении к sshd так называемое сообщение дня, что на самом деле является содержимым файла /etc/motd. Опция PrintLastLog очень полезна, так как она отображает информацию о том, когда Вы последний раз и с какого хоста заходили на сервер. Иногда она позволяет определить, что кто-то подобрал Ваш пароль и теперь может как угодно распоряжаться Вашим аккаунтом. Опция Banner определяет место положения файла-баннера, который будет выведен на экран, при попытке подключиться к серверу sshd. Обязательно убедитесь в существовании файла, указанного в качестве параметра опции Banner.
PrintMotd no
PrintLastLog yes