搜索
查看: 1157|回复: 0

将普通shell升级为全交互式终端

[复制链接]

1839

主题

2255

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11913
发表于 2017-7-19 23:37:42 | 显示全部楼层 |阅读模式

转自:http://bobao.360.cn/learning/detail/4117.html

相信每一个渗透测试人员都明白那种美妙的感觉——netcat接收到反弹回来的反向shell,一行行让人满足的的详细的netcat信息被打印出来。

如果其他的渗透测试人员也像我一样,他们肯定也知道那种可怕的感觉——当他们的shell因为他们运行了一个错误的命令而被挂起时,本以为敲击“Ctrl-C”会搞定这个状况,但是没想到却断开了整个连接。

[/url]

除了不正确的处理技术,这些“愚蠢”的shell还有其他的缺点:

1.一些命令,比如“su”和“ssh”需要适当的终端才能运行

2.标准错误信息(STDERR)经常不会被显示出来

3.不能正确使用文本编辑器如VIM

4.没有命令补全功能

5.“上”按键没有历史纪录功能

6.没有任务管理功能

7.等等。。。

长话短说,虽然这些shell相对来说很容易实施和捕获,但我更希望在一个完全互动的终端(TTY)中进行操作。

我发现了一些很好的资源,其中包括一些非常有用的技术和技巧,可以用来“升级”这些shell,希望在一篇文章中展示和分享。 在Pentest Monkey网站上, 根据Phineas Fisher发布的视频和他非法活动的writeups,我学会了这些技巧。

1.[url=http://pentestmonkey.net/blog/post-exploitation-without-a-tty]Pentest Monkey - Post Exploitation Without a TTY

2.Phineas Fisher Hacks Catalan Police Union Website

3.Phineas Fisher - Hackingteam Writeup

先简单说一下思路,在后面的截图和命令中,我会向一个有漏洞的Web服务器(受害者)注入命令,然后在我的kali虚拟机上接收反弹回来的shell。

1.受害者 IP: 10.0.3.7

2.我的KALI IP: 10.0.3.4


Generating reverse shell commands


相信每一个人都十分熟悉利用netcat获取反向shell的传统方法:

[/url]

接收:

[url=http://p6.qhimg.com/t0122f72fdeaa923ffa.png]

但问题是并不是每一个服务器会安装netcat,而且也并不是每一个版本的netcat有“-e”参数。

Pentest Monkey上有一个很大的备忘单,列出了好些不同的方法,但是我最喜欢用的方法是利用Metasploit的msfvenom来为我生成一套命令。

在Metasploit 的"cmd/unix"目录下,有一些payload可以用来生成一套bind shell或者是反向shell。

[/url]

这些payload中的任何一个都可以配合msfvenom使用生成我们所需要的原始命令(需要指定LHOST, LPORT or RPORT)。比如,以下是一个netcat命令,其并不需要“-e”参数:

[url=http://p3.qhimg.com/t01d025cfdd86bdd49a.png]

还有一个Perl oneliner可以处理netcat没有被安装的情况:

[/url]

这些都可以通过使用netcat和监听端口(4444)来捕获。


Method 1: Python pty 模块


在捕获了一个“愚蠢”的shell之后很长一段时间内,我使用的核心命令是用Python来加载pty模块。Pty模块可以为你生成一个伪终端,这可以欺骗一些命令如“su”,让他们以为他们是在合适的终端中执行的。要想升级“愚蠢”的shell,让他们具有如上的功能,只需简单的运行如下命令:

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

[url=http://p9.qhimg.com/t014144f0b43fd4e2e8.png]

然后你就可照常运行“su”等命令,如下

[/url]

不幸的是,该方法并不能解决上面提到的其他一些问题。组合键(Ctrl-C)仍将关闭netcat,也没有命令不全功能或历史记录功能。但这个快速但不完美的解决方法,帮助了我无数次。


Method 2: 使用 socat


[url=http://www.dest-unreach.org/socat/doc/socat.html]Socat就像netcat一样是一个非常强大的网络瑞士军刀。通过TCP连接,我们可以用socat建立完整的TTY。如果在受害者服务器上安装了socat,你就可以用它来反弹一个反向shell。而你必须捕获与socat的连接,以便获得全部的功能。

下面的命令会生成一个完全交互的TTY反向shell:

On Kali (listen):

[/url]

On Victim (launch):

[url=http://p9.qhimg.com/t0170a9cdc9b61967b5.png]

如果socat没有被安装,也不要叹气,这里还有一些独立的二进制文件,你可以到下面的GitHub链接中下载:

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

利用一个命令注入漏洞,就可以用一行命令在受害者服务器下载一个正确架构的socat到可写目录,然后改变它的权限(chmod),最后执行并反弹回一个反向shell:

[/url]

而在kali上,你会捕获到一个完整交互的TTY会话,它支持命令补全功能,支持SIGINT/SIGSTP,vim,“上”键的历史纪录功能,等等。这是一个完整的终端,非常好。

[url=http://p4.qhimg.com/t01adeb8fae1bf339d7.png]


Method 3: 魔法般的升级netcat


我在Phineas Fisher的黑客视频中看到他使用了这种技术,感觉就像是魔法一般。简单的说,只要设置一下kali终端内的一些stty参数,就可以将一个“愚蠢”的netcat shell升级为一个完整的TTY。

首先,遵循与方法1相同的技术,用Python加载PTY模块,一旦bash在PTY中运行了,用组合键“Ctrl-Z”将shell放到后台中去。

[/url]

当shell进到后台之后,现在来检查当前的终端和STTY信息,如此一来我们就可以强制已经连接上的shell去匹配它:

[url=http://p8.qhimg.com/t01d17ed589461c49b8.png]

我们需要的信息是TERM类型("xterm-256color")和当前TTY的窗口大小("rows 38; columns 116")。

让shell继续保持在后台运行,现在将当前的STTY设置为原始类型,并告诉它回显输入字符,命令如下:

[/url]

由于使用了原始类型的STTY,所以这些输入/输出看上去都怪怪的,而且你也不会看到下一条命令,但是当您键入它们时,它们就会被处理。

接下来用“fg”将shell提到前台来,它会重新打开反向shell,但是内容的格式将会被去除掉。最后,用“reset”重置终端。

[url=http://p7.qhimg.com/t019bc0562e9bd35d34.png]

注意:我并没有再次手动输入“nc”命令(上图中看起来像是我手动输入的)。我输入的是“fg”,只是它没有回显。现在“nc”命令是在前台的任务了。然后将“reset”命令输入到netcat shell中。

在用“reset”进行了重置后,shell看起来应该恢复了正常。最后一步是设置shell,终端类型,以及STTY的大小,使其匹配我们当前的kali窗口(信息来自上面收集的)。

[/url]

最终的结果是得到一个完全交互的TTY,它包含了我们所期望的所有特性(命令补全功能、历史记录功能、任务控制等),所有这些都是在一个netcat连接上:

   [url=http://p9.qhimg.com/t015077b78f2d3e22d6.png]

现在的可能性是无穷的。可以用Tmux来处理一个netcat shell吗 ? ?为什么不可以呢?:D

[/url]

命令备忘录:

用Python创建假终端

[url=http://p0.qhimg.com/t01b27898909ac52f22.png]

使用socat

[/url]

使用STTY选项

[url=http://p2.qhimg.com/t01e37b426f3395b9aa.png]


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?Join BUC

x
过段时间可能会取消签到功能了
您需要登录后才可以回帖 登录 | Join BUC

本版积分规则

Powered by Discuz!

© 2012-2015 Baiker Union of China.

快速回复 返回顶部 返回列表