Старый 27.05.2014, 22:36   #3221
S00pY
 
Аватар для S00pY
 
Регистрация: 06.07.2010
Сообщений: 39
Репутация: 35
По умолчанию race condition ?

Цитата:
Сообщение от beau Посмотреть сообщение
Возможно ли обойти проверки и залить .php?
PHP код:
<?php
function required_fields_validate(){

    
$errors = array();
    
$allowed_types = array('jpg''jpeg''gif''png''bmp');

    if (empty(
$_POST['firstname'])){
        
$errors[] = 'Please enter your first name.';
    }

    if (empty(
$_POST['lastname'])) {
        
$errors[] = 'Please enter your last name.';
    }

    if (empty(
$_POST['email'])) {
        
$errors[] = 'Please enter your email address.';
    }

    if (!empty(
$_POST['photo_filename'])) {
        
$file_ext strtolower(pathinfo($_POST['photo_filename'], PATHINFO_EXTENSION));
        if (!
in_array($file_ext$allowed_types)) {
            
$errors[] = 'Please upload a valid photo. Accepted file types: ' implode(', ',$allowed_types) . '.';
            
unlinkABSPATH '/wp-content/uploads/' $_POST['photo_filename']); // delete the invalid upload
        
}
    } else {
        
$errors[] = 'Please upload a photo.';
    }

    if (
count($errors) > 0) {

        
// echo "<div class=\"errors\">";
        // echo "<p>The following errors must be corrected:</p><ul><li>";
        // echo implode("</li><li>", $errors);
        // echo "</li></ul>";
        // echo "</div>";
        
return false;

    } else {

        return 
true;

    }

}

if (
$_SERVER['REQUEST_METHOD'] == 'POST') {

    if (
required_fields_validate()) {

        
$firstname  $_POST['firstname'];
        
$lastname   $_POST['lastname'];
        
$post_title $firstname ' ' $lastname;
        
$email      $_POST['email'];
        
$filename   $_POST['photo_filename'];
        
$opt_in     = (isset($_POST['opt_in'])) ? 'true' 'false';

        
$return_id add_submission($post_title$email$filename$opt_in); // returns the post id if successful, false if not

        
if ($return_id) {

            
header'Location: ' get_bloginfo('url') . '/' $return_id);

        } else {

            
header'Location: ' get_bloginfo('url')); // should add some sort of error message here

        
};

    }

}
Покажите весь код.
Судя по
Цитата:
unlink( ABSPATH . '/wp-content/uploads/' . $_POST['photo_filename']); // delete the invalid upload
заливка уже произошла и необходимо обратиться к залитому скрипту до вызова unlink.
S00pY вне форума   Ответить с цитированием
Старый 27.05.2014, 23:24   #3222
beau
 
Регистрация: 04.04.2014
Сообщений: 18
Репутация: 0
По умолчанию

Код который я указал выше подключается в страницу и просто ловит POST запрос:
PHP код:
<?php get_header(); ?>
<?php
    
// $srmp = ($_SERVER['REQUEST_METHOD'] == "POST") ? true : false;
?>
<div class="bd">

    <div class="upload-area">
        <h3>Post photo!</h3>
        <ul class="actions<?php //if ($srmp) echo ' actions-hidden' ?>">
            <li class="upload">
                <a id="upload">Upload</a>
            </li>
            <li class="webcam">
                <a id="webcam">Webcam</a>
            </li>
        </ul>

        <div class="upload-form-area<?php //if ($srmp) echo ' upload-form-area-show' ?>">

            <form method="post" enctype="multipart/form-data" action="<?php bloginfo('template_directory'); ?>/upload.php">

                <div class="input webcam">
                    <div id="photo"></div>
                    <a id="photo-cap">CAPTURE</a>
                    <span id="photo-timer"></span>
                    <div id="preview">
                        <canvas width="484" height="363" id="canvas"></canvas>
                        <a id="another">Take another</a>
                    </div>
                </div>

                <div class="input text first-name-wrap">
                    <label>First name</label>
                    <input class="text first-name" type="text" name="firstname" value="<?php if ($_POST['firstname']) echo $_POST['firstname']; ?>" />
                </div>

                <div class="input text">
                    <label>Last name</label>
                    <input class="text last-name" type="text" name="lastname" value="<?php if ($_POST['lastname']) echo $_POST['lastname']; ?>" />
                </div>

                <div class="input text">
                    <label>Email</label>
                    <input class="text email" type="email" name="email" value="<?php if ($_POST['email']) echo $_POST['email']; ?>" />
                </div>

                <div class="input file">
                    <label>Photo</label>
                    <input id="photo_upload" class="" type="file" name="photo_upload" />
                    <input id="photo_filename" class="hidden" type="hidden" name="photo_filename" value="">
                </div>

                <input id="upload_type" class="hidden" type="hidden" name="upload_type" value="file" />

                <div class="input submit">
                    <input class="image" type="image" src="<?php bloginfo('template_directory'); ?>/img/submit.png" alt="Submit" />
                    <a id="cancel">Cancel</a>
                </div>

            </form>
        </div>

    </div>

    <?php get_template_part('submission''gallery'); ?>

</div>

<?php get_footer(); ?>
beau вне форума   Ответить с цитированием
Старый 27.05.2014, 23:49   #3223
HeartLESS
 
Регистрация: 25.04.2012
Сообщений: 101
Репутация: 31
По умолчанию

не, тут вопрос в том, где он берет имя, чтобы файл положить в /wp-content/uploads/

Так как очевидно, что если отправить пустой photo_filename, то unlink не выполнится.

Ну и в принципе можно race condition попробовать.
__________________
Jokester: Ок, с тобой проще согласиться чем переубедить. :)
HeartLESS вне форума   Ответить с цитированием
Старый 28.05.2014, 04:41   #3224
NameSpace
 
Регистрация: 21.12.2012
Сообщений: 146
Репутация: 52
По умолчанию

S00pY, см. https://rdot.org/forum/showthread.php?p=35497#post35497

beau, Код всё равно не весь (или загрузки файлов нет). Попробуйте найти обращение к $_FILES.
NameSpace вне форума   Ответить с цитированием
Старый 28.05.2014, 11:18   #3225
S00pY
 
Аватар для S00pY
 
Регистрация: 06.07.2010
Сообщений: 39
Репутация: 35
Smile

Цитата:
Сообщение от NameSpace Посмотреть сообщение

Спс, крутая тема
НО обратно таки, нужен весь код.


Зы: Проверил на окошках(windows 7,PHP Version 5.4.17) - unlink норм работает.
S00pY вне форума   Ответить с цитированием
Старый 29.05.2014, 05:57   #3226
beau
 
Регистрация: 04.04.2014
Сообщений: 18
Репутация: 0
По умолчанию

Не успел я затестиь способ, снесли все скрипты
Есть новый вопрос
Есть цмс, написана на YII фреймворке.
Есть возможность создавать кастомные поля для профиле юзера. При создании можно указать такие вот данные:
Other Validator {"file":{"types":"jpg, gif, php, js, php4, phps"}} // этот валидатор на деле не действует, действует из Widget Parameters
Widget UWfile
Widget parametrs - тут выскакивает окно с требованием заполнить путь, минимальный размер, допустимые расширения.

Проблема №1 - после сохранения формы удачно заливается файл с расширением .php и другими в дефолтную папку, которая указана в попапе из Widget parametrs, но в итоге 404 =\
Проблема №2 - при смене пути дефолтной папки на другую, после сохранения изменений не остается, пробовал юзать {"path":"images/avatars"} - всё равно выдается урл на якобы залитый файл в дефолтную папку и в итоге 404 опять.

пс в базу все изменения пишутся для параметров виджета, валидатора и тп.

Вообще все файлы и картинки льются на поддомен, хотя урл на залитый файл мне выдаёт в папку на текущем домене(пс при заливке через добавленную мной форму). Пробовал искать на поддомене, но там тоже ничего нет.

Последний раз редактировалось beau; 29.05.2014 в 05:59..
beau вне форума   Ответить с цитированием
Старый 30.05.2014, 13:46   #3227
Hodor
 
Регистрация: 16.04.2014
Сообщений: 5
Репутация: 0
По умолчанию как найти диру для заливки шелла? mysql inj

Добрый день.
перелопатил весь форум, но не нашел ответа( поиск по форуму очень криво работает почему то(
ситуация стандартная
есть mysql инъекция
права у пользователя
privilege: ALTER
privilege: ALTER ROUTINE
privilege: CREATE
privilege: CREATE ROUTINE
privilege: CREATE TEMPORARY TABLES
privilege: CREATE USER
privilege: CREATE VIEW
privilege: DELETE
privilege: DROP
privilege: EXECUTE
privilege: FILE
privilege: INDEX
privilege: INSERT
privilege: LOCK TABLES
privilege: PROCESS
privilege: REFERENCES
privilege: RELOAD
privilege: REPLICATION CLIENT
privilege: REPLICATION SLAVE
privilege: SELECT
privilege: SHOW DATABASES
privilege: SHOW VIEW
privilege: SHUTDOWN
privilege: SUPER
privilege: UPDATE

движок сайта скорее всего вордпресс, так как имеются бд вида ****_wp, но точно не уверен.
подскажите какими способами можно найти полный пусть до веб диры или папку для записи?
в каком направлении копать... на чтение права есть... /etc/passwd прочитать могу

буду рад как линкам на мануалы, так и авторским ответам.
спасибо
Hodor вне форума   Ответить с цитированием
Старый 30.05.2014, 14:43   #3228
Ravenous
 
Аватар для Ravenous
 
Регистрация: 14.07.2012
Сообщений: 64
Репутация: 1
По умолчанию

Hodor, если есть WP, юзай раскрытие пути в http://[path]/wp-includes/rss-functions.php

Как правило конфиг файл апача недоступен даже для чтения.
Если это shared хостиг, можно поискать phpinfo и раскрытия на соседях, если это одиночный VPS надо узнать что за дистр, и посмотреть как там располагается веб дира.
в /etc/passwd можно узнать пользователя и его диру на случай если html-дира лежит где-то типа /home/$username$/httpocs/www

Последний раз редактировалось Ravenous; 30.05.2014 в 14:56..
Ravenous вне форума   Ответить с цитированием
Старый 30.05.2014, 16:41   #3229
m0Hze
 
Аватар для m0Hze
 
Регистрация: 05.07.2010
Сообщений: 326
Репутация: 129
По умолчанию

Прочитай wp_options where option_name='siteurl'
Это будет урл до блога на вп, далее wp_users прочитать хеши (или изменить их если есть пма, или заюзать user_activation_key), далее через админку вп вливайся.
__________________
multi-vpn.biz - Первый VPN на Эллиптических кривых со скоростью света.
m0Hze вне форума   Ответить с цитированием
Старый 30.05.2014, 18:48   #3230
NameSpace
 
Регистрация: 21.12.2012
Сообщений: 146
Репутация: 52
По умолчанию

Цитата:
Сообщение от Hodor
подскажите какими способами можно найти полный пусть до веб диры или папку для записи?
Если включен open_basedir, то путь может быть в php.ini.

В дампах из гугла (filetype:sql wordpress dump) пути почти всегда всплывают в wp_options, чаще всего в опции recently_edited, но желательно просмотреть всю таблицу.
NameSpace вне форума   Ответить с цитированием
Ответ

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

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

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

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

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



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