Преди няколко дни попаднах на holynix. Това е дистрибуция подготвена за хакване на базата на някое Ubuntu с инсталирани apache + mysl + php и някаква страничка. Целта е да се експлоитнат стартираните апликации и услуги да се достигне до root права. Сега няма да описвам как се чупят услугите и апликациите а как се решава проблема с не стартираща се мрежа. При мен използвах virtualbox за да си стартирам holynix  v1. Пускам си аз имиджа и гледма за ново устройство в мрежата ми – реших да го направя като хората да не знам кое е IP-то за екплойтване, ама не намерих такова. Рестартирах и махнах тихото стартиране и видях, че по време на стартиране на мрежата реве, че няма /var/run/network/ifstate. Решението е елементарно трябва при стартиране на мрежата да се провери дали съществуват съответната директория и ако не да се зaдаде и същото за файлът. Това е тривиална операция в /etc/init.d/networking в началото на функцията start се добавят следните 2 реда


[ -d /var/run/network ] || mkdir /var/run/network
[ -f /var/run/network/ifstate ] || touch /var/run/network/ifstate

Това добре ясно е решението обаче нямаме парола за root потребителя 😀 Сега следва забавната част и първия ни hack 😉 За да се вземе root потребител в grub менюто трябва да направим малко магии. Трябва да натиснем esc бързо преди непосредствено стартиране на системата ще се покаже менюто. След това с Е влизаме в режим на редактиране на менюто в kernel частта накрая добавяме init=/bin/bash и променяме ro на rw за да може файловата система да ни е с права за писане при монтирането след като вземе root shell-a.

След това поправяме файлът за мрежовите интерфейси. Трябва да променим /etc/network/interfaces да се вдига eht1 и да взима по dhcp настройки за мрежата.  Защото по подразбиране търси eth0 а ние имаме ново устройство което ще се инициализира с eth1. Рестартирате и вече трябва да имато ново устройство в мрежата си.

ps Малка подсказка за да пробиете login частта в полето за паролата има sql injection 😉 Приятно хахорване

ps 2 При мен съм ползвал VirtualBox за визуализация в bridge mode за мрежата.

Enhanced by Zemanta

Около половин година след последния ми анонс по Dreambox monitoring ситестемата ми мога да анонсирам новата и вероятно някоя от последните си версии на Nuki. Версията беше готова още преди  2 месеца но къде от мързел къде заради дебъгване нещата се позабавиха с анонса. От няколко дни работи на 32 dreambox 500-s и общо взето резултатите са много добри. Промените са много – премахната е идиотската звисимост от Linux server на които да се прехвърлят логовете – вече е необходимо да имате apache + php, защото новата система за писане на логове е като се подава параметри към един php скрипт на сървъра. Отделно съм променил скрипта да работи и без сървърна част – ако имате малко сателитни приемници не е смислено да имате постоянно пуснат сървър от които да се взима инфото затова може да се нанесе хардкоднато в скрипта с 2 променливи информацията за CAM-а. Също така съм декларирал допълнителна променлива за debug – ако не искате няма да ви мята логове – отново малоумен пропуск в сравнение с преди 🙂 Леки поправики по кода бяха напревени, че приличаше като писан от полуграмотен олигофрен (не че несъм де). Остране ни бяха 2 критични грешки в кода водещи до прекратяване на работа на скрипта в някакъв случаен момент, отново олигофренски пропуски от моя страна. Общо взето писането не беше много просто трябваше да се помисли да се направи като хората, че busybox и ash не са най лесни неща за опитомяване. Тоя път мисля да спестя голямата тирада с кода и направо да обясня променливите коя за какво е и какви манипулации могат да се направят с нея (новите) 🙂


SERVER="192.168.100.1"
 STANDALONE="FALSE" #using like stand alone app no server side depends ; )
 HCAM1="" ## if starting like stand alone app give me CAM namezzz if HCAM1 is empty its means chanel is free
 HCAM2="" ## CAM2 name
 PORT="666" # port rockzzz : D : )))))))))))))))))
 IP=$(ifconfig eth0 | grep inet | awk '{print $2}' | sed -e 's@addr:@@')
 FILE='/tmp/debug'
 INFO='/tmp/info_file'
 NC=$(which nc)
 WGET=$(which wget)
 MAX_DAYS="10"
 TIMEOUT="600"
 MAX=70 #max cpu usage per process
