来自 科技 2020-04-26 17:07 的文章

渗透测试入门 —— 你是会员吗?

1.这题的的目标是一个基于 XDCMS 的网站系统,XDCMS 有许多漏洞,常用于渗透测试练习。

实验手册:

渗透测试入门 —— 你是会员吗?

题目链接:https://www.ichunqiu.com/battalion?t=2&r=54399
解题链接:https://www.ichunqiu.com/vm/50679/1
根据题目,猜测存在可以获取管理员账号密码的漏洞

渗透测试入门 —— 你是会员吗?


使用搜索引擎搜索发现,当前这个CMS存在两个SQL注入漏洞,我们接下来开始尝试利用。

2.注册会员处的 SQL 注入

这个SQL注入漏洞存是因为 /system/modules/member/index.php 中的注册函数 register_save() 过滤不严,可绕过网站限制造成 SQL 注入。接下来访问目标站点,点击免费注册,根据提示填好各种信息。

渗透测试入门 —— 你是会员吗?

渗透测试入门 —— 你是会员吗?

填好参数后打开Burp Suite 工具,准备对注册信息进行抓包。设置代理。

渗透测试入门 —— 你是会员吗?

设置完毕后,回到注册页面,点击 注册 后,在 Burp Suite 上点击 Proxy -> Intercept -> Raw 选项卡,看到了成功抓取的注册数据包:

渗透测试入门 —— 你是会员吗?

成功抓取到注册的数据包。
单击右键接着点击Send to Repeater。

渗透测试入门 —— 你是会员吗?

便可在 Repeater 选项卡中看到刚才抓取的数据包,用于进行重放攻击:

渗透测试入门 —— 你是会员吗?

到这个界面
根据网上搜索到的漏洞报告中的利用方法以及 payload:

' UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14 FROM (SELECT count(1),concat(round(rand(0)),(SELECT concat(username,0x23,password) FROM c_admin LIMIT 0,1))a FROM information_schema.tables GROUP by a)b#

将这个payload 放入请求数据的 username 参数后,单击 Go,在右侧的响应数据中即可看到报错信息中泄露的管理员账号密码:

渗透测试入门 —— 你是会员吗?

得到管理员账号和密码为

1xdcms121#1be20cb2907edca1e4f55f375a5663f1

对密码进行解密

渗透测试入门 —— 你是会员吗?

成功解密,得到明文密码:xdcms212

3.使用目录扫描工具扫描网站后台地址

成功扫描出后台地址

渗透测试入门 —— 你是会员吗?


尝试登录

渗透测试入门 —— 你是会员吗?

4.制作图片马

我们继续搜索可用来利用的漏洞,发现 /system/function/global.inc.php 存在文件包含漏洞。根据漏洞说明文档,我们可以制作一句话图片木马,再将图片马上传到服务器,利用 URL 查询字符串的 m 参数指向图片马的路径,最终触发文件包含漏洞,等待菜刀连接。因此,我们先来制作图片马。随意找到一张图片 a.jpg(此处使用 XDCMS 的 logo ),新建含有一句话木马的文本文档 a.txt,在命令行模式下用 copy 命令合并两个文件:

渗透测试入门 —— 你是会员吗?

copy /b a.jpg + a.txt b.jpg
渗透测试入门 —— 你是会员吗?

5.上传图片马

回到后台管理界面,依次点击 模块管理 -> 幻灯片管理 -> 添加幻灯,发现此处能够上传图片,在 名称 处填上任意字符,在 链接地址 处填上 http://www.test.ichunqiu,接着点击 上传,选择图片马 b.jpg:

渗透测试入门 —— 你是会员吗?


uploadfile/image/20200403/202004030824570.jpg

根据上次图片马时的系统提示得到图片路径。由于 /uploadfile/ 在网站根目录下,而根据漏洞说明中的源码,可知参数 m 是在 /system/function/global.inc.php 文件中被引用,文件包含的关键语句如下:

include MOD_PATH.$m."/".$c.".php"; //调用类

因此使用菜刀 添加SHELL 时,赋值给 m 的图片马路径需要先从 MOD_PATH 返回根目录,在路径前面添加 ../../,猜测向上返回两级目录后可以到达根目录,如果猜测正确即能指向图片马的路径:

渗透测试入门 —— 你是会员吗?

接着尝试连接服务器,发现连接失败:原因是参数 m 被引用到源码后,后面还添加了一段字符串,该字符串默认为 /index.php。可在参数 m 末尾加入空字符 %00,对源码中的 include 语句进行截断。

渗透测试入门 —— 你是会员吗?

连接成功

渗透测试入门 —— 你是会员吗?


渗透测试入门 —— 你是会员吗?

在网站根目录下找到flag文件,至此目标完成。