ThinkPHP 源代码的网站安全审计

 
 
    最近某一客户的网站经常被攻击,被挂马,从百度来的点击直接跳转到博彩网
 
站上去了,给客户造成很大的影响,本来网站的权重在百度很高,每天流量都在1-3万

徘徊,最近因为网站被黑导致流量急剧下滑,SINE安全公司根据这一情况进行了紧急的网站安全应急响应。
 
 
客户的网站整体架构是ThinkPHP 3.23版本,也是目前最新ThinkPHP版本,在此基
 
础上客户找了专业的程序开发公司,进行了二次单独开发,很多功能以及程序代码
 
都重新编译了,仔细的检查了下客户的网站代码,对每个代码都进行了详细的网站
 
安全审计。Sine安全公司是一家专注于:服务器安全、网站安全、网站安全检测、网站安全测试、于一体的安全服务提供商。

 
 
在安全审计过程中发现客户的ThinkPHP网站,存在严重的SQL注入漏洞,可以随意
 
获取管理员以及用户的账号密码。分3个高危漏洞:
 
 
一、远程代码执行漏洞
 
登录客户前端网站的普通用户操作面板,对各项操作进行了渗透测试,以及网站漏
 
洞测试,发现前端的普通用户这里,可以通过POST提交直接执行远程代码执行漏洞
 

看了下配置文件代码里的Adminshow函数,这个代码的功能是在检查ADMIN_SHOW这
 
个字段中是否含有cliSwitch的赋值,如果有的话代码就会造成字符串拼接造成远
 
程代码执行漏洞。


 
 
二、逻辑漏洞
 
又对前台的用户注册的功能进行了安全测试,整体上是MVC的框架,一般用户的验
证登录都已经在父类中做好了。
 

 
安全测试好多次,网站用户登录验证的这个功能,始终没有安全绕过去。也就是说
 
,没有登录根本就无法绕过,又是在没有账号的前提下,网站根本就是么办法进行
 
SQL注入的。仔细检查了网站的根目录,Install是安装目录的意思,进去一看,网
 
站竟然可以进行重装。Sine安全公司是一家专注于:服务器安全、网站安全、网站安全检测、网站安全测试、于一体的安全服务提供商。
 
在重装的过程里,竟然可以随意的创建后台管理员。如下图所示:


 
 
三、网站SQL注入漏洞
 
ThinkPHP3.23版本是存在前端的SQL注入漏洞的,利用构造userid[0]
 
=SINE&userid[1]=xxxx'or 1=2之类的注入语句进行了爆错爆数据库的错误,本来
 
这个二次开发的ThinkPHP系统就是被大改了,在进行sql注入尝试的过程中发现被
 
CheckPost的函数安全过滤了,如下所示:

 

 
 
利用GET、POST、REQUEST方式进行了详细的渗透测试,其实除了这三种提交数据方
 
式,网站还使用了第四种方法,I方法提交数据是ThinkPHP-3.1.3之后才添加的一
 
种方式。仔细发现,还真存在了一处字符串sql拼接的地方,如下图所示:

 
分享: