0x07 PHP代码审计CSRF跨站请求伪造
CSRF结合XSS杀伤力能够很大
审计CSRF:敏感表单是否使用token验证
利用:用BURP生成csrf的POc
xsrf:就是把poc插到xss里面,当点击就会触发
防护策略:
1.验证HTTP Referer字段(但能够绕过)
2.在请求地址中添加token并验证。
3.在htttp头中自定义属性并验证。
0x08 代码审计动态函数执行与匿名函数执行
1、动态与函数执行:
函数与 函数之间的调用,可能会形成的漏洞。
不过这个漏洞利用起来很麻烦,须要结合其余漏洞,并且还要闭合
2、匿名函数执行:
匿名函数(anonymous functions),也叫闭包函数(closures),容许临时建立一个没有指定名称的函数。最常常用做回调函数(callback参数的值)。
create_function :建立匿名函数
0x09 代码审计之unserialize反序列化漏洞
须要知足的条件:
1.unserialize函数的参数可控
2.脚本中存在一个构造函数、析构函数、__wakeup( )函数中,有类(通常存在类中)
3.对象中成员变量的值
反序列化的变量会覆盖类中变量的值
二次漏洞利用,unserialize须要结合其余漏洞进行利用,列子结合用eval任意代码执行
这是序列化过的内容(O:4:"demo":1:{s:4:"test";s:10:"phpinfo();";})
0x10 代码审计变量覆盖漏洞
变量覆盖漏洞产生的缘由有两种:
第一种:register_globals为on的状况,php4默认开启,php5之后默认关闭。
当register_globals为on是不能进行赋值的,反之为yes的时候能够赋值
当register_globals为yes的时候也能够这样赋值
若是是这样也是能够覆盖的,若是没有初始化也能够进行赋值
第二种:人为注册成为全局变量。
0x11 代码审计文件管理漏洞
php的用于文件管理的函数,若是输入变量可由用户提交,程序中也没有作数据验证,可能成为高危漏洞。
常见函数:copy、rmdir、unlink、delete、fwrite、chomod、fgetc、fgetcsv、fgets、fgetss、file、file_get_contenst、fread、readfile、ftruncate、file_put_contents、fputcsv、fputs、fopen
(以上函数通常都是 "增、删、改、写" 文件的功能)
unlink:删除文件,能够跨目录删除文件
file_get_contents:查看文件(常见)。须要在浏览器点击查看源码便可查看源文件
readfile:会输出文件的长度。
file_put_contents:写入文件。
copy:拷贝文件
fwrite常常会和fopen搭配来用的
fopen:
0x12 代码审计文件上传漏洞
审计函数:move_uploaded_file
超全局变量$_FILES
防护:
1:使用白名单机制检测文件后缀
2:上传以后按时间和算法生成文件名称
3:上传目录脚本文件不可执行
4:注意%00截断
5:Content—Type 验证
0x13 漏洞挖掘的思路
程序的两大根本:变量 与函数
漏洞造成的条件:
一:能够控制的变量(一切输入都是有害的)
二:变量到达有利用价值的函数(危险函数)
漏洞形成的效果:
漏洞的利用效果取决于最终函数的功能
变量进入什么样的函数就致使什么样的结果
危险函数:
什么样的函数会致使什么样的漏洞
文件包含:包含漏洞
代码执行:执行任意代码漏洞
命令执行:执行任意命令漏洞
文件系统操做:文件(目录)读写删等漏洞
数据库操做:SQL注入漏洞
数据显示:xss等客户端和服务端漏洞
......
代码审计的本质:
找漏洞等于找对应变量和函数
变量跟踪的过程:
经过变量找函数(正向跟踪)
经过函数找变量(逆向跟踪)