PHP代码审计---基础学习(二)

0x07 PHP代码审计CSRF跨站请求伪造
 
CSRF结合XSS杀伤力可以很大
 
审计CSRF:敏感表单是否使用token验证
 
利用:用BURP生成csrf的POc
xsrf:就是把poc插到xss里面,当点击就会触发
 
  防御策略:
1.验证HTTP Referer字段(但可以绕过)
2.在请求地址中添加token并验证。
3.在htttp头中自定义属性并验证。
 
 
 
 
0x08 代码审计动态函数执行与匿名函数执行
一、动态与函数执行:
函数与 函数之间的调用,可能会造成的漏洞。
不过这个漏洞利用起来很麻烦,需要结合其他漏洞,而且还要闭合
 
 
 
二、匿名函数执行:
匿名函数(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等客户端和服务端漏洞
......
 
代码审计的本质:
找漏洞等于找对应变量和函数
 
变量跟踪的过程:
通过变量找函数(正向跟踪)
通过函数找变量(逆向跟踪)

猜你喜欢

转载自www.cnblogs.com/JoEcO01/p/11394133.html