ThinkPHP 5.0是目前最新的版本,历经多年的升级完善,深受网站设计公司 的喜欢,在互联网上也是一个开源的,免费、多个功能插件、API接口功能强悍的PHP 语言开发的一款程序,ThinkPHP从设计以来一直秉承简洁实用的设计原则,在保证出 色的性能和至简的代码的同时,也很注重实用性。 
SINE安全公司在对其最新版本的程序进行网站安全审计的时候,发现该程序存在数据 库密码信息泄露漏洞,在PDO PHP查询中可以阻止大多数的恶意参数攻击,而且 ThinkPHP 5.0框架要求的是在php 5.4版本上运行,这也就防止了php在5.3.6版本下 的SQL查询注入的漏洞。

在对其代码进行安全审计,其实这是一个SQL注入点,可以查询到一些数据库的账号 以及密码等安全信息。Thinkphp5.0里代码设计里调用到了函数input来替代3.2.3版 本里的I函数,利用该函数,控制了in语句的数值位置,即可通过传入一个数组并带 入恶意的参数,来构造SQL注入语句,进行获取数据库的账号密码。

在$bindName参数里我们对网站进行了详细的网站安全检测,将$k数值写进到了 $bindName里,并在$value数值确实为一个数组的同时,这里边会遍历全部的$value 的数值,也就是说我们控制了预编译SQL语句中的键名,也是可以控制了预编译的SQL 语句,这个在理论上来说是一个SQL注入漏洞。
这漏洞过程当中涉及到预编译的执行过程了。通常PDO PHP预编译执行过程分三步: 一、prepare($SQL) 编译SQL语句 二、bindValue($param, $value) 将value绑定到param的位置上 三、execute() SQL语句执行 这个漏洞实际上就是控制了第二步的$param变量,这个变量如果是一个SQL语句的话 ,那么在第二步的时候是会抛出错误的:Sine安全公司是一家专注于:服务器安全、 网站安全、网站安全检测、网站漏洞修复,渗透测试,安全服务于一体的网络安全服务 提供商。
看页面提示是有SQL注入漏洞的,笔者在这里也尝试着使用MYSQL报错注入,但结果失 败的,值得一提的是这种数据库账户和密码泄漏的前提是SQL语句执行失败或者发生 异常的时候才会出现。如果非SQL语法错误的debug模式下是不会泄漏数据库账户和密
码的。

执行发现,虽然我只调用了prepare函数,但原SQL语句中的报错已经成功执行: 究其原因,是因为我这里设置了PDO::ATTR_EMULATE_PREPARES => false。 这个选项涉及到PDO的“预处理”机制:因为不是所有数据库驱动都支持SQL预编译, 所以PDO存在“模拟预处理机制”。Sine安全公司是一家专注于:服务器安全、网站 安全、网站安全检测、网站漏洞修复,渗透测试,安全服务于一体的网络安全服务提供
商。
如果说开启了模拟预处理,那么PDO内部会模拟参数绑定的过程,SQL语句是在最后 execute()的时候才发送给数据库执行;如果我这里设置了 PDO::ATTR_EMULATE_PREPARES => false,那么PDO不会模拟预处理,参数化绑定整 个过程都是和Mysql交互进行的。
ZhouSa.com-宙飒天下网 
SINE安全公司在对其最新版本的程序进行网站安全审计的时候,发现该程序存在数据 库密码信息泄露漏洞,在PDO PHP查询中可以阻止大多数的恶意参数攻击,而且 ThinkPHP 5.0框架要求的是在php 5.4版本上运行,这也就防止了php在5.3.6版本下 的SQL查询注入的漏洞。

在对其代码进行安全审计,其实这是一个SQL注入点,可以查询到一些数据库的账号 以及密码等安全信息。Thinkphp5.0里代码设计里调用到了函数input来替代3.2.3版 本里的I函数,利用该函数,控制了in语句的数值位置,即可通过传入一个数组并带 入恶意的参数,来构造SQL注入语句,进行获取数据库的账号密码。

在$bindName参数里我们对网站进行了详细的网站安全检测,将$k数值写进到了 $bindName里,并在$value数值确实为一个数组的同时,这里边会遍历全部的$value 的数值,也就是说我们控制了预编译SQL语句中的键名,也是可以控制了预编译的SQL 语句,这个在理论上来说是一个SQL注入漏洞。


码的。

执行发现,虽然我只调用了prepare函数,但原SQL语句中的报错已经成功执行: 究其原因,是因为我这里设置了PDO::ATTR_EMULATE_PREPARES => false。 这个选项涉及到PDO的“预处理”机制:因为不是所有数据库驱动都支持SQL预编译, 所以PDO存在“模拟预处理机制”。Sine安全公司是一家专注于:服务器安全、网站 安全、网站安全检测、网站漏洞修复,渗透测试,安全服务于一体的网络安全服务提供
商。

还没有评论,来说两句吧...