zoukankan      html  css  js  c++  java
  • 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 验证

  • 相关阅读:
    HDU 1878 欧拉回路(DFS)
    HDU 2181 哈密顿绕行世界问题(DFS)
    HDU 1181 变形课(DFS)
    HDU 1029 Ignatius and the Princess IV(map应用)
    HDU 1242 Rescue(BFS)
    HDU 1027 Ignatius and the Princess II(STL)
    将项目部署到本地IIS时出现的奇怪问题
    [转]30个你必须记住的css选择器
    打开一个从网络上下载的chm文件时出现“已取消到该网页的导航”
    [转]使用Modernizr 检测HTML5和CSS3浏览器支持功能
  • 原文地址:https://www.cnblogs.com/zixuanfy/p/6100690.html
Copyright © 2011-2022 走看看