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.sh

2.bash
我一般用这个 bash  flag.sh

3. ./
这个要求自身文件自身可以执行,并且具有可执行权限
##或者你先 chmod一下 !!

4.多命令执处理

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

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

mkdir /root/itheima

然后切换进入这个文件夹

cd /root/itheima

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

touch batch.sh 
vim batch.sh

以下是文件内容

#! /bin/bash

touch one.txt 
echo "Hello Shell" >>one.txt

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

bash batch.sh
cat one.txt

可以看见是成功执行

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

5.环境变量

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

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

怎么查看呢?

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

对于一些常见的环境变量

1.HISTFILE

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

echo $HISTFILE

cat /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/bash

VAR$="我想摆烂"
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
done


bash 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的一部分内容,以后有机会再把他补充完整

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/422501.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

九、JavaAgent核心——Instrumentation

九、JavaAgent核心——Instrumentation 动态 Instrumentation 是 Java SE 5 的新特性&#xff0c;它在 java.lang.instrument 包中&#xff0c;它把 Java 的 instrument 功能从本地代码中释放出来&#xff0c;使其可以用 Java 代码的方式解决问题。使用 Instrumentation&#…

docker报错 fatal error: runtim: out of memory

fatal error: runtim: out of memory 真无语了 系统内存也够用 原来是虚拟机的不够用了 &#xff08;原本1g已经加到2g还是会报错&#xff09; 直接3台虚拟机都加到4g

物联网与智慧城市:融合创新,塑造未来城市生活新图景

一、引言 在科技飞速发展的今天&#xff0c;物联网与智慧城市的融合创新已成为推动城市发展的重要力量。物联网技术通过连接万物&#xff0c;实现信息的智能感知、传输和处理&#xff0c;为智慧城市的构建提供了无限可能。智慧城市则运用物联网等先进技术&#xff0c;实现城市…

Flink基本原理 + WebUI说明 + 常见问题分析

Flink 概述 Flink 是一个用于进行大规模数据处理的开源框架&#xff0c;它提供了一个流式的数据处理 API&#xff0c;支持多种编程语言和运行时环境。Flink 的核心优点包括&#xff1a; 低延迟&#xff1a;Flink 可以在毫秒级的时间内处理数据&#xff0c;提供了低延迟的数据…

7款炫酷的前端动画特效分享(二)(附效果图及在线演示)

分享7款好玩的前端动画特效 其中有CSS动画、SVG动画、js小游戏等等 下方效果图可能不是特别的生动 那么你可以点击在线预览进行查看相应的动画特效 同时也是可以下载该资源的 jQuery拉开帷幕特效 基于jQuery实现的帷幕特效 点击右侧拉条 可以实现帷幕的收起也展开 非常的炫酷…

协议和序列化反序列化

“协议”和序列化反序列化 “协议”的概念&#xff1a; “协议”本身是一种约定俗成的东西&#xff0c;由通讯双方必须共同遵从的一组约定&#xff0c;因此我们一定要将这种约定用计算机语言表达出来&#xff0c;此时双方计算机才能识别约定的相关内容 我们把这个规矩叫做“…

【论文阅读】基于图像处理和卷积神经网络的板式换热器气泡识别与跟踪

Bubble recognizing and tracking in a plate heat exchanger by using image processing and convolutional neural network 基于图像处理和卷积神经网络的板式换热器气泡识别与跟踪 期刊信息&#xff1a;International Journal of Multiphase Flow 2021 期刊级别&#xff1a;…

02-Vue 计算属性与监听器与VUE-cli使用

1.计算属性 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width,…

C++从入门到实践要掌握的20个的代码案例及入门技巧

文章目录 C从入门到实践要掌握的20个的代码案例C从入门到实践&#xff0c;开发者需要掌握的基础知识和技能可以分为以下几个阶段&#xff1a;初级阶段&#xff1a;中级阶段&#xff1a;高级阶段&#xff1a; C快速入门技巧&#xff1a; C从入门到实践要掌握的20个的代码案例 C…

vSphere资源管理

