PHP程序安全漏洞挖掘--吴文灏

2020-02-27 333浏览

  • 1.
  • 2.PHP程序安全漏洞挖掘
  • 3.关于我 •  ⺴⽹网名: erevus •  集渗透师,跨站师,结界师,产品狗于⼀一⾝身的⽩白帽⼦子 •  ⺫⽬目前在知道创宇的404实验室的安全研究组任安全研究员 •  个⼈人博客:http://erevus.me•  联系邮箱:erevus@erevus.me
  • 4.⺫⽬目录 • 1.焉知攻,未知防 • 2.⽩白盒审计准备阶段 • 3.⽩白盒审计阶段 • 4.简单粗暴的免费安全解决⽅方案
  • 5.焉知攻,未知防
  • 6.Web 安全的本质是信任问题 •  由于信任,正常处理⽤用户恶意的输⼊入导致问题的产 ⽣生 •  ⾮非预期的输⼊入 •  安全是⽊木桶原理,安全是⼀一个整体,保证安全不在于 强⼤大的地⽅方有多强⼤大,⽽而在于真正薄弱的地⽅方在哪
  • 7.⿊黑客对⺴⽹网站渗透过程 信息收集 ! • ⽐比如域名、使⽤用了什么组件。⽐比如使⽤用Apache, Discuz! ,WordPress! •  使 ⽤用信息收集公开的漏洞对⺴⽹网站使⽤用的组件进⾏行 ⿊黑盒测试! 攻击! • 对组件进⾏行漏洞挖掘,这种挖出来的漏洞有 ⽩白盒测试! 个通⽤用的名字叫0day,然后使⽤用0day对⺴⽹网 站组件进⾏行⽩白盒测试! 社会⼯工程学 ⾏行攻击! • 社⼯工库查询,钓⻥鱼邮件 等…!
  • 8.漏洞种类以及导致的危害 漏洞类型   SQL注入   命令执行   可能导致的危害   获取数据库内容   获得服务器权限   代码执行   文件包含    可以变成命令执行,获得服务器权限   导致任意文件读取,一定条件下能获得服务器权限   越权   任意文件上传   不好说,看越哪里   获取服务器权限   任意文件下载   导致任意文件读取,读数据库配置文件   任意文件删除   把你的网站重装掉,然后获取服务器权限?   业务逻辑   经常导致一些有趣的问题发生   XSS   获得用户cookie 
  • 9.漏洞种类以及导致的危害 漏洞类型   SQL注入   命令执行   涉及的函数   涉及数据库操作的函数   system(),shell_exec(),exec(),popen()…   代码执行   文件包含   eval(),assert(),  preg_replace(),file_put_contents(),fwrite…   include(),include_once(),require(),require_once()   越权   任意文件上传   涉及上传文件的函数   任意文件下载   fopen(),  readfile(),  file_get_contents,file()…   任意文件删除   unlink()   业务逻辑   XSS 
  • 10.⽩白盒审计准备阶段
  • 11.开启 MySql ⽇日志记录功能-准备阶段 开启 Mysql ⽇日志记录功能 在my.conf 加⼊入以下⼀一句 log=/tmp/mylog.log
  • 12.需要的⼯工具-准备阶段 •  Eclipse + PDT + Xdebug •  但是我⽐比较sublime,我的同事都喜欢⽤用grep搜索,⽤用 echo调试。因为快!(=σωσ=)♪ •  部署环境:Apache + PHP + MySql •  抓包⼯工具:BurpSuite+Firefox(Chrome)
  • 13.明确⾃自⼰己的思想-准备阶段 •  不要以开发和⽤用户的⾓角度去思考问题,⽐比如不按常规的 提交变量 •  ⼤大多数的HTTP请求都是可以重放和伪造的,所以不要 相信什么单选框⾥里的value •  寻找可控变量. •  寻找敏感操作的函数,找漏洞的核⼼心操作是”跟”!
  • 14.⽩白盒审计阶段
  • 15.分析运⾏行机制-审计阶段 1.分析运⾏行机制。⽐比如是使⽤用MVC的设计模式,我们就 看M和C就好了。 2.是否使⽤用框架。框架可能会有全局过滤函数或者未修 复的old day(乌云或者Sebug上搜啊)。 3.是否使⽤用了全局安全防护函数。! 4.如果有全局安全防护函数,安全函数是否能被绕过, 是否有遗漏的地⽅方.⼀一般来说安全函数只是防SQL注⼊入和 XSS,对命令执⾏行和代码执⾏行等不影响。! 5.如果上述的都满⾜足,那就应该把挖掘⺫⽬目标定位在逻辑 层⽅方⾯面。!
  • 16.寻找漏洞-审计阶段 搜索敏感关键词,追踪可控变量引⼊入攻击代码。 1.全局搜索eval(, assert(, preg_replace(, system(, shell_exec(, exec(, popen(,flie_put_contents(,fwrite( 2.找到这些,函数之后向上跟变量,看变量是哪⾥里传⼊入的。 3.找到有没有可控的变量传⼊入到这些危险函数中 4.通过var_dump,exit等对代码进⾏行调试分析
  • 17.Talk is cheap, show me the code
  • 18.代码执⾏行&命令执⾏行 这个⼀一个Discuz! X3.2的程序⾥里搜索fwrite的结果
  • 19.代码执⾏行&命令执⾏行
  • 20.代码执⾏行&命令执⾏行 /uc_server/install/func.inc.php 攻击者只需要⾃自⼰己搭⼀一个数据库, 数据库名,数据库帐号、密码都 是可以被攻击者控制的 找到了可控的变量我们再去看看 哪⾥里调⽤用了这个函数
  • 21.代码执⾏行&命令执⾏行 /uc_server/install/index.php
  • 22.代码执⾏行&命令执⾏行 通过对install/install.php的源码进 ⾏行分析,如果⺴⽹网站当时安装时是选 择”仅安装Discuz!”模式时,./ uc_server/install/⾥里的install.php⽂文 件不会被删除。 只要./uc_server/install/⾥里的 install.php还可以⽤用我们就可以利 ⽤用这个⽂文件执⾏行我们想要的代码
  • 23.代码执⾏行&命令执⾏行
  • 24.代码执⾏行&命令执⾏行
  • 25.任意⽂文件上传
  • 26.任意⽂文件上传 ⾸首先找到上传⽂文件的函数,会产⽣生漏洞的点有: 1.客户端判断后缀(js判断) 2. MIME判断 如php中 if($_FILES[‘userfile’][‘type’] != “image/gif”) 即是检测Contenttype值。Conten-type值是从客户端获取的,是可以任意伪造的。 3.⼤大⼩小写绕过 4.上传⽂文件后不重命名可能有安全隐患。配合⼀一些解析漏洞,⿊黑客可以 把jpg⽂文件解析成php⽂文件,还可以通过⽂文件名进⾏行注⼊入. 解析漏洞参考链接:http://drops.wooyun.org/papers/539
  • 27.任意⽂文件上传 修复⽅方法: 1.后端判断⽂文件后缀 2.重命名⽤用户上传的⽂文件 3.使⽤用⿊黑⽩白名单同时使⽤用。禁⽌止php,php4,php5等⽂文件 上传的同时也只允许图⽚片⽂文件上传。 4.有条件的情况下建⽴立存储⽂文件服务器
  • 28.业务逻辑安全
  • 29.越权-业务逻辑安全 1.泄露⽤用户资料,订单、个⼈人信息可以通过遍历id去访问(⿊黑产最喜欢这 样的漏洞了) 2.可以对别⼈人⽤用户进⾏行操作,⽐比如修改别⼈人的账户信息。 3.直接操作后台等敏感操作。 这些都是因为没有加COOKIE/SEESION的判断 寻找这些漏洞找⼀一下会员中⼼心或者后台的操作是否有加COOKIE/ SEESION的判断即可
  • 30.⽀支付漏洞-业务逻辑安全
  • 31.⽀支付漏洞-业务逻辑安全 我有⼀一个朋友说,我公司新上线了⼀一个商城你来看看有啥⼦子问题吧.
  • 32.⽀支付漏洞-业务逻辑安全 然后他过了5分钟之后说修好了.
  • 33.⽀支付漏洞-业务逻辑安全 你特么在逗我? 不要只在前端做判断! 不要只在前端做判断! 不要只在前端做判断! 重要的事情要说三遍!
  • 34.⽀支付漏洞-业务逻辑安全 订单价格可由⽤用户传⼊入,可以直接改订单价格 寻找⽀支付类漏洞⽐比较简单,直接在抓包改包试试能不能改价格! 或者商品数量就⾏行。!
  • 35.MYSQL特性导致的漏洞
  • 36.⻓长度溢出-MYSQL特性导致的漏洞 •  MySQL 的 TEXT 类型最⼤大上限为 65535 字节,所以当存储值超过 65535 字节时会对后⾯面进⾏行截断操作。也就是65535后⾯面的字符都没了。 •  WordPress 的评论处就没有对评论进⾏行最⼤大⻓长度限制,⽽而且它还⽀支持富 ⽂文本。导致可以利⽤用这样⼀一条 Payload 插⼊入恶意标签事件Knownsec•  解析后就变成这样:57.对开发者的建议 •  1.写完代码之后,codereview⼀一次,回想⼀一下有没有可以被⿊黑 客可以利⽤用的点。! •  2.定期对⾃自⼰己的代码进⾏行⼀一次安全审计,发现那些可以被任 意操控的变量进⼊入到了敏感函数中(可以通过echo验证⼀一 下),⼀一定要过滤⼀一下.你利⽤用不了不代表⿊黑客利⽤用不了。! •  3.不能⼼心存侥幸地以为有些地⽅方⿊黑客猜不出来,他们打CTF ⽐比赛的时候脑洞可⼤大了。md5(时间戳+⽤用户名)作为找回密 码的token他们都有⼈人能猜出来…!58.简单粗暴的免费安全解决⽅方案59.加速乐云WAF60.Q&A61.END
  • 57.对开发者的建议 •  1.写完代码之后,codereview⼀一次,回想⼀一下有没有可以被⿊黑 客可以利⽤用的点。! •  2.定期对⾃自⼰己的代码进⾏行⼀一次安全审计,发现那些可以被任 意操控的变量进⼊入到了敏感函数中(可以通过echo验证⼀一 下),⼀一定要过滤⼀一下.你利⽤用不了不代表⿊黑客利⽤用不了。! •  3.不能⼼心存侥幸地以为有些地⽅方⿊黑客猜不出来,他们打CTF ⽐比赛的时候脑洞可⼤大了。md5(时间戳+⽤用户名)作为找回密 码的token他们都有⼈人能猜出来…!
  • 58.简单粗暴的免费安全解决⽅方案
  • 59.加速乐云WAF
  • 60.Q&A
  • 61.END