编写进度
Table of Contents
PHP Audit
代码审计本质: unfilter_function(param_input)
找漏洞 -> 找可以控制的变量(参数)=paraminput= -> 危险函数(paraminput)
漏洞形成条件:
- 可以控制的变量(外部输入) –> 内因
- 危险(未过滤参数)函数接收外部输入 –> 决定漏洞的类型
隐式输入: 用户传递数据-> 数据库/缓存文件等地方 -> 程序代码处理->程序代码
显式输入: 用户传递数据-> 程序代码处理
代码审计常见思路
- 正向追踪: 变量 –> 函数
- 逆向追踪: 函数 –> 变量
- 常见功能点定向审计
- 第三方组件,中间件版本比对
- 补丁比对,反推漏洞位置
- 工具扫描+人工验证
Untrusted Data ,使用不可信的数据
$_REQUEST
参数中的数据是浏览器可控的,黑客可以通过巧妙的构造覆盖PHP全局参数
Command Execution, 命令执行
PHP中存在敏感函数可以执行系统命令,常见这类函数如下:
exec
shell_exec
system
passthru
popen
proc_open
pcntl_exec
Code Execution, 代码执行
PHP中存在敏感函数可以执行PHP代码段,常见函数如下:
eval
assert
preg_replace
create_function
Information Discloure, 信息泄露
常见信息泄露的函数有 phpinfo~、~show_source
Insecure Cryptographic Functions, 不安全的加密函数
- md5
- CRYPTSTDDES
- CRYPTEXTDES
- CRYTPTMD5等
常见危险函数
代码执行函数
eval()
assert()
preg_replace
create_funtion
call_user_func
call_user_func_array
@eval('echo "test-echo";'); echo '<hr>'; assert('system("whoami")'); // preg_replace("/test/e","phpinfo();","just test"); echo '<hr>'; $cfunc=create_function('$v','return system($v);'); $cfunc('whoami'); echo '<hr>'; $sfunc='sys'.'tem'; $sfunc('whoami'); echo '<hr>'; function callback($var){ echo "call test $var"; } call_user_func('callback','crkmyth1cal');
包含函数
require
include
require_once
include_once
include $file;
include($_GET[‘file’]);
// ?file=php://filter/convert.base64-encode/resource=index.php
命令执行函数
exec
system
popen
proc_open
passthru
shell_exec
echo shell_exec(‘ping www.baidu.com');
echo shell_exec(‘whoami’);
文件操作函数
读取:读取配置文件,获取key
写入:写入shell代码
删除:删除 .lock
文件,重新安装
copy
file_get_contents
file_put_contents
file
glob
fopen
move_uploaded_file
readfile
rename
delete
rmdir
unlink
symlink
readlink
file_put_contents("baidu.txt",file_get_contents("https://www.baidu.com")); unlink('baidu.txt');
特殊函数
-
phpinfo
-
getenv
-
putenv
-
dl
-
ini_get
-
ini_set
-
ini_alter
-
ini_restore
-
is_numeric
-
in_array
变量覆盖
-
parse_str
-
mb_parse_str
-
extract
-
import_request_variables
-
get_defined_vars
-
get_defined_constants
-
get_defined_functions
-
get_included_files
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 askding@qq.com