• PHP主要漏洞相关:XSS,SQL注入,命令执行,上传漏洞,本地文件包含,远程文件包含,权限绕过,信息泄露,CSRF,代码注入和逻辑漏洞等。

  • 在服务端做好过滤(客户端的过滤只是为了优化用户体验的,clent可以修改js内容)。

  • 自己写的过滤函数等(各种方法都要过滤):

    1
    2
    3
    4
    5
    6
    7
    8
    
    $REQUEST = filter_xss($REQUEST);
    $GET = filter_xss($GET);
    $POST = filter_xss($POST);
    $COOKIE = filter_xss($COOKIE);
    $POST = filter_sql($POST);
    $GET = filter_sql($GET);
    $COOKIE = filter_sql($COOKIE);
    $REQUEST = filter_sql($REQUEST);
    
    • 最简单的filter_xss函数是htmlspecialchars() 最简单的filter_sql函数是mysql_real_escape_string()
    • 过滤filter_sql只能过滤字符型和搜索型的注入对于数字型的没有办法就是过滤这层后还要后面注意数字型的SQL语句
  • 命令执行:

    • php代码执行:eval()等
    • shell命令执行:exec(),passthru(),system(),shell_exec()等
    • 文件处理:fwrite、fopen、mkdir等 对于这几类需要注意其参数是否用户可控。
  • 文件上传漏洞:针对上传的绕过方式是很多的,最保险的方式:在保存文件是采用文件名随机命名和后缀白名单方 式。最好是设置文件服务器隔离。

  • 本地文件包含:

    • 文件包含漏洞涉及的函数如include() 、include_once()、require()、require_once()、file_get_contents()等
    • 利用LFI执行php代码(%00,0字节截断,包含webshell等)
    • 利用LFI包含系统可读敏感文件
    • 包含用户上传的文件
    • 包含日志文件,比如WebServer的Access.log
    • 包含/proc/self/environ文件
    • 包含上传的临时文件(RCF1867)
    • 包含其他应用创建的文件,比如数据库文件,缓存文件和应用日志等。
  • 权限绕过(越权):

    • 后台文件的未授权访问。后台的文件没有包含对session的验证,就容易出现这样的问题 (水平权限管理问题)
    • 未作用户隔离,例如mail.php?id=23显示了你的信件,那么换个ID, mail.php?id=24就查看到了别人的信件,编写代码是方便, 把信件都存在一个数据表里,id统一编号,前端展现时只需按id取出即可,但未作用户隔离,判定归属,容易造成越权访问。
  • 信息泄露(较低微):部署软件时避免暴露路径和源码等,在配置文件中关闭错误提示等,或者在公共文件中加入如下代码以关闭错误显示功能:(.htaccess文件建议不要使用,可以在httpd.conf配置)

  • CSRF漏洞

  • 变量覆盖

  • 逻辑漏洞:

    • 程序是否可以重复安装
    • 修改密码是否存在越权修改其他用户密码(水平权限攻击和垂直权限攻击)
      • 支付漏洞:
        • 客户端修改单价
        • 客户端修改总价和购买数量
        • 服务端未校验严格
        • 重复发包利用时间差(条件竞争)
    • 找回验证码是否可以暴力破解
    • cookie是否可以预测 验证存在绕过
    • 会话认证漏洞
    • 等于与存在判断绕过(PHP弱类型):
      • in_array():比较前会自动转换类型
      • is_numeric():当传入参数为hex时 直接通过并返回true 并且MYSQL可以直接使用hex编码代替字符串明文 可以二次注入 并且可能造成XSS漏洞
      • 双等于==和三等于===
    • 二次漏洞(SQL注入、XSS等):
      • 原因:不是逻辑问题,是可信问题,业务逻辑复杂度高,与二次漏洞触发率成正比。
      • 类型:购物车/订单/引用数据/文章编辑/草稿