zoukankan      html  css  js  c++  java
  • PHP审计基础

    php核心配置

    register_globals 全局变量注册开关 设置为on时,把GET/POST的变量注册成全局变量 PHP 5.4.0中移除
    allow_url_include 包含远程文件 设置为on时,可包含远程文件 PHP 5.2后默认为off
    allow_url_fopen  打开远程文件    
    magic_quotes_gpc 魔术引号自动过滤 设置为on时,自动在GET/POST/COOKIE变量中',",\,NULL的前面加上 PHP5不会过滤$_SERVER变量,PHP5.4以后移除
    magic_quotes_runtime 魔术引号自动过滤 与mq_gpc的区别:mq_runtime只过滤从数据库/文件中获取的数据 PHP5.4以后移除
    magic_quotes_sybase 魔术引号自动过滤 会覆盖掉_gpc;仅仅转义NULL和把'替换成" PHP5.4以后移除
    safe_mode 安全模式 联动配置指令有很多;...... PHP5.4以后移除
    open_basedir PHP可访问目录 用;分割多个目录,且以前缀而非目录划分 PHP5.2.3以后范围时PHP_INI_ALL
    disable_functions 禁用函数 如果使用此指令,切记把dl()函数也加入到禁用列表  
    display_errors/error_reporting 错误显示 d_errors为off时,关闭错误回显,为on时,可配置e_reporting,等级制  
    。。。      

    审计思路

    1)敏感关键字

    2)可控变量

    3)敏感功能点

    4)通读代码

    SQL注入

    经常出现在登录页面/获取HTTP头/订单处理等地方。

    防范

    1.addslashes函数

    过滤的值范围和_gpc时一样的

    2.mysql_[real_]escape_string函数

    在PHP 4.0.3以上,x00 ' " xla受影响

    3.intval等字符转化

    上面提到的过滤方式,对int类型注入效果并不好。

    4.PDO prepare预编译

    XSS漏洞

    输出函数:print/print_r/echo/var_dump/printf/sprintf/die/var_export

    经常出现在文章发表/评论回复/留言以及资料设置等地方。特别是在发表文章的时候,因为这里大多都是富文本,有各种图片引用/文字格式设置等,所以经常出现对标签事件过滤不严格导致的xss。

    CSRF漏洞

    CSRF主要用于越权操作,所以漏洞自然在有权限控制的地方,像管理后台/会员中心/论坛帖子以及交易管理等。

    黑盒挖掘经验:打开几个有非静态操作的页面,抓包看看有没有token,如果没有的话,再直接请求(不带referer)这个页面,如果返回的数据还是一样的话,那说明很有可能有CSTF漏洞了。

    白盒挖掘经验:通读代码看看几个核心文件里面有没有验证token和referer相关的代码。核心文件指被大量文件引用的文件。

    文件包含漏洞

    include/include_once/require/require_once

    文件包含漏洞大多出现在模块加载/模板加载以及cache调用的地方,比如传入的模块名参数,实际上是直接把这个拼接到了包含文件的路径中。

    文件包含截断:

    1.%00;受限于gpc和addslashes,php5.3之后被修复。

    2.././....;不受限gpc,同样在PHP5.3之后被修复。windows下240个.或者./能够截断,linux2038个./组合才能截断

    文件上传漏洞

    move_uploaded_file

    1.未过滤或本地过滤

    2.黑名单拓展名过滤

    3.文件头/content-type验证绕过

    代码执行漏洞

    eval/assert/preg_replace/call_user_func/call_user_func_array/array_map等,还有PHP东陶函数$a($b)

    preg_replace:读字符串进行正则处理,当pattern部分带/e修饰符时,replacement的值会被当成php代码执行。

    call_user_func和array_map等数十个函数...

    命令执行漏洞

    system/exec/shell_exec/passthru/pcntl_exec/popen/proc_open/另外``实际上时调用shell_exec函数

    system/exec/shell_exec/passthru会执行命令并直接回显结果

    pcntl_exec:pcntl是PHP的多进程处理拓展,在处理大量任务的情况下会使用到

    popen/prc_open不会直接回显结果,而是返回一个文件指针:popen('whoami >> D:2.txt','r')

    变量覆盖漏洞

    extract/parse_str,import_request_variables则是用在没有开启全局变量注册的时候,调用这个函数则相当于开启了全部变量这侧,PHP5.4以后被取消。

    $$

    extract需要一定条件,没有第二个参数或者第二个参数extract_type为EXTR_OVERWRITE/EXTR_IF_EXISTS时,可覆盖。

    parse_str直接覆盖

    import_request_variables把GET/POST/COOKIE的参数注册成变量,用在register_globals被禁止时,需要php4.1~5.4。

    业务逻辑漏洞

    逻辑漏洞很大,这里单说业务逻辑上面的漏洞。

    支付/找回密码/程序安装等。

    挖掘经验:通读代码,理解业务流程。

    值得关注的点:程序是否可重复安装/修改密码处是否可越权修改其他用户密码/找回密码验证码是否可暴力破解以及修改其他用户密码/cookie是否可预测/cookie验证是否可绕过等。

  • 相关阅读:
    [工作代码]dom4j解析实例
    dom4j解析xml报错:Nested exception: org.xml.sax.SAXParseException: White space is required between the processing instruction target and data.
    小米蓝牙耳机使用说明书
    猎豹浏览器(chrome内核)屏蔽视频广告
    [转载]python的常用代码模板
    [转载]存储过程
    存储过程格式及实例
    springboot(十八):解决跨域问题
    springboot(十八):CORS方式实现跨域
    springboot(十七):过滤器(Filter)和拦截器(Interceptor)
  • 原文地址:https://www.cnblogs.com/p0pl4r/p/10903691.html
Copyright © 2011-2022 走看看