设为首页 收藏本站
查看: 514|回复: 0

[经验分享] PHP 代码审计

[复制链接]

尚未签到

发表于 2018-12-20 08:08:11 | 显示全部楼层 |阅读模式
  
  PHP是一种被广泛使用的脚本语言,尤其适合于web开发。具有跨平台,容易学习,功能强大等特点,据统计全世界有超过34%的网站有php的应用,包括Yahoo、sina、163、sohu等大型门户网站。而且很多具名的web应用系统(包括bbs,blog,wiki,cms等等)都是使用php开发的,Discuz、phpwind、phpbb、vbb、wordpress、boblog等等。



随着web安全的热点升级,php应用程序的代码安全问题也逐步兴盛起来,越来越多的安全人员投入到这个领域,越来越多的应用程序代码漏洞被披露。面对这种现状,PHP漏洞“挖掘者”所能得到的漏洞也将越来越少。但是“穷则思变”,既然传统的审计方法不能达到挖掘漏洞的目的,那么我们何不尝试新的审计手法与思路呢?代码审计的目的是以挖掘到可以利用的漏洞,所以我们不必通篇的去将代码完全看懂,但是在开始之前做一些准备还是必须,就像***之前,我们也需要收集足够多的目标信息,利用工具和制定***计划一样。



程序的本质是变量与函数,漏洞所依赖的也无法脱离这两个元素。让我们先来看下漏洞形成的条件
1.可以控制的变量【一切输入都是有害的】
2.变量到达有利用价值的函数[危险函数]【一切进入函数的变量是有害的】
漏洞的利用效果最终也取决与函数的功能。所以我们在下面讲述漏洞挖掘的过程中,也将围绕着这两个元素来展开。






一个网站的安全性涉及很多方面,代码的安全性是其中的一个重要因素,代码审计就是用来提高代码安全性的,那么我们就来讲讲代码审计,这次我们用到的是dvwa。



DVWA(DamnVulnerableWebApplication)DVWA是用PHP+Mysql编写的一套用于常规WEB漏洞教学和检测的WEB脆弱性测试程序。包含了SQL注入、XSS、盲注等常见的一些安全漏洞。



下面简单的以dvwa里面sql注入的三种等级代码来说一下代码审计。



首先比较low、medium、high三种级别的php代码:

Low:

  

  Medium:

  High:

红框里面就是三种代码的不同之处,发现从low到medium多了一句,medium到high又多了一句。



dvwa的sqlinjection里面有个输入框,三种等级下输入1,结果都一样,浏览器地址栏变成:

http://localhost/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#


输入框下面会出现:


1、当在low级下输入1′,发现浏览器地址栏变成:

http://localhost/dvwa/vulnerabilities/sqli/?id=1′&Submit=Submit#

并出现错误:YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear”1”’atline1



2、当在medium级下,输入1′,发现地址栏和low级一样,提示错误:

YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear‘\”atline1



3、再看high级下,输入1′,地址栏依旧,没出现错误,也没有出现正常的查询结果。



正常情况下,当用户在输入框输入1,从数据库查询id=1的用户,查询语句是
SELECTfirst_name,last_nameFROMusersWHEREuser_id=‘$id’
就会得到id=1的用户信息。


但是在1后面加个单引号后在low和medium级别下出现错误,看回上面图片:
low级下没有对输入进行任何处理,直接把用户输入的东西放到查询语句中进行查询;


medium级下添加了mysql_real_escape_string()函数,这个函数是转义sql语句中使用的字符串中的特殊字符,就像在错误提示中显示在单引号前加\;


high级下在转义函数前面加了另一个函数stripslashes(),这个函数是去除addslashes()函数添加的反斜杠,因为high级下,php的magic_quotes_gpc为on,对所有的GET、POST和COOKIE数据自动运行addslashes()函数。所以要使用stripslashes()函数




三种等级下sql注入的情况很明显了,现在深入。
low:http://localhost/dvwa/vulnerabilities/sqli/?id=1orderby2+–+&Submit=Submit#


  http://localhost/dvwa/vulnerabilities/sqli/?id=1′orderby2+–+&Submit=Submit#
  

  http://localhost/dvwa/vulnerabilities/sqli/?id=1′unionselect1,2+–+&Submit=Submit#
  

  http://localhost/dvwa/vulnerabilities/sqli/?id=1′unionselect1,concat_ws(char(32,58,32),user(),database(),version())+–+&Submit=Submit#
  

就这样把当前用户、数据库、php版本爆了出来。concat_ws是mysql里面的函数。
medium下会自动加反斜杠转义特殊字符,会破坏查询语句,页面上会提示出错;high下id只有正常情况下才会出现正确信息,其余的都不会出现任何信息。
除此之外,high级别中还有两处不同,判断输入是否为数字并将其值用单引号包含起来,以确保非法字符无法起作用。

  
  
到high级别的php代码已经达到相当高水平的安全性了,但是不能说一定是最安全的,因为还是可能会出现漏洞的。代码审计就是检查源代码中的缺点和错误信息,分析并找到这些问题引发的安全漏洞,并提供代码修订措施和建议。从而在系统开发阶段/运维阶段进行深入的问题查找和消灭过程。
  

  
  




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-653364-1-1.html 上篇帖子: php安装扩展 下篇帖子: PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/module
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表