蓝桥云课第 25 期楼赛以信息安全为主题,于 1 月 19 日(上周二) 20:00 开赛,一共 3 道题目:
渗透测试中的加密解密(签到题)
渗透前期的边界突破技巧(简单)
后渗透阶段的提权技巧(中等)
下面是比赛的答案解析,没做过的同学一定要先尝试一下,再来看题解~
楼赛地址: https://www.lanqiao.cn/contests/lou25/challenges/第一题 渗透测试中的加密解密(签到题)
%4f%44%4d%30%4e%54%64%6a%4e%6a%6b%7a%5a%44%4d%7a%59%54%49%79%5a%6a%45%77%59%6d%4e%6b%4f%57%59%79%59%54%6b%30%5a%44%41%7a%4f%44%63%3d
&#x
开头是典型的 HTML实体编码,使用 HTMLDecode
解码后结果如下:
%4f%44%4d%30%4e%54%64%6a%4e%6a%6b%7a%5a%44%4d%7a%59%54%49%79%5a%6a%45%77%59%6d%4e%6b%4f%57%59%79%59%54%6b%30%5a%44%41%7a%4f%44%63%3d
%XX
是典型的 URL编码,客户端浏览器在发送数据包时,通常会对英文字母以外的内容(例如汉字、特殊符号)进行 URL 编码,在做 Web 类型的安全测试时,应该会经常看到。
注意:不同浏览器的 URL 编码策略是不同的。
使用 URLdecode 后得到:
ODM0NTdjNjkzZDMzYTIyZjEwYmNkOWYyYTk0ZDAzODc=
Base64编码会将3个字节转换为4个ASCII字符,'='字符用于填充结果,以便总是有4个编码字符的倍数。所以看到结尾是=
的字符串,有较大概率是 base64 编码。
注意:并非所有的 base64 编码后的字符串结尾都有=,从原理可知,仅当长度不为 4 的倍数时,才需要=来填充。
使用 Base64 Decode 后得到:
83457c693d33a22f10bcd9f2a94d0387
最后一步是使用 Hash 解密,可以使用 SOMD5
站点进行解密:
https://www.somd5.com/
更多可用来解密的网站,可以查询:
https://github.com/iSecurity-Club/Pentest-Methodologies#hash-%E5%9C%A8%E7%BA%BF%E8%A7%A3%E5%AF%86
使用 CMD5 解密之后得到:
youarewelcome
答案是:
lanqiao-flag{youarewelcome}
第二题 渗透前期的边界突破技巧(简单)
配置好实验环境之后,查看/etc/flag.txt
文件内容:
结果提示「权限不够」,查看 /etc/flag.txt
文件的权限信息:
原来只有
flag.txt
文件的所有者 www-data
用户才有阅读权限。
尝试使用 sudo 命令以 www-data 用户的身份查看:
但提示需要 shiyanlou
用户的密码才行,我们并没有。
所以我们这时候需要思考一下:www-data 用户的作用是什么?
www-data 用户实际上是 Web 服务的用户,例如 Linux 服务器通常会以 www-data 用户的身份来运行 apache 服务,所以我们自然想到要从 Web 服务入手。
使用 Nmap 或 ps 命令可查询到 8080 端口开放,尝试访问:
http://127.0.0.1:8080
发现运行的是:mini_httpd 服务,版本为 1.19 。
通过 Google 发现,该版本存在「本地文件包含」漏洞(CVE-2018-18778):
参考公网上的信息,进行漏洞利用,漏洞原理是将
Host:
头部置空即可。
此处你可以选择多种方法进行漏洞利用工具,例如 BurpSuite、Firefox 插件等等,我们选择最简单的 Curl 工具,命令如下:
curl http://127.0.0.1:8080/etc/passwd -H 'Host: '
可以看到成功读取到/etc/passwd
文件内容。
再尝试读取/etc/flag.txt
:
curl http://127.0.0.1:8080/etc/flag.txt -H 'Host: '
flag 为(注意 flag 是随机的):
lanqiao-flag{FMqI1xIj2n69NTcNNzXf7wg6lWd949xFNsvmeLYH2emg}
第三题 后渗透阶段的提权技巧(中等)
尝试 SUID 提权,使用如下命令搜索主机上存在 SUID 权限的二进制文件:
find / -perm -u=s -type f 2>/dev/null
经过与以下站点对比,发现 cp
命令可以用来 SUID
提权:
https://github.com/iSecurity-Club/Pentest-Methodologies/tree/master/PostExploit/LinuxPE/SUID/Summary
查看/var/local/backup/cp
详情,发现只有 yann
用户组才能执行该文件:
通过查看/etc/group
和/etc/passwd
发现 yann
组下有一个用户————yann
:
看来需要先想办法获取 yann
用户的权限。
进入 alice
用户的主目录,发现存在.bash_history
文件,该文件存储了用户执行过的历史命令:
查看.bash_history
文件内容,发现存在 /var/www/Discuz
目录,说明主机上安装了 Discuz:
根据经验,Discuz 配置文件中可能存放有数据库的登录凭证。
查看/var/www/Discuz/config/config_global.php
,果然发现了 mysql
的登录凭证:
cat /var/www/Discuz/config/config_global.php
使用以上凭证登录 mysql:
mysql -uroot -pdhIopyWhGVZO -h 127.0.0.1
登录成功,发现数据库 ManagerInfo
,通过查询数据表得到以下信息:
「密码复用」在内网中是非常常见的一个风险,在同一台主机上也经常出现密码复用的情况。
尝试使用HCRNPNdvCsWd8JGZaqZX
登录 yann
:
成功以 yann 用户身份登录,接下来就有了使用/var/local/backup/cp
的权限,可以直接将 /root/flag.txt
复制到/tmp/proof.txt
。
./cp /root/flag.txt /tmp/proof.txt
成功获取到 flag.txt。
如果你想更进一步,也可以使用 cp 命令来获取 root 权限。
先创建一个/tmp/passwd
文件:
cat /etc/passwd > /tmp/passwd
修改 /tmp/passwd
文件,将用户 yann 所在行的 uid
和 gid
全部修改为 0:
保存退出后,接下来使用/var/local/backup/cp
的 SUID 权限覆盖/etc/passwd
文件:
/var/local/backup/cp /tmp/passwd /etc/passwd
重新使用 su
命令登录为 yann
用户:
成功得到 root 权限, flag.txt 文件自然也可以轻松获得。
第三题考点为课程《渗透测试方法论:Linux 提权实战》中的:
第三章 passwd 文件提权
第五章 SUID 提权
第九章 查找敏感文件提权
蓝桥云课第一次举办信息安全类的竞赛,虽然遇到了一些坎坷,但我们也在努力解决,希望与大家一起进步。
再次感谢所有的参赛者,感谢。