一、GPC
- 整数类型不受GPC影响
- $_SERVER变量不受GPC保护
- $_FILES变量不受GPC保护
- 宽字节注入
- 数据库操作容易忘记添加单引号的地方如:in()/limit/order by/group by
- 只过滤了变量的值,但没有过滤key(有的程序会在代码中使用key,如带入SQL语句)
- php5.3以后$_REQUEST中不再包含$_COOKIE(可能导致过滤不全)
- GPC为on的时候,在php4和php<5.2.1的情况下GPC不处理数组第一维变量的key
- 在对参数进行过滤后又对其进行了其它的操作,如substr,str_replace等,这可能导致转义符被删除
二、特性
函数/语法 | 特性 |
---|---|
in_array | 比较之前会对数据进行类型转换 |
is_numeric | 十六进制可绕过 |
intval | 会对字符串进行类型转换,只要第一个字符是数字即可转换成功 |
iconv | 导致字符串截断 |
==与=== | 双等号两边如果变量类型不同则会做类型转换 |
` ` |
反引号命令执行 |
“” | 双引号变量解析 |
$a($b) | 动态函数执行 |
is_file | 使用通配符(<,>)可绕过 |
三、危险函数
- 代码执行
- eval
- preg_replace
- assert
- call_user_func
- call_user_func_array
- create_function
- array_map
- 文件包含
- include
- require
- require_once
- include_once
- 文件读取
- file_get_contents
- highlight_file
- fopen
- readfile
- fread
- fgetss
- fgets
- parse_ini_file
- show_source
- file()
- 文件上传
- move_uploaded_file
- 命令执行
- exec
- system
- popen
- passthru
- proc_open
- pcntl_exec
- shell_exec
` `
- 变量覆盖
- $$
- extract
- parse_str
- mb_parse_str
- import_request_variables
- 变量的编码与解码
- stripslashes
- base64_decode
- rawurldecode
- urldecode
- unserialize
- iconv
- mb_convert_encoding
- 跨站脚本
- echo
- printf
- sprintf
- print_f
- vprintf
- die
- var_dump
- var_export
- 反序列化
- serialize
- unserialize
- __construct 构造函数
- __destruct 析构函数
- __toString 打印对象时自动调用
- __sleep 序列化时自动调用
- __wakeup 反序列化时自动调用
- 枚举
- rand 使用rand处理session时,攻击者很容易暴力破解出session
四、阅读技巧
- 从index文件读起,了解程序运行流程
- 检查程序入口处做了哪些安全处理
- 检查数据库入口处做了哪些安全处理
- 检查数据库连接处代码
- 检查登陆、注册、找回密码、绑定邮箱、文件管理和文件上传等功能点
- 理清程序调用流程以及输入数据的流向,这样可以节约很多时间,可以有目的的查找漏洞
五、新技能
- 文件包含截断新姿势:http://www.hackersb.cn/hacker/105.html
$a = $_GET[‘file‘];include $a.‘.html.php‘;
在可以控制协议的情况下,首先新建一个hello.html.php,内容为phpinfo(),然后压缩成zip,然后访问http://localhost/test/blog.php?file=zip://test.zip%23hello
注意:变量名需要在开头以控制协议
- 功能同上,协议更换为phar, 访问方式为:http://localhost/test/blog.php?file=phar://1.zip/1.php