作业1、整理这两天靶场中使用到的php函数2、找出每种漏洞的防御方式less1防御js前端前端校验攻击浏览器关闭js或者是抓包把后缀名改成phpless2防御content-type校验攻击抓包后改变content-type属性值为对应的属性值less3防御deny_ext黑名单限制传输文件的后缀名file_name deldot($file_name);去除字符最后的点file_ext strtolower($file_ext);全部字母转小写file_ext str_ireplace(::$DATA, , file_ext);去除字符串去除收尾的空格防止绕过攻击抓包改文件名后缀(如修改成.php5,Apache/nginx的容错机制和后缀解析规则可以将php5这个后缀解析认为是正常的php)并修改content-type属性值less4防御deny_ext黑名单校验讲php的多种后缀的名称各种情况都加入黑名单没有遗漏攻击可以先上传一个.htaccess为后缀的文件这个文件是Apache的目录级别的文件在文件中先写入FileMatch \.jpg$SetHandler application/x-httpd-php/FileMatch代码作用是让服务器遇到jpg文件可以视为php进行解析less5防御deny_ext黑名单校验讲php的多种后缀的名称各种情况都加入黑名单没有遗漏并将.htaccess也列入黑名单攻击查看遗漏大写绕过或者使用文件名为user.ini(服务器使用nginx时可用)的目录级文件绕过less6防御deny_ext黑名单校验file_name deldot($file_name);删除最后一个点file_ext strtolower($file_ext); 字符转小写防止绕过file_ext str_ireplace(::$DATA, , file_ext);去除字符串攻击抓包后在文件后缀php后加空格less7防御deny_ext黑名单校验去除空格file_ext strtolower($file_ext); 字符转小写防止绕过file_ext str_ireplace(::$DATA, , $file_ext);去除字符串攻击抓包后在文件后缀php加.绕过less8防御deny_ext黑名单校验file_ext strtolower($file_ext); 字符转小写file_name deldot($file_name);末尾去点去空格攻击抓包后在文件后缀加入::$DATA利用文件流绕过less13防御文件的格式如png之类的文件的十六进制数是固定的本关防御是对十六进制数进行校验攻击先将任意图片与攻击代码结合在window的终端中利用copy目录进行合成让脚本在图片中再想办法利用文件包含漏洞或者是进入服务器修改目录级文件内容让图片以php编译器进行编译less14防御getimgesize自动获取用户图片信息进行限制攻击先将任意图片与攻击代码结合在window的终端中利用copy目录进行合成让脚本在图片中再想办法利用文件包含漏洞或者是进入服务器修改目录级文件内容让图片以php编译器进行编译less15防御exif_imagetype($filename)通过读取文件头快速检测图片类型的函数攻击找到文件php.ini启用;extensionphp_exif.dll再上传图片码less17防御ext_arr白名单校验先上传到upload后再进行校验如果成功则过攻击将一个php文件写入传建新文件的代码然后上传抓住中间的时间差生成新文件并写入一句话木马文件包含include找不到包含文件时会警告并继续读下面的代码多写会多执行include_once找不到包含文件时会警告并继续读下面的代码多写不会多执行require找不到包含的文件时会报错不会继续读下面的代码多写会多执行require_once找不到包含的文件时会报错不会继续读下面的代码多写不会多执行伪协议:PHP内部的一种数据访问封装机制file:// 访问本地文件系统php://output 向输出缓冲区写入数据php://input 读取HTTP请求中原始的POST数据抓包后可以写入请求代码即可获取想要的东西php://filter 对数据流进行过滤或转换处理data:// 将内嵌的数据如文本或Base64编码当作数据流来处理phar:// 用于处理PHP归档Phar文件可以访问包内的文件命令执行(你把服务器的终端借给了攻击者)system() 直接输出,直接打印结果exec() 不直接输出,通过数组返回,常用于获取单行结果shell_exec() 不直接输出,反引号 的等价写法代码执行( 你把PHP的编译器借给了攻击者)call_user_func(函数命令 值)eval(函数命令) 是PHP中一个极具争议的函数它能把字符串当作PHP代码来执行执行php代码函数assert() 断言可执行字符串preg_replace()/e 修饰符执行代码