PHP 代码审计

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

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:

212017692.png

Medium:

212018566.png

High:

212019214.png

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

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

212019395.png

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#

212019298.png

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

212019265.png

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

212019940.png

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

212019605.png

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

212020519.png

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



     本文转自Tar0 51CTO博客,原文链接:http://blog.51cto.com/tar0cissp/1304178,如需转载请自行联系原作者



相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
拿php写个原生增删改查案例出来(提供全部代码+sql)
拿php写个原生增删改查案例出来(提供全部代码+sql)
拿php写个原生增删改查案例出来(提供全部代码+sql)
|
4月前
|
安全 小程序 PHP
PHP代码审计(七)Rips源代码审计系统使用教程
上一篇中提到的Seay源代码审计系统是由C#编写的winform程序,现在已经停止更新了,但是,还是比较好用的。 PHP代码审计还有另一个工具,也是一个神器Rips
146 0
|
4月前
|
安全 小程序 PHP
PHP代码审计(五)PHP代码审计方法与步骤
(1):获取到网站源码(这就是废话……) (2):将网站部署到你自己的环境中,能运行。 这里特殊说明一下我的习惯,我本地的环境与线上的环境基本上保持一致,这样在本地审计及线上部署的时候能发现更多的问题。不建议说是随便搭个环境能跑起来就行,这样不是很严谨。 (3):拿到源码之后,浏览大概的项目结构。
66 0
|
4月前
|
安全 小程序 PHP
PHP代码审计(六)Seay源代码审计系统使用教程
www.cnseay.com/ 当然,这个已经不能访问了。 软件的版本比较早,需要.NET framework3.5框架,我这里是软件启动的时候自动提醒安装,如果没有自动提醒,那么你需要手动安装.NET frameWork3.5框架,否则,程序应该是没有办法运行。
238 0
|
13天前
|
PHP
【攻防世界】easyphp(PHP代码审计)
【攻防世界】easyphp(PHP代码审计)
|
1月前
|
PHP 开发者 UED
PHP 中的异常处理:提高代码健壮性的关键
【2月更文挑战第28天】在 PHP 开发中,异常处理是确保应用程序稳定性和可靠性的重要环节。本文将深入探讨 PHP 异常的概念、类型及其处理机制,并通过实例演示如何有效地捕获和处理异常,以增强代码的健壮性和用户体验。
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:用代码的方式创建目录+文件+写入数据(都由你定)
php案例:用代码的方式创建目录+文件+写入数据(都由你定)
php案例:用代码的方式创建目录+文件+写入数据(都由你定)