PHP代码审计3-SQL注入,CSRF,动态函数执行与匿名函数执行,unserialize 反序列化漏洞,变量覆盖,文件管理,文件上传
SQL注入
审计语句 【输入参数】
SELECT,DELETE,UPDATE,INSERT
防御
转义:
1、开启gpc:判断解析用户提示的数据
2、mysql_real_escape_string():转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集
string mysql_real_escape_string ( string $unescaped_string
[, resource $link_identifier
] )
3、addslashs():使用反斜线引用字符串
string addslashes ( string $str
)
4、关键字过滤
CSRF
审计:敏感表单是否使用token验证(还有token是否随机)
防御
1、验证HTTP Referer字段(可能存在绕过,最好使用下面两种方法)
2、在请求地址中添加token并验证
3、在HTTP头中自定义属性并验证
动态函数与匿名函数
动态:函数与函数之间的调用,可能会产生漏洞
静态:允许临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。【create_function:创建匿名函数】
unserialize反序列漏洞
序列化就是把对象转换成字节流,便于保存在内存、文件、数据库中;反序列化即逆过程,由字节流还原成对象。
unserialize函数被用于将格式化字符串内的对象进行实例化,在反序列化期间,每个解析元素都有一个索引号,号码从1开始。
mixed unserialize ( string $str
)
1、unserialize()中的参数可控
2、脚本中存在一个构造函数、析构函数、__wakeup()函数中有类
3、对象中的成员变量的值
反序列化的变量会覆盖类中变量的值
原因:
1、是 register_globals 为 on 的情况,PHP4 默认开启,PHP5 以后默认关闭
2、人为注册了全局变量
全局变量的取值与赋值
文件管理漏洞
PHP 的用于文件管理的函数,如果输入变量可由用户提交,程序中也没有做数据验证,可能成为高危漏洞
常用函数
copy():拷贝文件
bool copy ( string $source
, string $dest
[, resource $context
] )
将文件从 source
拷贝到 dest
。
如果要移动文件的话,请使用 rename() 函数。
rmdir():删除目录
bool rmdir ( string $dirname
[, resource $context
] )
尝试删除 dirname
所指定的目录。 该目录必须是空的,而且要有相应的权限。
unlink():删除文件
bool unlink ( string $filename
[, resource $context
] )
删除 filename
。和 Unix C 的 unlink() 函数相似
delete():删除文件,类似unlink()与rmdir()
void delete ( void )
fwrite():写入文件(可安全用于二进制文件)
int fwrite ( resource $handle
, string $string
[, int $length
] )
fwrite() 把 string
的内容写入 文件指针 handle
处。
chmod():改变文件模式
bool chmod ( string $filename
, int $mode
)
尝试将 filename
所指定文件的模式改成 mode
所给定的。
fgetc():从文件指针中读取字符
string fgetc ( resource $handle
)
从文件句柄中获取一个字符。
fgetcsv():从文件指针中读入一行并解析 CSV 字段
array fgetcsv ( resource $handle
[, int $length
= 0 [, string $delimiter
= ',' [, string $enclosure
= '"' [, string $escape
= '\\' ]]]] )
从文件指针中读取一行,fgetcsv() 解析读入的行并找出 CSV 格式的字段然后返回一个包含这些字段的数组。
fgets():从文件指针中读取一行
string fgets ( resource $handle
[, int $length
] )
fgetss():从文件指针中读取一行并过滤掉 HTML和PHP标记
string fgetss ( resource $handle
[, int $length
[, string $allowable_tags
]] )
file():把整个文件读入一个数组中
array file ( string $filename
[, int $flags
= 0 [, resource $context
]] )
file_get_contents():将整个文件读入一个字符串
string file_get_contents ( string $filename
[, bool $use_include_path
= false [, resource $context
[, int $offset
= -1 [, int $maxlen
]]]] )
将在参数 offset
所指定的位置开始读取长度为 maxlen
的内容
fread():读取文件(可安全用于二进制文件)
string fread ( resource $handle
, int $length
)
fread() 从文件指针 handle
读取最多 length
个字节
readfile():输出一个文件
int readfile ( string $filename
[, bool $use_include_path
= false [, resource $context
]] )
读入一个文件并写入到输出缓冲。
ftruncate():将文件截断到给定的长度
bool ftruncate ( resource $handle
, int $size
)
接受文件指针 handle
作为参数,并将文件大小截取为 size
。
file_put_contents():将一个字符串写入文件
int file_put_contents ( string $filename
, mixed $data
[, int $flags
= 0 [, resource $context
]] )
fputcsv():将行格式化为 CSV 并写入文件指针
int fputcsv ( resource $handle
, array $fields
[, string $delimiter
= ',' [, string $enclosure
= '"' ]] )
fputs():fwrite() 的别名
fopen():打开文件或者 URL
resource fopen ( string $filename
, string $mode
[, bool $use_include_path
= false [, resource $context
]] )
文件上传漏洞
审计函数:move_uploaded_file():将上传的文件移动到新位置
bool move_uploaded_file ( string $filename
, string $destination
)
相关的超全局变量$_FILES
防御
1、使用白名单方式检测文件后缀
2、上传之后按时间能算法生成文件名称
3、上传目录脚本文件不可执行
4、注意%00截断
5、Content-Type 验证
PHP代码审计3-SQL注入,CSRF,动态函数执行与匿名函数执行,unserialize 反序列化漏洞,变量覆盖,文件管理,文件上传的更多相关文章
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(32)-swfupload多文件上传[附源码]
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(32)-swfupload多文件上传[附源码] 文件上传这东西说到底有时候很痛,原来的asp.net服务器 ...
- 反射型XSS+文件上传+CSRF—DVWA
在学习的过程中,想到将几种漏洞进行组合练习,记录下学习过程.大佬请绕过!谢谢!! 测试环境:DVWA,安装方法参考上一篇:https://www.cnblogs.com/aq-ry/p/9220584 ...
- 代码审计之SQL注入:BlueCMSv1.6 sp1
Preface 这是一篇纪录关于BlueCMSv1.6 sp1两个SQL注入的审计过程,原文来自代码审计之SQL注入:BlueCMSv1.6 sp1 ,主要纪录一下个人在参考博文复现这两个漏洞经过. ...
- PHP代码审计之SQL注入
代码审计之SQL注入 SQL注入攻击(SQLInjection),是攻击者在表单中提交精心构造的sql语句,改变原来的sql语句,如果web程序没有对提交的数据经过检查,那么就会造成sql注入攻击. ...
- 代码审计之SQL注入
0x00概况说明 0x01报错注入及利用 环境说明 kali LAMP 0x0a 核心代码 现在注入的主要原因是程序员在写sql语句的时候还是通过最原始的语句拼接来完成,另外SQL语句有Select. ...
- DoraBox sql注入&文件上传
SQL注入 1.sqli数字型 判断是否存在注入点,执行1 and 1=1,有回显判断存在注入点 判断字段数,执行1 order by 3以及执行1 order by 4时报错,判断字段数为3 判断具 ...
- 代码审计之XiaoCms(后台任意文件上传至getshell,任意目录删除,会话固定漏洞)
0x00 前言 这段时间就一直在搞代码审计了.针对自己的审计方法做一下总结,记录一下步骤. 审计没他,基础要牢,思路要清晰,姿势要多且正. 下面是自己审计的步骤,正在逐步调整,寻求效率最高. 0x01 ...
- [代码审计]XiaoCms(后台任意文件上传至getshell,任意目录删除,会话固定漏洞)
0x00 前言 这段时间就一直在搞代码审计了.针对自己的审计方法做一下总结,记录一下步骤. 审计没他,基础要牢,思路要清晰,姿势要多且正. 下面是自己审计的步骤,正在逐步调整,寻求效率最高. 0x01 ...
- 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理
服务器文档下载zip格式 刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...
随机推荐
- $("#Upfile").MultiFile();
Jquery的multifile 1.多文件上传: 2.如上几个验证不重复,和限制上传数量的验证显示的是英文,改成中文文本时,如果不用国标解码,到时候提示框会出现乱码现象.所以一般需要中文显示的时候, ...
- Oracle编程入门经典 第12章 事务处理和并发控制
目录 12.1 什么是事务处理... 1 12.2 事务处理控制语句... 1 12.2.1 COMMIT处理... 2 12.2.2 RO ...
- C++学习之显式类型转换与运行时类型识别RTTI
static_cast const_cast reinterpret_cast 运行时类型识别(RTTI) dynamic_cast 哪种情况下dynamic_cast和static_cast使用的情 ...
- POJ-1195 Mobile phones---裸的二维树状数组(注意下标从1,1开始)
题目链接: https://vjudge.net/problem/POJ-1195 题目大意: 直接维护二维树状数组 注意横纵坐标全部需要加1,因为树状数组从(1,1)开始 #include<c ...
- react里面Fragments的使用
关于react Fragments,React 中一个常见模式是为一个组件返回多个元素.Fragments 可以让你聚合一个子元素列表,并且不在DOM中增加额外节点. render() { retur ...
- 2017.9.23 HTML学习总结----JavaScript实现输入验证
定义:对于一个HTML页面中的表单,可以获取其中的各项表单域信息, 利用这些信息,可以判定个表单域所提供的输入值是否合法,是否 符合所要求的格式,这就是表单的输入验证. (1)需要验证的表单输入域的要 ...
- Spring Boot的Maven插件Spring Boot Maven plugin详解
Spring Boot的Maven插件(Spring Boot Maven plugin)能够以Maven的方式为应用提供Spring Boot的支持,即为Spring Boot应用提供了执行Mave ...
- nuget打包
[1.创建.nuspec文件] 在.csproj目录下运行命令 nuget spec [2.生成包nupkg] 在.csproj目录下运行命令 nuget pack xxxx.csproj [推送命令 ...
- pyinstaller打包后的exe退出时,类中的__del__不执行问题
关于pyinstaller打包后的exe退出时,类中的__del__不执行问题,完善中
- django模板层之静态文件引入优化
1.新手使用 我们一般在初学django的情况下,引入django的静态文件一般有如下两种方式: 通过路径引用: <script type="text/javascript" ...