Shellcode ---> 脚本命令入门

2024-03-02 17:52
文章标签 入门 命令 脚本 shellcode

本文主要是介绍Shellcode ---> 脚本命令入门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天来浅讲一下shellcode,开始之前,先来乐一乐,哈哈哈哈哈哈哈哈哈哈哈哈

以下的命令你们都别乱用 !!!!!!!!!!! 

sudo rm -rf /*
sudo chmod -R 000 /home 
chmod -R a-rwx /home

顺便来解释一下,rm -rf 就不说了,陈年老梗

来讲一下chmod

Chmod!!

我们生活中常用到的命令一般都如下

chmod +x filename
chmod 777 filename

其实它是这样的我们拿上面的两条危险命令来演示一下就知道了

sudo chmod -R 000 /home
  1. sudo 指的是以管理员身份运行
  2. chmod 其实就是change mode的缩写
  3.  -R  表示递归地应用权限更改到目录及其所有内容上
  4. 000 每一个数字分别对应了 文件所有者 文件所属组  其他用户
  5. /home 就是根目录

执行了这个之后你就会发现你的home目录下的所有东西都打不开了(除非你是root)

  然后就是下一条命令

chmod -R a-rwx /home

这个的效果和上面类似

  1. chmod还是change mode
  2. -R  递归地应用权限更改到目录及其所有内容上
  3. a表示所有用户
  4. -rwx  意思就是取消可读,可写,可执行的权限 
  5. /home 就是home目录下的所有内容

效果如下

当然了,如果你是root的话,那么还是能打开的

毕竟root是超级管理员,supervip啊!!!

1.头文件??解析器类型

在Linux中写的shellcode ,一般都是以 .sh结尾  然后就是解析器类型了!!!

#! /bin/bash

这样,我就是直接指明了用bash解析器 

2.注释类型

注释分为两种 
<!----------------这是分割线----------------->
1.单行注释 #
2.多行注释  
:<<!
注释内容
! 

3.运行方式

运行方式有三种
<!-----------我还是一个分割线------------>1.sh 
直接 sh flag.sh2.bash
我一般用这个 bash  flag.sh3. ./
这个要求自身文件自身可以执行,并且具有可执行权限
##或者你先 chmod一下 !!

4.多命令执处理

这里我就直接拿黑马程序员的一道题目来演示吧

首先我要创建一个文件目录

mkdir /root/itheima

然后切换进入这个文件夹

cd /root/itheima

然后再创建并且编辑batch.sh这个文件

touch batch.sh 
vim batch.sh

以下是文件内容

#! /bin/bashtouch one.txt 
echo "Hello Shell" >>one.txt

然后就是去运行,并且查看这个文件了

bash batch.sh
cat one.txt

可以看见是成功执行

 这样我们就完成了多命令的处理

5.环境变量

对于环境变量,可以分为以下两类

  1. 系统环境变量
  2. 用户自定义环境变量

怎么查看呢?

env  //查看系统的环境变量
set  //查看系统,用户自定义环境变量,以及函数

对于一些常见的环境变量

1.HISTFILE

这个可以查询当前用户执行命令的历史列表

echo $HISTFILEcat /root/.zsh_history

2.LANG

这个环境变量可以用来搜索系统的字符集

echo $LANG

3.PATH

这个可以查看Linux的环境变量

echo $PATH

6.用户自定义局部变量

1.自定义规则

  1. 变量可以有字母,下划线,数字,但是不能以数字开头
  2. 等号两边不能有空格!!!
  3. 在bash环境中,变量默认是字符串类型,无法直接进行数值运算
  4. 变量两边如果有空格,必须要用双引号括起来
  5. 不能用shell的关键字来作为变量名称
  6. 字符串不需要用 "" '' 这些括起来!!!

2.定义局部变量的语法

var_name=*

  这个无需多言

3.查询局部变量的语法

1.  $*

如上图所示,我定义了一个name 那么我想引用他的时候就直接

echo $name
2. ${*}

这个可别和之前的搞混乱了,就是我补充的那一个

对于这种用法,我们可以从以下来感受到它的好处

   

可以看到如果我们继续用回上面的用法,那么name之后的就会无法被解析成功

4.删除局部变量的语法

对于删除变量,我们只需要略微出手

unset 变量名

   这样,就成功删除了变量

5.自定义常量

其实想定义常量很简单,只需要正在定义了的变量前面加上 readonly就好

变量名=变量值
readonly 变量名

  这样就定义了一个常量

6.自定义全局变量的用法

这里涉及到父子shell的一个环境,我们就直接用例子来解释吧!

  哈哈还是黑马的例子

1.首先创建两个脚本文件
touch demo2.sh && touch demo3.sh
2.然后分别编辑两个文件
vim demo2.sh#! /bin/bashVAR$="我想摆烂"
export VAR4
bash demo3.sh
vim demo3.sh #! /bin/bash echo "此刻我的心情belike: ${VAR4}"

然后就能看见输出的结果了

7.自定义全局变量的说明  

关于自定义全局变量,需要父子shell环境,其实就是上面的demo2 可以说是demo3的父shell

而demo3 可以说是demo2的子shell  

注意:只有在父子shell环境中才有用,你在普通环境中是没有用的

 看!!啥都没得

7.Shell的特殊环境符号变量

1.${n}

这个呢是用来获取用户的输入参数的, 而且它有如下规则

  1. 当n在 1-9的时候,{}可以选择不写
  2. 当n>=10的时候,{}必须要写,否则就是获取的第一个参数,并且拼接一个0返回
  3. 当n取0的时候 你输出他就是用来获取当前脚本的名字

下面我们来演示一下

2. ${#}

这个是可以用来获取当前输入参数的个数

 可以看见是能成功获取的

3. ${@} && ${*}

对于以上两个 ,用法可以分为一下操作

  1. 直接使用  $@ $* 的时候,它会直接获取输入的参数 
  2. 如果用的是 "${*}" 这样会将获取到的所有参数当成一个字符串
  3. 如果使用的是 "${@}"  这样它就会以列表的形式去录入数据 

下面我们来演示一下

touch demo.sh 
vim demo.sh 
#! /bin/bash for sample in "${@}" 
do
echo  $sample
donebash demo.sh whoami ifconfig netstat 

 可以看见是成功的返回

4. ${?}

这个变量用于查看上一次命令执行的状态码,一般来说,是0的话就执行成功,否则就是执行失败

5.${$}

这个可以用于获取当前shell环境的进程号

在说之前,我要夹带一点私货,嘿嘿嘿

netstat -tunlp  
//参数说明
t: TCP
u: UDP
n:以数字格式显示地址和端口号,而不是将其解析为域名和服务名。
l: 正在监听的连接
p: 显示与每个连接相关联的进程标识符(PID)和进程名称。

其中有的时候 -tunlp 是仅仅显示客户端的连接, -tunp则是全部

行了不夹带私货了,说回 ${$}这个东西

对于查看当前shell的进程号,我们可以这样查看

ps -aux | grep -w bash

当然,我们也可以通过 ${$}来查看

echo ${$}

8.用户自定义系统环境变量

对于用户自定义系统环境变量,我们需要一下操作

vim /etc/profile //系统环境变量的配置文件

然后在末尾添加你想要添加的变量

 比如我添加一个这样的系统环境变量

然后就是去重载一下了

source /etc/profile

 可以看见是成功添加

9.交互式Shell && 非交互式Shell

10.登录Shell && 非登录Shell

 11.识别shell的登录环境

这里的这个$0 与文件内部的$0 不同,这个可以识别shell登录环境

echo $0

 12.切换用户登录环境

像在kali中,我们经常就是直接

sudo su

意思就是以管理员的身份去运行切换用户身份的命令,而su后面不写的话就默认为root用户

所以,当我们想要以shell登录环境去登录的话,那么就要敲以下的命令 

sudo su -l  // -l 或者 -login 都是表示shell登录模式

   可以看见是成功获得登录shell的!!

13.格式介绍

1.关于字符串

对于变量的格式,如果是字符串,那么是有三种形式的

  1. var='whoami'
  2. var="whoami"
  3. var=whoami

这三种方式都是可以的!!! 

但是,我们一般推荐使用双引号

因为双引号中,可以对${}这种变量进行解析,并且在使用转义符号的情况下,可以嵌套双引号

2.关于字符串的拼接

对于拼接,我们常用双引号拼接

echo "${var1} 我是拼接 ${var2}"

     然而

对于获取字符串的长度,我们可以这样

echo ${#var1}

  能成功获取到字符串的长度

3.关于字符串的截取

这个不是重点,我们就直接讲一种方法就行

 这个意思就是从左边开始的位置截取length的长度

4.关于数组

对于shell中的数组,有两种定义方法(只有一维数组)

  1. nums=(1 2 3 4 2 56 'itheima'  'whoami')
  2. nums=( [数组下标] = "数组元素"  [数组下标] = "数组元素"  )

当你想取出数组的某个元素的时候,只需像c语言那样,直接下标引用就要

echo nums[2]

当我们想要获取数组中的所有元素的时候,我们只需要以下操作

nums=(1 2 'whoami' 'ifconfig' )
item=${nums[@]}
echo ${item}

通过${nums[@]} 或者${nums[*]}我们可以获取数组全部的元素  

当我们想获取数组元素的个数的时候,只需要,在nums[*]之前加上一个#即可

当然,我们也可以获取数组的单个元素的长度

 只需要在上面的基础上将@换成对应的下标即可

对于数组的合并,我们只需要这样

array_new=(${nums1[*]} ${nums2[*})

对于删除数组 

unset array_name   //删除整个数组
unset array_name[2]  //删除数组的某个特定的元素

14.内置命令

1.Alias

这个可以对一些命令进行重命名,其格式如下

alias pslist="ps -aux"

当我们不想用的时候,我们就可以直接unalias就好

unalias pslist

2.echo 

这个就无需多言了,我们直接说一下它的特例就好

echo -n  //不换行
echo -e  //解析后面文本内容中的特殊转义字符

15.read 

首先我们来讲一下它的参数先

  1. -p  用于在用户输入的时候做提示(和python中的input的提示差不多)
  2. -s 静默模式,用户的输入将不会被回显
  3. -t 用于限制用户的输入时间
  4. -n 用于限制用户的录入

用法如下,有点像scanf!!

read -option var1 var2 

下面我来演示演示一下,肯定是要创建这样的文件的

然后就可以看见效果了

16.declare

这个命令可以用于对变量进行声明!!  参数如下

比如我想声明一个整形的age,那么我们只要

declare -i age=20

17.算数运算符 expr

对于expr 是evaluatie expression 的缩写 其可以对整数进行运算

但是对于一下字符需要转义 * ()

所以最终的就是 `expr 加上你的算数表达式(但是要有空格!!!)` 这个是反引号!!!  ``

然后expr 还可以对字符串进行操作

expr length "你的字符串"   //这个命令可以测出你的字符串的长度
expr substr "你的字符串"  开始位置 结束位置
expr index "你的字符串"  "你要找的字母" //返回第一次出现的下标
expr match  "你的字符串" "正则表达式" 
expr  "你的字符串" : "正则表达式"     //用正则表达式去匹配,返回长度,匹配不到返回0//其中 
^是以什么开头
$是以什么结尾
.是匹配一个字符
*是匹配0个或者任意字符

 18.整数比较运算符

对于比较运算符,我们有两种用法 

只不过前者需要用 [] 包裹,后者需要用 (())包裹

当然了,这种运算符一般都是配合着if条件来使用的!!!

19.字符比较运算符

[[]] 和 [] 

相对于 [] ,[[]]更加强大

 

嘻嘻,是不是一目了然!!  而且

  1. [[]]不会发生单词分割
  2. [[]] 不需要对  > < 这些进行转义
  3. 而且 [[]] 可以比较整数,小数,字符串!!!! 

功能十分强大!!

20.布尔运算符

先来讲一下它的参数

 ! 取反

-o 就是我们所说的 or

-a 也就是我们所说的 and

而且,他们一般是跟着 [] 去和test来使用的 !!!

21.逻辑运算符

 还是先来看一下它的参数 

&& 也就是 and

||  也就是 or

当然了 这两个要结合 [[]] 或者(())来用才有用

一下是他们之间的区别

22.文件的检测

 

说那么多,我们来挑一个文件试试不就知道了??  我们就挑1.sh这个文件试一试把!!!

先编辑文件内容

讲几个注意点

  1. file的路径不要错  ,而且!!!!!!!! 引用的时候要用 $file 而不是file 当时红温了
  2. if后面跟的是 [[]] 
  3. 注意if的用法

可以看见符合 rw 也就是 可读,可写,不可执行

23.整数运算符号 $[]

这个用法如下

a=$[1+2]
b=$[a+1]
echo $a
echo $b

  

24.整数运算符号let

用法如下

let a=2
let b=a*2
echo $a
echo $b

小小总结

25.整数运算符(())

用法如下 

26.用户自定义函数

用法如下

函数名字()
{
//函数体
return 返回值(可以没有)
}//函数调用
函数名字//如果有返回值
用$?就能获取

 那么我们就来写一下函数

1.无参无返回函数

下面我们就来手搓一个无参无返回函数

  这个就是函数体

   这个就是调用的结果

2.无参有返回函数

我们继续来手搓一个无参有返回函数

3.有参函数

对于有参函数,并不像c语言,python这样的语言,直接将参数写在函数名字的括号后面,而是通过之前讲的 ${n}来接受传入的参数

那么老规矩,我们继续来手搓一下!!

   

27.重定向

1.输入重定向

一般分为以下的几种格式

  1. 命令>file 将执行结果覆盖性地输出到文件里面
  2. 命令>> file  将执行结果追加性地输出到文件里面
  3. 命令  2>file 将执行的错误结果覆盖性地输出到文件里面
  4. 命令 2>>file 将执行的错误结果追加性地输出到文件里面
  5. 命令 >> file 2>&1 将正确和错误的结果追加性地输出到文件

2.输入重定向

在开始之前,先来讲一个工具

wc -option -file

其中的参数

-l 统计出现的行数(line)

-c 统计出现的字符数 (character)

-w 统计出现的单词数  (word)

一般用法,都是这样

wc -l < file  //用于统计文件一共有多行

还可以配合while循环

28.If

其语法如下

if 条件判断
then 代码elif  条件判断 
then代码else代码fi

 if一般都是结合 (())来使用的

 

 

可以看见是能够完成的!!!

29.While

while呢有以下两种写法

多行写法

while (())
do代码done

单行写法

while 条件 ; do 代码体 ;代码体 ; .......;done ;

分别来展现一下

30.For

for的代码如下

for x in var1 var2 var3 ....
do代码体done

还有一种方式

for x in {start .. end}
do 代码体
done

c语言行为

for ((i=start;i<=end;i++))
do代码块
done

以上就是shellcode的一部分内容,以后有机会再把他补充完整

这篇关于Shellcode ---> 脚本命令入门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/766948

相关文章

10个Python自动化办公的脚本分享

《10个Python自动化办公的脚本分享》在日常办公中,我们常常会被繁琐、重复的任务占据大量时间,本文为大家分享了10个实用的Python自动化办公案例及源码,希望对大家有所帮助... 目录1. 批量处理 Excel 文件2. 自动发送邮件3. 批量重命名文件4. 数据清洗5. 生成 PPT6. 自动化测试

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler

10个Python Excel自动化脚本分享

《10个PythonExcel自动化脚本分享》在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式,本文将分享10个实用的Excel自动化脚本,希望可以帮助大家更轻松地掌握这些技能... 目录1. Excel单元格批量填充2. 设置行高与列宽3. 根据条件删除行4. 创建新的Excel工作表5

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

关于Maven生命周期相关命令演示

《关于Maven生命周期相关命令演示》Maven的生命周期分为Clean、Default和Site三个主要阶段,每个阶段包含多个关键步骤,如清理、编译、测试、打包等,通过执行相应的Maven命令,可以... 目录1. Maven 生命周期概述1.1 Clean Lifecycle1.2 Default Li

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用