一 内存、CPU、资源池和vApp 内存部分&#xff1a; 关联VM内存 我们可以超额的关联内存给VM。例如&#xff1a;ESXI物理主机内存只有8G&#xff0c;但我们可以给三个VM都分配4G内存。 2.ESXI四大高级内存控制技术 a.Page sharing&#xff08;透明的页面共享&#xff09; 虚…

鸿蒙Harmony应用开发—ArkTS声明式开发(自定义事件分发)

ArkUI在处理触屏事件时&#xff0c;会在触屏事件触发前进行按压点和组件区域的触摸测试&#xff0c;来收集需要响应触屏事件的组件&#xff0c;再基于触摸测试结果分发相应的触屏事件。在父节点&#xff0c;开发者可以通过onChildTouchTest决定如何让子节点去做触摸测试&#x…

iclone空白处粘贴帧是否归集到前面的clip的关键开关

1假设走到这里了我想给他一个停止站立的姿势即把最开始的站立姿势给他让他自动过渡&#xff08;想的美&#xff0c;其实此路不通&#xff0c;因归集的pose方位不会随前一个clip末帧因此过程只会滑动或滑转过去&#xff0c;不适合脚步行走的生物&#xff0c;详见下面的实例&…

【Git学习笔记】提交PR

step1 克隆一个仓库 git clone .....step2 创建一个分支 (Creating a branch) # 创建并切换到本地新分支&#xff0c;分支的命名尽量简洁&#xff0c;并与解决的问题相关 git checkout -b delete-unused-linkstep3 做出修改 (Make changes) step4 提交修改 # 保存本地修…

Android ANR 日志分析定位

ANR 是 Android 应用程序中的 "Application Not Responding" 的缩写&#xff0c;中文意思是 "应用程序无响应"。这是当应用程序在 Android 系统上运行时&#xff0c;由于某种原因不能及时响应用户输入事件或执行一个操作&#xff0c;导致界面无法更新&…

基于springboot+vue的在线考试系统(源码+论文)

文章目录 目录 文章目录 前言 一、功能设计 二、功能页面 三、论文 前言 现在我国关于在线考试系统的发展以及专注于对无纸化考试的完善程度普遍不高&#xff0c;关于对考试的模式还大部分还停留在纸介质使用的基础上&#xff0c;这种教学模式已不能解决现在的时代所产生的考试…

windows 11 前后端项目部署

目录 1.准备环境&#xff1a; 2.安装jdk 测试&#xff1a;winr 输入cmd 3.安装tomcat 4.安装mysql 远程导入数据&#xff1a; 外部后台访问&#xff1a;192.168.232.1:8080/crm/sys/loginAction.action?usernamezs&password123 5.安装nginx 前后端部署&#xff1…

NCDA设计大赛获奖作品剖析:UI设计如何脱颖而出?

第十二届大赛简介 - 未来设计师全国高校数字艺术设计大赛&#xff08;NCDA&#xff09;开始啦&#xff01;视觉传达设计命题之一: ui 设计&#xff0c;你想知道的都在这里。为了让大家更好的参加这次比赛&#xff0c;本文特别为大家整理了以往NCDA大赛 UI 设计的优秀获奖作品&a…

【服务发现--service】

1、service的定义 "Service"简写"svc”。Pod不能直接提供给外网访问&#xff0c;而是应该使用service。Service就是把Pod暴露出来提供服务&#xff0c;Service才是真正的“服务”&#xff0c;它的中文名就叫“服务”。可以说Service是一个应用服务的抽象&#…

吴恩达机器学习全课程笔记第五篇

目录 前言 P80-P85 添加数据 迁移学习 机器学习项目的完整周期 公平、偏见与伦理 P86-P95 倾斜数据集的误差指标 决策树模型 测量纯度 选择拆分方式增益 使用分类特征的一种独热编码 连续的有价值特征 回归树 前言 这是吴恩达机器学习笔记的第五篇&#xff0c…

第七十二天 漏洞发现-Web框架中间件联动GobyAfrogXrayAwvsVulmap

第72天 漏洞发现-Web框架中间件&联动&Goby&Afrog&Xray&Awvs&Vulmap 知识点&#xff1a; 1、Bup简单介绍&使用说明 2、Xray简单介绍&使用说明 3、AWWS简单介绍&使用说明 4、Goby简单介绍&使用说明 5、Afrog简单介绍&使用说明 6、…