DEBUGING="TRUE" #if u wanna script send debug information set DEBUGING to TRUE if SEVERLESS is set to true this var will be skiped
 NEWDBGSTYLE="TRUE" #debuging new style sending info to apache derectly, old style using nc

Така очевидно имената на променливити говорят сами за себе си достатъчно но все пак и аз да кажа някоя и друга умна дума.

STANDALONE е една от най важните променливи ако е сетната на TRUE няма да се правят обръщения към сървъра и няма да изисква вече зависимост от сървър ако я използвате трябва да сложите стойности и на следната HCAM1 (незнам защо съм я кръстил така не помня вече но няма и значение). Ако няма стоиност в нея а скритпа е самостоятелен скрипта приема че ще работи на некриптиран канал и няма прави проверка за декриптиращ модул, ако има ще провери според зададената стоиност. HCAM2 е незадължителна ако декодиращия ви модул използва само 1 процес да речем CCcam например.

DEBUGING втората интересна променлива ще ви прлюе информация или ще пази мълчание според зависи каква стойност сте забили. Авотматично преминава в тих режи ако STANDALONE е TRUE

NEWDBGSTYLE трата важна променлива. Тя определя как ще се прехвърлят логовете към сървъра. Ако е TRUE ще е по новия начин без идиостката зависимост от netcat. Ако все пак си държите на стария метод слагате FALSE. В общи линии това са нещата на които трябва да наблегнете но мисля, че промените въпреки че са кардинални ще останат една идея прозрачни заради зададените стойности по подразбиране 🙂

Определено вече съм много доволен как се получиха нещата – скрипта стана достатъчно гъвкав отпднаха идиотките зависимост на допълнителни файлове за функции както и вече отпдна и зависимост на nc мисля или пък нуждата от сървър и прочие не всеки ползва 30+ box-a че да има и сървър или пък може да има само някакъв домаше router. Все още има какво да се подобри но засега мисля да се въздържам от таквиа неща защото не е наложително 🙂

Файловете както обикновено се намират в директорията  а крипта за въвеждане на логовете може да свалите от тук

И по случай добрия скрипт едно ускорено парче за всички ускорители 😀

Enhanced by Zemanta

При мен интернета ми се рутира от домашно рутерче D-Link DIR-600 което на което съм инсталирал DD-WRT . Общо взето никак не лош маршрутизатор подържа относително добър максимум стабилна работа и N wi-fi стандарт. Отделно DD-WRT софтуера ми дава голяма свобода на настройки и вуду магии.

Зад него в локалната ми мрежа е сървъра на които се хоства скромния ми блог. Общо взето драмите се получават от факта, че когато се изпрати запитване към dns-a отговаря публичното ми IP на което съм направил forwarding към хоста на блог-а ми и когато заявката от вътрешната мрежа не е необходимо да се обръщам към публичния си адреса. Решението на проблема се оказа повече от елементарен трябва да се направи запис в /etc/hosts файлът в които да се посочи domain-a и IP адреса. Това става посредством следните 2 команди

echo '192.168.1.2 host.com' >> /etc/hosts
killall -HUP dnsmasq

Тях ги слагате като startup script в administration ->commands часта. След това си рестартирате рутера или дайте run на командата за да се изпълни и сте готови вече хоста коиот сте описали от вътрешната ви мрежа ще бъде видим с локалния ви адрес.

Вчера ми пристигна 1650mHa батерия за HTC Kaiser-a ми, което е с 300mHa повече от оригиналната 😎 . Понеже ползвам телефон които е non native Android се налга да се направят няколко магии за да отчита правилно батерията в %-ти. Единия по лесния вариант е ако ползвате стандартен kernel си го едитвате с Atools като задавате новата стойност за mHa на батерията флашвате с новото NBH и дерзаете. Другия вариант е да ползвате нестандартно ядро което не се поддава на atools обработка и да направите грозена кръпка на създалия се проблем.

