(1)Shell 编程学习 Shell是什么?Shell的浅显原理 为什么要学Shell 及其第一个Shell脚本 CTF角度学习Shell

最近刷CTF题目的时候经常要用到Shell语言,但是自己并没有系统的学习,所以最近花了点时间学习一下,所以重新来梳理一下。对于稍微有一点编程语言基础的同学,能上手Shell其实不需要半小时(甚至更短),当然熟练运用还是需要积累的。

目录

Shell是什么?

主观定义

官方定义及原理

 为什么要学Shell编程

第一个Shell脚本

CTF用到的shell


Shell是什么?

主观定义

主观的来说:大家只要用过电脑,就接触到了Shell,比如说自己电脑打开win+r,打开cmd,虚拟机打开终端。

其中跳动的  其实就是 shell。

 

 所以我们学渗透也经常听到,拿到一个shell,获取一个后门之类的话

其实就是获取这样一个界面的权限,从而我们能够对该电脑执行命令,或者说是服务器进行操作。(在这个命令行能够执行我们命令

官方定义及原理

在计算机语言中,Shell是指一种命令行解释器,是为用户和操作系统之间通信提供的一层接口(想象一下,如果没有一种与计算机沟通的方式,那么计算机如何得到来自人脑的指令呢),它接受来自用户输入的命令,并将其转换为一系列的系统调用送到内核执行,并将结果输出给用户。

(这个没学过的不必细看)

        事实上,Shell不只是一种解释器(在用户和系统间起着桥梁的作用),还是一种编程工具,称为脚本语言。与编译型语言(比如C/C++/JAVA等)不同,这种语言经过编写后不需要任何编译就可以运行。

        什么是解释型语言呢?这就要说到计算机运行程序的两种方式了。计算机不能理解高级语言,只能理解机器语言,所以必须把高级语言翻译为机器码。而这种翻译的方式又两类一类是编译                                                                                                                                一类是解释                                                                                                                                

不同之处在于翻译的时间不同。

编译型语言是运行前翻译,一般是使用编译工具将程序源码处理成机器认识的可执行文件(比如说Windows下的exe文件,Linux 下二进制可执行文件),这种文件一旦产生,以后运行时都不需要再次翻译,所以一般来说,编译型语言的效率较高;

解释型语言是运行时翻译,执行一条语句就立即翻译一条,而且每次执行程序都需要进行解释,相对来说效率较低。但是也不能简单认为编译型语言就一定比解释型效率高,随着解释器的发展,部分解释器能在运行程序时动态优化代码,因此这种效率差距也在一定程度上不断减少。

 为什么要学Shell编程

这个问题我也思考过?如果我用cmd 仅仅是为了输入一个 shutdown /s 让电脑关机的话,我为什么需要去按那么多下键盘?输入这些不熟悉的命令? 直接用鼠标操作或者是按下关机按钮不行?为什么要多此一举呢?

其实对于大多数使用电脑的用户来说,其实是不需要学习Shell语言的,鼠标+键盘已经能100%满足他们的需求了?

那么小部分需要学习Shell编程的用户是谁呢?是网站或者是服务器的运维人员又或者是黑客们。

我们可以比较一下这个场景。

假设网络遭受了攻击,往每台电脑都安装了一个木马文件,假使这个木马文件很好找。

  • 对于普通用户,找到直接删除就行
  • 那对于服务器的运维人员呢?,如果公司有着100台服务器,他挨个去打开服务器找到然后一个一个删除?那要是10000台服务器甚至更多呢?不得累死?

所以说Shell编程的意义就在这里,如果上面的服务器运维人员会Shell编程的话,花点时间写个Shell脚本,控制自己的服务器执行,那就行了。

(举得例子可能有点不恰当,但是这样理解没问题,哈哈)

linux shell脚本经典案例8---批量主机执行命令_初遇我ㄖ寸の热情呢?-CSDN博客_linux批量执行脚本

第一个Shell脚本

在kail虚拟机打开(其他大部分linux虚拟机其实也通用)

相信有基础的同学2秒就会好吧。

桌面打开终端,创立 helloworld.bash文件并编辑

nano helloworld.bash

ps: ctrl+o  即可以写入

#!/bin/bash
#first 
echo 'Hello World!'

 之后ctrl+x离开,问是否需要改文件名直接回车。

这里要解释一下,

第一行:一个Shell脚本永远是以“#!”开头的,这是一个脚本开始的标记,它是在告诉系统执行这个文件需要使用某个解释器,后面的 /bin/bash 就是指明了解释器的具体位置。

第二行:第二行同样是以“#”,但是这里是一个注解类似于我们C中的// 。写脚本的时候,多写注解是非常有必要的,以方便其他人能看懂你的脚本——实际上,即使是自己写的脚本,过一段时间也很容易忘记。

第三行:很简单的命令 输出 “Hello World”。echo类似于c中的printf。

在之后的文章里我会更进一步的写一更复杂的脚本实例。

CTF用到的shell

本人水平比较差,只能介绍几道基础题目了。

反弹shell执行:↓↓↓↓

i春秋 死亡ping命令 原理学习(命令执行+shell反弹)+复现_AAAAAAAAAAAA66的博客-CSDN博客s

构照shell脚本 执行  :↓↓↓↓



i春秋CTF ssrfme (peal函数中get命令漏洞)命令执行 详细题解+原理 学习过程_AAAAAAAAAAAA66的博客-CSDN博客zz
 

短命令执行:↓↓↓↓

HITCON2017 BabyFirst Revenge (短命令执行)_a3320315的博客-CSDN博客


参考资料:

Linux系统命令及Shell脚本实践指南-王军

linux shell脚本经典案例8---批量主机执行命令_初遇我ㄖ寸の热情呢?-CSDN博客_linux批量执行脚本
HITCON2017 BabyFirst Revenge (短命令执行)_a3320315的博客-CSDN博客
 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值