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

基于dedecms网站的一次渗透

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

 需要对一个使用dedecms搭建的网站进行一次渗透,对方的网站的防护人员具有一定的安全意识,已经在很多的敏感的地方进行了加固,常见的dedecms漏洞都已经修复了,常见的可能存在的漏洞模块也被清除了,网站也是不是在godaday上面。而我目前的信息是知道了后台的登录地址,管理员的账号密码。最终的目的就是要求这个网站无法访问。

信息收集

使用管理员的账号登陆到后台页面进行查看,发现防护人员删除了 文件管理模块 ,这里的删除指的是防护人员是直接删除了文件管理员模块对应的那几个文件,而不是在dedecms后台上面的删除,因为我当时想通过直接安装文件管理模块时失败了。通过在后台页面进行查看,发现这个网站之前已经被人种马了,但是管理员是直接不启用这个php文件。通过分析,我认为管理员可能通过删除物理文件的方式已经将很多的文件进行了删除。

我们已经进入了后台,而且虚拟主机很难提权,那么我们想的是通过在网站中布置大量的木马,让网站在我的控制之下。那么此时就需要知道目前还有那些文件是可以访问的,就写了下面一个简单的diff脚本。

import argparse
import os
from urllib.parse import urljoin
import requests
# import os.path
# 程序没有使用协程,速度略慢
def access(url):
    headers = {
        'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36',
    }
    response = requests.get(url,headers=headers)
    return response.status_code == requests.codes.ok

# 
def get_access(files,baseurl):
    can_access_files= []
    for file in files:
        url = urljoin(baseurl,file)
        print(url)
        canaccess = access(url)
        if canaccess:
            can_access_files.append(file)
    return can_access_files


# 得到了本地所有的文件
def get_local_files(filepath):
    # 遍历本地所有的文件
    files = []
    for parent,dirnames,filenames  in os.walk(filepath):
        for filename in filenames:
            abspath = os.path.join(parent,filename)
            # 得到文件的后缀
            file_suffix = os.path.splitext(os.path.basename(abspath))[1][1:]
            if file_suffix in suffix:
                relativepath = os.path.relpath(abspath,filepath)
                files.append(relativepath)
    return files

def main(filepath,local,remote,suffix):
    files = get_local_files(filepath)
    files = [file.replace('\\','/')for file in files]
    local_access_files = get_access(files,local)
    local_access_files = [file.replace('\\','/')for file in local_access_files]
    remote_access_files = get_access(local_access_files,remote)
    urls = [urljoin(remote,file) for file in remote_access_files]
    urls_str = '\r'.join(urls)
    with open('urls.txt','w') as file:
        file.write(urls_str)
    print('运行完毕')

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='dedecms diff')
    parser.add_argument('-f', '--file',required=True,
        dest='localfile', action='store',
        help='the dedecms local file')
    parser.add_argument('-l', '--local',required=True,
        dest='local', action='store',
        help='the dedecms local host')
    parser.add_argument('-r', '--remote',required=True,
        dest='remote', action='store',
        help='the dedecms remote host')
    parser.add_argument('-s', '--suffix',default='php', nargs='*',
        dest='suffix', action='store',
        help='the file that you want to diff')
    args = parser.parse_args()
    
    filepath = args.localfile
    local = args.local
    remote = args.remote
    suffix = args.suffix
    main(filepath,local,remote,suffix)

由于目前还是一个单线程的脚本,在访问目标网站的时候,速度会比较慢,后续可能到使用协程的方式来解决速度慢的问题。

通过这种方式,就可以知道目前网站的防护人员删除了哪些本可以正常访问的php文件。

修复文件管理模块

发现虽然网站的防护人员手动删除了dedecms的文件上传模块,但是我可以通过手动上传一个打包的文件上传模块上去,这样我就可以有一个文件上传模块,这样就可以做很多的事了。

在上传模块的时候,有一点需要注意的地方是在于,在导出模块的时候,需要选择导出的文件名,此时需要修改文件名,否则就会和已知的文件名相重复,这个比较难以描述,但是大家实际动手操作一边就知道了。

在本地打包好了文件管理模块进行安装时,发现需要安装文件管理模块的目录没有写入权限,那么说明就无法通过这种方式来安装文件管理模块。

如果无法上传文件管理模块,那么其他的后续操作都无法进行了。

dedecms文件上传模块分析

其实上传的dedecms的文件模块就是一个xml文件,观察xml的格式如下:

<module>
<oldfilelist>
file_manage_control2.php
file_manage_main2.php
file_manage_view2.php
file_pic_view2.php
templets/file_edit2.htm
templets/file_manage_main2.htm
templets/file_pic_view2.htm
</oldfilelist>
</systemfile>
<modulefiles>
<file type='file' name='file_manage_control2.php'>
对应的file_manage_control2.php文件中的代码的base64decode
</file>
.......

上面显示的就是部分xml文件格式代码

从中可以看到 <oldfilelist> 中就声明了模块所需要的所有的文件,同时还表明了文件的路径。那么对于默认的路径无法进行写入,我就尝试其他的目录是否具有写入权限,修改的方式也很简单。

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

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