2021-08-05 00:18:37 +00:00
|
|
|
|
id: php-scanner
|
|
|
|
|
|
|
|
|
|
info:
|
|
|
|
|
name: PHP Scanner
|
|
|
|
|
author: geeknik
|
|
|
|
|
severity: info
|
|
|
|
|
tags: php,file
|
|
|
|
|
|
|
|
|
|
file:
|
|
|
|
|
- extensions:
|
|
|
|
|
- html
|
2021-08-27 14:15:22 +00:00
|
|
|
|
- htm
|
2021-08-05 00:18:37 +00:00
|
|
|
|
- phtml
|
|
|
|
|
- php
|
|
|
|
|
- php3
|
|
|
|
|
- php4
|
2021-08-27 14:15:22 +00:00
|
|
|
|
- php5
|
|
|
|
|
- phps
|
|
|
|
|
- cgi
|
|
|
|
|
- inc
|
|
|
|
|
- tpl
|
|
|
|
|
- test
|
|
|
|
|
- module
|
|
|
|
|
- plugin
|
2021-08-05 00:18:37 +00:00
|
|
|
|
|
|
|
|
|
extractors:
|
|
|
|
|
- type: regex
|
|
|
|
|
# Investigate for possible SQL Injection
|
|
|
|
|
# Likely vulnerable: $dbConn->GetRow("SELECT * FROM users WHERE id = $user_id");
|
|
|
|
|
# Likely not Vulnerable: $dbConn->GetRow("SELECT * FROM users WHERE id = ?", array(‘$user_id’));
|
|
|
|
|
regex:
|
|
|
|
|
- '(?i)getone|getrow|getall|getcol|getassoc|execute|replace'
|
|
|
|
|
- type: regex
|
|
|
|
|
# Warn when var_dump is found
|
|
|
|
|
regex:
|
|
|
|
|
- 'var_dump'
|
|
|
|
|
- type: regex
|
|
|
|
|
# Warn when display_errors is enabled manually
|
|
|
|
|
regex:
|
|
|
|
|
- 'display_errors'
|
|
|
|
|
- type: regex
|
|
|
|
|
# Avoid the use of eval()
|
|
|
|
|
regex:
|
|
|
|
|
- 'eval'
|
|
|
|
|
- 'eval\((base64|eval|\$_|\$\$|\$[A-Za-z_0-9\{]*(\(|\{|\[))'
|
|
|
|
|
- type: regex
|
|
|
|
|
# Avoid the use of exit or die()
|
|
|
|
|
regex:
|
|
|
|
|
- 'exit'
|
|
|
|
|
- 'die'
|
|
|
|
|
- type: regex
|
|
|
|
|
# Avoid the use of logical operators (ex. using and over &&)
|
|
|
|
|
regex:
|
|
|
|
|
- 'and'
|
|
|
|
|
- type: regex
|
|
|
|
|
# Avoid the use of the ereg* functions (now deprecated)
|
|
|
|
|
regex:
|
|
|
|
|
- 'ereg'
|
|
|
|
|
- type: regex
|
|
|
|
|
# Ensure that the second parameter of extract is set to not overwrite (not EXTR_OVERWRITE)
|
|
|
|
|
regex:
|
|
|
|
|
- 'extract'
|
|
|
|
|
- type: regex
|
|
|
|
|
# Checking output methods (echo, print, printf, print_r, vprintf, sprintf) that use variables in their options
|
|
|
|
|
regex:
|
|
|
|
|
- 'echo'
|
|
|
|
|
- 'print'
|
|
|
|
|
- 'printf'
|
|
|
|
|
- 'print_r'
|
|
|
|
|
- 'vprintf'
|
|
|
|
|
- 'sprintf'
|
|
|
|
|
- type: regex
|
|
|
|
|
# Ensuring you're not using echo with file_get_contents
|
|
|
|
|
regex:
|
|
|
|
|
- 'file_get_contents'
|
|
|
|
|
- type: regex
|
|
|
|
|
# Testing for the system execution functions and shell exec (backticks)
|
|
|
|
|
regex:
|
|
|
|
|
- '\\`'
|
|
|
|
|
- type: regex
|
|
|
|
|
# Use of readfile, readlink and readgzfile
|
|
|
|
|
regex:
|
|
|
|
|
- 'readfile'
|
|
|
|
|
- 'readlink'
|
|
|
|
|
- 'readgzfile'
|
|
|
|
|
- type: regex
|
|
|
|
|
# Using parse_str or mb_parse_str (writes values to the local scope)
|
|
|
|
|
regex:
|
|
|
|
|
- 'parse_st'
|
|
|
|
|
- 'mb_parse_str'
|
|
|
|
|
- type: regex
|
|
|
|
|
# Using session_regenerate_id either without a parameter or using false
|
|
|
|
|
regex:
|
|
|
|
|
- 'session_regenerate'
|
|
|
|
|
- type: regex
|
|
|
|
|
# Avoid use of $_REQUEST (know where your data is coming from)
|
|
|
|
|
regex:
|
|
|
|
|
- '\\$_REQUEST'
|
|
|
|
|
- type: regex
|
|
|
|
|
# Don't use mysql_real_escape_string
|
|
|
|
|
regex:
|
|
|
|
|
- 'mysql_real_escape_string'
|
|
|
|
|
- type: regex
|
|
|
|
|
# Avoiding use of import_request_variables
|
|
|
|
|
regex:
|
|
|
|
|
- 'import_request_variables'
|
|
|
|
|
- type: regex
|
2021-09-30 22:43:42 +00:00
|
|
|
|
# Avoid use of GLOBALS
|
2021-08-05 00:18:37 +00:00
|
|
|
|
regex:
|
2021-09-30 22:43:42 +00:00
|
|
|
|
- 'GLOBALS'
|
2021-08-05 00:18:37 +00:00
|
|
|
|
- type: regex
|
|
|
|
|
regex:
|
2021-09-30 22:43:42 +00:00
|
|
|
|
- '_GET'
|
2021-08-05 00:18:37 +00:00
|
|
|
|
- type: regex
|
|
|
|
|
regex:
|
2021-09-30 22:43:42 +00:00
|
|
|
|
- '_POST'
|
|
|
|
|
- type: regex
|
|
|
|
|
regex:
|
|
|
|
|
- '_COOKIE'
|
|
|
|
|
- type: regex
|
|
|
|
|
regex:
|
|
|
|
|
- '_SESSION'
|
2021-08-05 00:18:37 +00:00
|
|
|
|
- type: regex
|
|
|
|
|
# Ensure the use of type checking validating against booleans (===)
|
|
|
|
|
regex:
|
|
|
|
|
- '\\=\\=\\='
|
|
|
|
|
- type: regex
|
|
|
|
|
# Ensure that the /e modifier isn't used in regular expressions (execute)
|
|
|
|
|
regex:
|
|
|
|
|
- '\\/e'
|
|
|
|
|
- type: regex
|
|
|
|
|
# Using concatenation in header() calls
|
|
|
|
|
regex:
|
|
|
|
|
- 'header'
|
|
|
|
|
- type: regex
|
|
|
|
|
# Avoiding the use of $http_raw_post_data
|
|
|
|
|
regex:
|
|
|
|
|
- '\\$http_raw_post_data'
|
2021-08-27 14:15:22 +00:00
|
|
|
|
- type: regex
|
|
|
|
|
# interesting functions for POP/Unserialize
|
|
|
|
|
regex:
|
|
|
|
|
- "__autoload"
|
|
|
|
|
- "__destruct"
|
|
|
|
|
- "__wakeup"
|
|
|
|
|
- "__toString"
|
|
|
|
|
- "__call"
|
|
|
|
|
- "__callStatic"
|
|
|
|
|
- "__get"
|
|
|
|
|
- "__set"
|
|
|
|
|
- "__isset"
|
|
|
|
|
- "__unset"
|
2021-08-27 14:17:57 +00:00
|
|
|
|
- type: regex
|
2021-08-27 14:15:22 +00:00
|
|
|
|
# phpinfo detected
|
|
|
|
|
regex:
|
|
|
|
|
- "phpinfo"
|
|
|
|
|
- type: regex
|
|
|
|
|
# registerPHPFunctions() allows code exec in XML
|
|
|
|
|
regex:
|
|
|
|
|
- "registerPHPFunctions"
|
|
|
|
|
- type: regex
|
|
|
|
|
regex:
|
|
|
|
|
- "session_start"
|
|
|
|
|
- type: regex
|
|
|
|
|
# dBase DBMS
|
|
|
|
|
regex:
|
|
|
|
|
- "dbase_open"
|
|
|
|
|
- type: regex
|
|
|
|
|
# DB++ DBMS
|
|
|
|
|
regex:
|
|
|
|
|
- "dbplus_open"
|
|
|
|
|
- "dbplus_ropen"
|
|
|
|
|
- type: regex
|
|
|
|
|
# Frontbase DBMS
|
|
|
|
|
regex:
|
|
|
|
|
- "fbsql_connect"
|
|
|
|
|
- type: regex
|
|
|
|
|
# Informix DBMS
|
|
|
|
|
regex:
|
|
|
|
|
- "ifx_connect"
|
|
|
|
|
- type: regex
|
|
|
|
|
# IBM DB2 DBMS
|
|
|
|
|
regex:
|
|
|
|
|
- "db2_(p?)connect"
|
|
|
|
|
- type: regex
|
|
|
|
|
# FTP server
|
|
|
|
|
regex:
|
|
|
|
|
- "ftp_(ssl_)?connect"
|
|
|
|
|
- type: regex
|
|
|
|
|
# Ingres DBMS
|
|
|
|
|
regex:
|
|
|
|
|
- "ingres_(p?)connect"
|
|
|
|
|
- type: regex
|
|
|
|
|
# LDAP server
|
|
|
|
|
regex:
|
|
|
|
|
- "ldap_connect"
|
|
|
|
|
- type: regex
|
|
|
|
|
# msession server
|
|
|
|
|
regex:
|
|
|
|
|
- "msession_connect"
|
|
|
|
|
- type: regex
|
|
|
|
|
# mSQL DBMS
|
|
|
|
|
regex:
|
|
|
|
|
- "msql_(p?)connect"
|
|
|
|
|
- type: regex
|
|
|
|
|
# MsSQL DBMS
|
|
|
|
|
regex:
|
|
|
|
|
- "mssql_(p?)connect"
|
|
|
|
|
- type: regex
|
|
|
|
|
# MySQL DBMS
|
|
|
|
|
regex:
|
|
|
|
|
- "mysql_(p?)connect"
|
|
|
|
|
- type: regex
|
|
|
|
|
# MySQLi Extension
|
|
|
|
|
regex:
|
2021-09-30 22:51:17 +00:00
|
|
|
|
- "mysqli((_real)?_connect)?|_query"
|
2021-08-27 14:15:22 +00:00
|
|
|
|
- type: regex
|
|
|
|
|
# Oracle OCI8 DBMS
|
|
|
|
|
regex:
|
|
|
|
|
- "oci|(_new?)|_connect|(n?|p?)logon"
|
|
|
|
|
- type: regex
|
|
|
|
|
# Oracle DBMS
|
|
|
|
|
regex:
|
|
|
|
|
- "ora_(p?)connect"
|
|
|
|
|
- type: regex
|
|
|
|
|
# Ovrimos SQL DBMS
|
|
|
|
|
regex:
|
|
|
|
|
- "ovrimos_connect"
|
|
|
|
|
- type: regex
|
|
|
|
|
# PostgreSQL DBMS
|
|
|
|
|
regex:
|
|
|
|
|
- "pg_(p?)connect"
|
|
|
|
|
- type: regex
|
|
|
|
|
# SQLite DBMS
|
|
|
|
|
regex:
|
|
|
|
|
- "sqlite_(p?)open"
|
|
|
|
|
- type: regex
|
|
|
|
|
# SQLite3 DBMS
|
|
|
|
|
regex:
|
|
|
|
|
- "SQLite3"
|
|
|
|
|
- type: regex
|
|
|
|
|
# Sybase DBMS
|
|
|
|
|
regex:
|
|
|
|
|
- "sybase_(p?)connect"
|
|
|
|
|
- type: regex
|
|
|
|
|
# TokyoTyrant DBMS
|
|
|
|
|
regex:
|
|
|
|
|
- "TokyoTyrant"
|
|
|
|
|
- type: regex
|
|
|
|
|
# XML document
|
|
|
|
|
regex:
|
|
|
|
|
- "x(ptr|path)_new_context"
|
2021-09-30 22:58:15 +00:00
|
|
|
|
- type: regex
|
|
|
|
|
# Investigate if GetTableFields is called safely
|
|
|
|
|
regex:
|
|
|
|
|
- "GetTableFields"
|
|
|
|
|
- type: regex
|
|
|
|
|
regex:
|
|
|
|
|
- "ini_get.*magic_quotes_gpc.*"
|