欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Web 安全 PHP 代码审查之常规漏洞

来源:本站整理 作者:佚名 时间:2017-07-23 TAG: 我要投稿

工欲善其事,必先利其器。我们做代码审计之前选好工具也是十分必要的。下面我给大家介绍两款代码审计中比较好用的工具。
一、审计工具介绍
PHP 代码审计系统— RIPS
功能介绍
RIPS 是一款基于 PHP 开发的针对 PHP 代码安全审计的软件。
另外,它也是一款开源软件,由国外安全研究员 Johannes Dahse 开发,程序只有 450KB,目前能下载到的最新版是0.55。
在写这段文字之前笔者特意读过它的源码,它最大的亮点在于调用了 PHP 内置解析器接口token_get_all,
并且使用Parser做了语法分析,实现了跨文件的变量及函数追踪,扫描结果中非常直观地展示了漏洞形成及变量传递过程,误报率非常低。
RIPS 能够发现 SQL 注入、XSS 跨站、文件包含、代码执行、文件读取等多种漏洞,支持多种样式的代码高亮。比较有意思的是,它还支持自动生成漏洞利用。
安装方法
下载地址:https://jaist.dl.sourceforge.net/project/rips-scanner/rips-0.55.zip.
解压到任意一个PHP的运行目录
在浏览器输入对应网址,可以通过下图看到有一个path 在里面填写你要分析的项目文件路径,点击 scan.
界面截图

seay 源代码审计系统
功能介绍
这些是seay 第一个版本的部分功能,现在最新版本是2.1。
傻瓜化的自动审计 。
支持php代码调试 。
函数/变量定位 。
生成审计报告。
自定义审计规则 。
mysql数据库管理 。
黑盒敏感信息泄露一键审计 。
支持正则匹配调试 。
编辑保存文件 。
POST数据包提交 。
安装方法
安装环境需要 .NET2.0以上版本环境才能运行,下载安装包之后点击下一步就安装好了,非常的简便。
安装包下载地址:http://enkj.jb51.net:81/201408/tools/Seayydmsjxt(jb51.net).rar
操作界面的截图

二、代码审计实战
通过刚才安装的两个审计工具运行后我们可以发现,会分析出很多隐藏的漏洞,那下面我们看看其中的SQL注入XSS、CSRF产生的原因,通过原因来分析如何去审计代码。
SQL注入
SQL注入漏洞一直是web系统漏洞中占比非常大的一种漏洞,下面我们来看看SQL注入的几种方式。
SQL 注入漏洞分类
从利用方式角度可以分为两种类型:常规注入、宽字节注入。
常规注入方式,通常没有任何过滤,直接把参数存放到了SQL语句当中,如下图。

非常容易发现,现在开发者一般都会做一些过滤,比如使用addslashes(),但是过滤有时候也不一定好使。
编码注入方式
宽字节注入,这个是怎么回事呢?
在实际环境中程序员一般不会写上面类似的代码,一般都会用addslashes()等过滤函数对从web传递过来的参数进行过滤。不过有句话叫做,道高一尺魔高一丈,我们看看白帽子是怎么突破的。用PHP连接MySQL的时候,当设置 character_set_client=gbk时候会导致一个编码漏洞。我们知道addslashes() 会把参数 1’ 转换成 1\’,而我们提交参数 1%df’ 时候会转成 1縗’,那我们输入 1%df’ or 1=1%23时候,会被转换成 1縗’ or 1=1#’。
简单来说%df’会被过滤函数转义为%df\’ ,%df\’ = %df%5c%27 在使用gbk编码的时候会认为%df%5c是一个宽字节%df%5c%27=縗’,这样就会产生注入。
那如何防御这个宽字节呢?我希望大家开发网站尽量使用UTF8编码格式,如果转换麻烦,最安全的方法就是使用PDO预处理。挖掘这种漏洞主要是检查是否使用了gbk,搜索guanjianc character_set_client=gbk 和mysql_set_chatset('gbk') 。
二次urldecode注入,这中方式也是因为使用了urldecode不当所引起的漏洞。
我们刚才知道了 addslashes()函数可以防止注入,他会在(‘)、(“)、()前面加上反斜杠来转义。
那我们假设我们开启了GPC,我们提交了一个参数,/test.php?uid=1%2527,因为参数中没有单引号,所以第一次解码会变成uid=1%27,%25解码出来就是%,
这时候程序里如果再去使用urldecode来解码,就会把%27解码成单引号(‘),最终的结果就是uid=1’.
我们现在知道了原有是因为urldecode引起的,我们可以通过编辑器的搜索urldecode和rawurldecode找到二次url漏洞。
从漏洞类型区分可以分为三种类型:
可显
攻击者可以直接在当前界面内容中获取想要获得的内容。
报错
数据库查询返回结果并没有在页面中显示,但是应用程序将数据库报错信息打印到了页面中。
所以攻击者可以构造数据库报错语句,从报错信息中获取想要获得的内容,所以我建议在数据库类中设置不抛出错误信息。
盲注
数据库查询结果无法从直观页面中获取攻击者通过使用数据库逻辑或使数据库库执行延时等方法获取想要获得的内容。

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载