最近刷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博客

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

  1. Linux shell编程自动化运维,三剑客之awk原理,语法,内部变量,格式化输出,模式和动作 详细解析

    wsk 简单介绍 awk分别代表其作者姓氏的第一个字母.因为它的作者是三个人, 分别是Alfred Aho .Peter Weinberger . Kernighan. awk 是一种编程语言,用于在 ...

  2. 操作系统课程设计——Shell编程(用c编写一个Linux的外壳Shell)

    文章目录 前言 功能与展示 功能列表 功能展示 依赖库安装 具体实现 Shell工作流程 外部命令工作流程 内置命令工作流程 管道功能与I/O重定向的实现 alias功能的一些思考 Shell的编译与 ...

  3. python运维脚本面试_运维开发工程师 面试题 shell编程

    1. 32位随机密码生成 cat /proc/sys/kernel/random/uuid | tr -d '-' 2.查看当前系统每个ip的tcp连接数 -n 强制显示IP地址 -t 显示TCP连接 ...

  4. Shell 编程入门

    走进 Shell 编程的大门 为什么要学Shell? 学一个东西,我们大部分情况都是往实用性方向着想.从工作角度来讲,学习 Shell 是为了提高我们自己工作效率,提高产出,让我们在更少的时间完成更多 ...

  5. 用linux下的C语言编程万年历,shell编程万年历月历和对应c语言程序.docx

    shell编程万年历月历和对应c语言程序.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网 ...

  6. 【CentOS Linux 7】实验2【Shell编程及应用】

    Linux系统及应用---调研报告 [CentOS Linux 7]实验1[VMware安装.新建虚拟机:63个基础命令运行结果图] [CentOS Linux 7]实验2[Shell编程及应用] [ ...

  7. Shell编程之变量赋值和引用

    Linux的shell编程是一种非常成熟的编程语言,它支持各种类型的变量.有三种主要的变量类型:环境变量.内部变量和用户变量. 环境变量(environment variable)是系统环境的一部分, ...

  8. Shell编程——$[ ] 、${ }、$( )、[ ]、[[ ]]、(())的区别

    一.$[ ].${ }.$( )的区别 1.${ } Shell中使用一个已经定义过的变量,只要在变量名前面加美元符号$即可.变量名外面的{ }是可选的,只是为了帮助解释器识别变量的边界.具体介绍见博 ...

  9. Linux学习(十四)---大数据定制篇Shell编程

    文章目录 一.为什么要学习shell编程 二.Shell 是什么 三.shell 编程快速入门-Shell 脚本的执行方式 3.1 脚本格式要求 3.2 编写第一个 Shell 脚本 3.3 脚本的常 ...

最新文章

  1. 【数学建模】MATLAB应用实战系列(九十)-变异系数法应用案例(附MATLAB和Python代码)
  2. 7th思妙想 Fun事连连,今天范式7岁啦!
  3. Android 原生通知Notification 写法
  4. [转]iPhone发邮件编程
  5. oracle indices,Oracle PL/SQL INDICES
  6. 大数据分析有什么难题
  7. 大数据分析平台在企业运营中的作用
  8. sqoop简单的demo 先跑起来再说
  9. 3dmax导入REVIT
  10. QCC3020/QCC3040 TWS耳机按键切换EQ,APP切换EQ功能实现
  11. 随笔之---java版本哲学家就餐问题【信号量的实现】
  12. linux 重启startup.sh,centos中startup.sh启动服务脚本
  13. ML - 分类算法的评价
  14. 面对一直在房价洼地的长沙,我不后悔十几年前逃离长沙
  15. 第三方数据源大型库| CnOpenData全球专利及引用被引用数据
  16. OpenStack Victoria版——6.2计算节点-Nova计算服务组件
  17. instantrails installation
  18. 基于pako的gzip解压
  19. Manjaro找不到声卡问题
  20. 读书笔记|《金字塔原理》_第一章

热门文章

  1. 对数据库基本查询操作的练习
  2. vue cli更换版本
  3. adb mysql_ADB - 黑小莲花 - 博客园
  4. 手动实现vue2.0的双向数据绑定原理
  5. 迷茫了3年:做完这个测试项目,我终于决定辞职
  6. 怎样建网站赚钱企业建网站,网站建设的好处!
  7. android glide 4旋转图片,Android 效率开发之图片---Glide 旋转图片处理
  8. Java开发中并行和并发的区别
  9. android系统设置无障碍,RK3326 Android 8.1 为自己的APK的服务默认开启无障碍权限,避免使用时还是有一个小跳转:设置的无障碍选项...
  10. macOS 13 指南:macOS 的下一个版本可能是“猛犸象”