PHP代码审计小计
0x01 工具篇编辑器(notepad++,editplus,UE等等,看个人习惯)
TommSearch(字符串检索) || grep
HttpProtocolDebugger(http协议调试器)
Fiddler(分析包,改包)
Seay PHP代码审计工具(php-code-audit分析辅助)
几个有趣的项目
dvwa(代码审计测试平台)
phpmvs
php security audit check
PHP Vulnerability Hunter
0x02 函数篇
addslashed()添加反斜杠
stripslashed()去掉反斜杠
get_magic_quotes_gpc() 判断是否开启gpc
expode(".",$array)分割成数组
is_numeric()判断是否为数字
sizeof()判断长度
trim() 去除字符串开头和末尾的空格或其他字符
system() 输出并返回最后一行shell结果。
exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。
passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。
EscapeShellCmd(),把一个字符串中所有可能瞒过Shell而去执行另外一个命令的字符转义。这些字符在Shell中是有特殊含义的,象分号(;),重定向(>)和从文件读入 ( (大于) 成为 >
move_uploaded_file() 函数将上传的文件移动到新位置。
extract() 函数从数组中把变量导入到当前的符号表中。
对于数组中的每个元素,键名用于变量名,键值用于变量值。
第二个参数 type 用于指定当某个变量已经存在,而数组中又有同名元素时,extract() 函数如何对待这样的冲突。
本函数返回成功设置的变量数目。
语法
extract(array,extract_rules,prefix)
parse_str() 函数把查询字符串解析到变量中. (常见于变量覆盖漏洞)
语法
parse_str(string,array)
参数 描述
string 必需。规定要解析的字符串。
array 可选。规定存储变量的数组名称。该参数指示变量存储到数组中。
针对变量指定***
不使用foreach遍历$_GET变量,改用$_GET[(index)]
eval() 函数把字符串按照 PHP 代码来计算。该字符串必须是合法的 PHP 代码,且必须以分号结尾。
如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。
preg_replace 执行一个正则表达式的搜索和替换
/e参数执行代码
0x03 漏洞篇
-----------------------------------------------
.Sql-Injection
留意:cookie及x-forward-for,宽字节,报错注射等
挖掘漏洞参考
变量
$_GET[""],$_POST[""],$_COOKIE[""], $SERVER[""]
数据库操作函数
mysql_query()
数字型注入防范:
1.is_numeric() ctype_digit() intval()
2.str_length()确定长度
字符型注入防范:
1.mysql_real_escape_string()
2.数据库查询语句前加@防爆错
3.str_length()确定长度
-----------------------------------------------
.Command-Execution
函数:
system(),passthru(),popen(),exec()
数据库操作函数:
exec,system,popen,passthru,proc_open,shell_exec
执行命令管道符 % | >
测试如0 | dir c:
|| 双竖线的作用,前面语句执行错误则执行后面语句
如xx"+||+whoami+||+echo
-----------------------------------------------
.File-Inclusion
函数:
include(),require(),include_once(),require_once()
远程文件包含漏洞要求
allow_url_fopen()allow_url_include()file_get_contents()
绕过:zlib://和ogg://
5.2.0之后版本
data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+//
@eval(file_get_contents('php://input'));//POST phpinfo();
配合%00截断,新版本自动转义\0
-----------------------------------------------
.CSRF
CSRF防范策略
1>验证http-referer字段
安全性低,易被伪造
2>在请求地址中添加token并验证
页:
[1]