Първо нека да разясним малко теория и след това да пристъпим към кръпката. Когато правите промени по ядрото си с atools вие правите фини настройки на система в /sys/module/ и след това според зависи за вашия хардуер. При мен важния файл който отговаря за настройката на батерията се намира в /sys/module/board_kaiser_battery/parameters/battery_capacity. В него се съдържа колко единици е количеството на вашата батерия и на база на цифрата вътре се изчислява на колко % е вашата батерия в момента. Казвам единици защото не се пише чисто число в mHa а се изчислява на база на формулата

mHa*1.6=единици

В моя случай това ще рече 1650*1,6=2640 единици, сиреч това ще ни е съдържанието на файлчето. Речено сторено набързо в конзолата си набивам едно


echo 2640 > /sys/module/board_kaiser_battery/parameters/battery_capacity

Така до тука нещата са кристално ясни какво трябва да се прави, къде и защо. Обаче тука идва и момента за малката подробност, файлът в /sys директорията си занулява съдържанието след всеки рестарт на телефона, което не е много оферта. Затова следващата стъпка е да го сложим горния ред init-a на нашия Android.

Тъй като несъм съм го сложил в init-аискам да изчакам няколко дни преди да го направя. Когато го набия в init-a ще драсна набързо едно дребно how to 🙂

От близо година не бях работил по демочето ми NUKI. Днес ми остана време да пооправя нещата защото имаше доста неща които не си бяха съвсем добре. Добавих малко нова функционалност. Пренаредих кода, с повече функции така го скъсих и стана по прегледен.

Основната нова функционалност която вкарах е signal trap-а. В някои момент както си върти демона dreambox приемника решава да го убие и по този начин спиря мониторинг процеса ми, което само по себе си е доста неприятен момент. А няма как да разбера какво се случва тъй като мястото за логове е безбожно малко и трябва да правя правя сложни схеми с мрежови споделяния с които не ми се занимава. В обши линии signal trap-a е приятното свойство на bash скриптовете да прихващат сигнали от изходи или такива подадени им от kernel-a чрез kill да речем 😉 и по този начин можем да предотвратим някои от незабавно последващите събития. Само да вмъкна че SIGKIL или kill -9 не може да бъде прехванат и предотвратен, така е по дизайн в ядрото. То терминира директно подадения му PID. Сега и съответния код


#trapping signals I know -9 dosent work but we try it just in case ; )
trap on_exit 0 14 1 2 9 13 15 6 8 4 3 11 5
on_exit () {
make_debug 10 #unexpected error
#reboot now if we hawe trapped signal
reboot -d 0
exit 0
}

Първия ред ни декларира какво действие да се предприеме и при кои сигнали ще прихващаме повече за сигналите man signals 😉 В случая мен тези ме интересуват. Както се вижда водят до една проста функциика която прави дебъг съобщение и рестартира приемника. Несъм обеден, че ще доведе до резултата които очаквам, понеже мисля че всичко което пречи е избива с kill -9 но нищо не пречи да се пробва.

Другите кардинални промени са функциите повечето неща които се повтарят от кода ги наблъсках в функции, че беше малко неприятен за гледане не, че сега е де 😉 Имах една лека драма с return в bash-а – сложих си return в една функция и очаквам поведение като всички други познати ми езици за програмиране, но се оказа че return връща само integer стойности и то максимум 2 😀 а аз исках да ми върне string. Настана една грозна свинщина. Решението на проблема е елементарно


#---cuted---

if [ $T -eq $N ]
 then
 echo "Cam is down! Reboot..."
make_debug 4 # cam is down
 else
echo $rcam
 fi

# ---cuted----

#finding real cam1
 rcam1=$(find_cam $cam1)

Първата част е края на функцията ми и чрез echo изплювам резултата.  Взимането му е елементарно с последния ред в горния пасаж.

Хммм мисля, че това е интересната част от кода.

Искам да изкажа благодарност на вдъхновението 😉

http://www.youtube.com/watch?v=SilMJ0O13UI&feature=related