
一. Shell 脚本:渗透测试的“玩具”还是运维自动化的“核弹”?
Shell,这玩意儿,你说它是啥?一个古老的命令行界面?还是个能把运维工程师从重复劳动中解放出来的脚本引擎?在网络安全圈,对 Shell 的看法更是两极分化。有人觉得它就是个“玩具”,搞渗透测试时偶尔用用;但也有人把它当成“核弹”,在自动化安全运维中发挥巨大威力。
1. Shell 脚本:不仅仅是个命令行
别再把 Shell 脚本当成简单的命令行工具了!它其实是个迷你编程语言,能帮你把一连串的命令串起来,自动完成各种任务。
1. Shell 脚本这几块“砖”,你必须得懂
想玩转 Shell 脚本?先搞清楚这几个基本概念:
1.1 注释:给代码加点“人话”
# 井号开头的就是注释,给代码加点解释,方便自己和别人看懂。不然过几天回头看,鬼知道你写的是啥!
1.2 变量:装数据的“盒子”
用 = 等号给变量赋值,比如 IP="192.168.1.1"。记住,等号两边不能有空格!变量就像一个个盒子,可以装字符串、数字,甚至是数组。
1.3 控制结构:让脚本会“思考”
if...else、for、while 这些就是控制结构,让脚本可以根据条件判断,或者重复执行某些操作。没有它们,脚本就只能一条路走到黑,太死板了。
1.4 函数:代码的“积木”
用 function_name() { ... } 定义函数,把常用的代码块封装起来,方便重复使用。就像搭积木一样,把一个个小功能组合成一个大应用。
1.5 输入输出重定向:数据流的“搬运工”
<、>、>> 这些符号,可以改变命令的输入输出方向,把数据从文件搬到命令,或者把命令的结果存到文件。
2. Shell 脚本“方言”大观:选哪个好?
Shell 也有很多种,就像各地的方言一样。常见的有:
2.1 Bash:Linux 界的“普通话”
Bash 是 Linux 和 macOS 的默认 Shell,也是最流行的。兼容 POSIX 标准,功能也比较全,用的人最多。
2.2 Zsh:程序员的“潮语”
Zsh 拥有强大的自动补全功能和插件支持,深受开发者喜爱。就像编程界的 "Oh My Zsh" 一样,谁用谁知道!
2.3 Ksh:老牌“贵族”
Ksh 结合了 C Shell 和 Bourne Shell 的特点,功能强大但相对小众。
2.4 Dash:轻量级“特种兵”
Dash 设计简洁高效,通常用作系统初始化时的 Shell。体积小,启动快,适合在资源有限的环境中使用。
3. Shell 脚本:网络安全领域的“十八般武艺”
Shell 脚本在网络安全领域应用广泛,比如:
3.1 系统安全巡检:自动化“体检”
定期检查系统配置、用户权限、安全漏洞等,及时发现安全隐患。
3.2 自动化渗透测试:效率“加速器”
编写脚本模拟攻击行为,快速发现目标系统的弱点。
3.3 日志分析:从“蛛丝马迹”中发现攻击
分析大量的日志文件,提取关键信息,追踪攻击者的行为。
3.4 应急响应:快速“止血”
在安全事件发生后,快速执行一系列操作,隔离受影响系统,阻止攻击扩散。
二. Shell 变量:网络安全工具箱里的“百宝箱”
1. 变量:存储安全信息的“容器”
Shell 变量,就像网络安全工具箱里的“百宝箱”,可以用来存储各种信息,比如 IP 地址、域名、用户名、密码等等。
2. 变量:安全脚本的“基石”
变量是 Shell 脚本的基石,掌握了变量的使用,才能编写出灵活、可维护的安全脚本。
3. 变量的定义与赋值:给“百宝箱”贴标签
给变量赋值的语法很简单:
MY_VAR="敏感信息"
注意,等号两边不能有空格!变量名通常用大写字母,用下划线分隔单词。
4. 引用变量:打开“百宝箱”
使用变量的值,需要在变量名前面加上美元符号 $:
echo "敏感信息是:$MY_VAR"
5. 特殊变量:Shell 自带的“锦囊妙计”
Shell 还提供了一些特殊的预定义变量,比如:
$HOME:当前用户的主目录。$USER:当前用户的用户名。$PATH:可执行程序的搜索路径。$PWD:当前工作目录。$0:当前脚本的名称。
这些变量就像 Shell 自带的“锦囊妙计”,可以方便地获取系统信息。
6. 变量的作用域:谁能访问“百宝箱”?
Shell 变量的作用域通常是局部的,只在当前 Shell 进程及其子进程中可见。要想让变量在所有 Shell 进程中都可见,需要将其定义为环境变量。
7. 变量的“变形术”:高级用法
Shell 还支持变量的替换和扩展功能,比如:
${VAR:-default}:如果变量 VAR 未定义或为空,则使用默认值。${VAR:=default}:如果变量 VAR 未定义或为空,则将其设置为默认值。${VAR:?message}:如果变量 VAR 未定义或为空,则输出错误信息并退出脚本。${VAR:+value}:如果变量 VAR 已定义且不为空,则返回给定的值。
这些功能可以让你更灵活地处理变量和参数,编写更健壮的安全脚本。
8. 数组变量:批量管理安全信息
在 Bash 等 Shell 中,还支持数组变量,可以用来存储多个数据项。
IPS=("192.168.1.1" "192.168.1.2" "192.168.1.3")
echo ${IPS[0]} # 输出第一个 IP
echo ${IPS[@]} # 输出所有 IP
数组变量可以方便地批量管理 IP 地址、域名等安全信息。
三. Shell 脚本参数传递:让安全脚本“动”起来
1. 脚本需要参数?就像黑客需要“武器”
Shell 脚本要处理各种安全任务,参数就像黑客手中的“武器”,让脚本能够根据不同的情况执行不同的操作。
2. Shell 脚本的“武器库”:参数变量
Shell 使用特定的变量来获取传递给脚本的参数:
$0:脚本本身的名称。$1, $2, ..., $n:传递给脚本的第 1 个、第 2 个,直到第 n 个参数。$@:所有参数的列表。$#:参数的个数。
3. 简单示例:参数传递“初体验”
#!/bin/bash
echo "脚本名称: $0"
echo "第一个参数: $1"
echo "第二个参数: $2"
echo "所有参数: $@"
echo "参数个数: $#"
执行 ./example.sh 192.168.1.1 80,输出:
脚本名称: ./example.sh
第一个参数: 192.168.1.1
第二个参数: 80
所有参数: 192.168.1.1 80
参数个数: 2
4. 参数处理“进阶技巧”
- 选项参数: 使用
getopts处理-f filename这种形式的参数。 - 空格和引号: 参数包含空格或引号,用双引号括起来
"argument with spaces"。 - 默认值和验证: 使用条件语句设置默认值或验证参数的有效性。
5. 实战演练:参数传递在安全领域的应用
- 批量扫描: 传递 IP 地址列表,批量扫描目标主机的端口。
- 漏洞利用: 传递漏洞编号和目标 IP,自动化执行漏洞利用脚本。
- 日志分析: 传递日志文件路径和关键词,快速提取关键信息。
四. Shell 数组:安全工具的“集结号”
1. 数组:批量管理安全目标的“利器”
Shell 数组可以存储多个数据项,方便批量管理安全目标,比如 IP 地址、域名、URL 等。
2. 数组的定义和赋值:创建安全目标的“清单”
IPS=("192.168.1.1" "192.168.1.2" "192.168.1.3")
PORTS[0]="80"
PORTS[1]="443"
3. 访问数组元素:从“清单”中提取目标
echo ${IPS[0]} # 输出第一个 IP
echo ${PORTS[1]} # 输出第二个端口
4. 获取所有元素:一次性查看所有目标
echo ${IPS[@]} # 输出所有 IP
echo ${PORTS[*]} # 输出所有端口
5. 获取数组长度:掌握目标的“数量”
echo ${#IPS[@]} # 输出 IP 数量
echo ${#PORTS[*]} # 输出端口数量
6. 遍历数组:逐个处理安全目标
for ip in "${IPS[@]}"
do
nmap $ip
done
7. 数组操作:灵活调整安全目标“清单”
- 添加元素:
IPS+=("192.168.1.4") - 删除元素:
unset IPS[0]
8. 安全实战:数组的应用场景
- 配置文件处理: 读取和管理多个配置项。
- 日志数据处理: 分析和过滤多行日志数据。
- 系统管理任务: 管理多个文件或目录路径。
五. Shell 运算符:安全脚本的“计算器”和“比较器”
1. 运算符:安全脚本的“计算器”
Shell 运算符可以进行数学运算、逻辑判断和字符串处理,让安全脚本能够进行各种复杂的计算和判断。
2. 算术运算符:加减乘除,安全计算的基础
a=10
b=20
echo $((a + b)) # 输出:30
echo $((b - a)) # 输出:10
echo $((a * b)) # 输出:200
echo $((b / a)) # 输出:2
echo $((b % a)) # 输出:0
3. 逻辑运算符:真真假假,安全判断的依据
a=10
b=20
if [ $a -eq $b ]
then
echo "a 等于 b"
else
echo "a 不等于 b"
fi
4. 字符串运算符:文本处理,安全分析的帮手
str1="hello"
str2="world"
if [ $str1 = $str2 ]
then
echo "字符串相等"
else
echo "字符串不相等"
fi
5. 赋值运算符:变量赋值,安全信息的存储
var="hello"
echo $var # 输出:hello
6. 其他运算符:逻辑与、逻辑或、命令替换
&&:逻辑与||:逻辑或`:命令替换$():命令替换(另一种形式)
7. 使用注意事项:变量引用、条件判断
- 变量引用:使用双引号将变量括起来,避免空格和特殊字符导致的意外行为。
- 条件判断:使用方括号或双括号包裹表达式,注意空格的使用。
六. Shell 命令:安全脚本的“指令集”
1. Shell echo 命令:打印安全信息
echo 命令用于在终端输出文本或变量内容,是安全脚本中常用的信息输出工具。
1.1 基本用法
echo "Hello, World!" # 输出:Hello, World!
1.2 常用选项
-e:启用转义字符解释。-n:禁止输出结尾添加换行符。-E:禁用转义字符解释(默认选项)。
1.3 输出变量内容
name="Alice"
echo "Hello, $name!" # 输出:Hello, Alice!
1.4 结合其他命令输出
echo "Today is $(date)" # 输出当前日期时间
1.5 安全应用
- 脚本输出:输出提示信息、调试信息。
- 文本处理:插入文本、拼接字符串。
- 日志记录:输出日志信息到日志文件中。
1.6 高级用法
- 颜色输出:使用 ANSI 转义序列输出彩色文本。
- Here 文档:使用
<<语法输出多行文本。
1.7 使用注意事项
- 引号问题:使用引号括起来字符串,避免特殊字符造成的误解释。
- 转义字符:使用
-e选项启用转义字符解释。 - 换行符:使用
-n选项禁止输出结尾添加换行符。
2. Shell printf 命令:格式化安全信息
printf 命令用于格式化输出文本和变量,提供更多的控制选项。
2.1 基本语法
printf FORMAT [ARGUMENT]...
2.2 基本用法
printf "Hello, world!
"
2.3 格式化输出
%s:输出字符串。%d,%i:输出十进制整数。%f:输出浮点数。%c:输出字符。%x,%X:输出十六进制数(小写或大写)。
2.4 控制输出宽度和精度
%10s:输出字符串,总宽度为 10 个字符。%.2f:输出浮点数,保留 2 位小数。
2.5 转义序列
支持转义序列输出特殊字符。
2.6 安全应用
- 格式化输出:生成表格、报告等。
- 调试和日志:输出变量的值和调试信息。
- Shell 脚本中的输出:与其他命令组合使用生成特定格式的输出。
2.7 使用注意事项
- 变量和转义:确保变量的值不包含引号或特殊字符,或者适当进行转义。
- 格式控制符的正确使用:使用正确的格式控制符避免输出意外结果或错误。
2.8 与 echo 的比较
printf:更灵活和精确的输出控制。echo:更简单直观。
3. Shell test 命令:测试安全条件
test 命令用于检查文件类型和比较值,是安全脚本中常用的条件判断工具。
3.1 基本用法
test 条件
[ 条件 ]
3.2 常见条件
- 检查文件是否存在:
-e filename - 检查文件是否是普通文件:
-f filename - 检查文件是否是目录:
-d directory - 字符串比较:
"hello" = "hello" - 数值比较:
1 -eq 1
3.3 常见选项
- 文件属性检查:
-e,-f,-d,-s - 字符串比较:
=,!= - 数值比较:
-eq,-ne,-gt,-lt
3.4 安全应用
- 条件语句:判断条件是否满足。
- 循环控制:控制循环的执行次数或条件。
- 脚本中的函数:判断参数是否合法或者满足特定条件。
3.5 使用注意事项
- 空格问题:操作符和参数之间需要有空格。
- 字符串比较注意引号:使用双引号括起来字符串。
7 Shell 流程控制:安全脚本的“指挥棒”
7.1 条件判断:安全策略的“决策者”
条件判断通过 if...else 结构实现,根据条件的真假执行不同的命令或代码块。
7.1.1 基本语法
if [ condition ]; then
# 如果条件成立执行的命令
else
# 如果条件不成立执行的命令
fi
示例
port=80
if [ $port -eq 80 ]; then
echo "HTTP 端口"
else
echo "非 HTTP 端口"
fi
7.1.2 多条件判断
使用 elif 实现多个条件的判断。
ip="192.168.1.1"
if [ $ip = "127.0.0.1" ]; then
echo "本地主机"
elif [ $ip = "192.168.1.1" ]; then
echo "内网主机"
else
echo "外网主机"
fi
7.2 逻辑运算符:安全判断的“连接器”
-a:逻辑与-o:逻辑或!:逻辑非
7.3 循环:安全任务的“自动化执行器”
循环结构包括 for、while 和 until 循环,用于重复执行一段代码。
7.4 for 循环
for var in list
do
# 执行的命令
done
示例
ports=(80 443 8080)
for port in ${ports[@]}
do
nmap -p $port 192.168.1.1
done
7.5 while 循环
while [ condition ]
do
# 执行的命令
done
示例
count=1
while [ $count -le 5 ]
do
echo "扫描第 $count 个 IP"
((count++))
done
7.6 until 循环
until [ condition ]
do
# 执行的命令
done
示例
num=0
until [ $num -ge 5 ]
do
echo "Number is $num"
((num++))
done
7.7 安全应用
- 文件处理:根据文件是否存在或者其属性进行不同的操作。
- 数据处理:循环处理数据集合或者根据条件筛选数据。
- 系统管理:根据系统状态执行不同的操作,如服务启停、日志清理等。
8 Shell 函数:安全脚本的“模块化工具箱”
8.1 基本语法
function_name() {
# 函数体(命令序列)
}
或者
function function_name {
# 函数体(命令序列)
}
示例
#!/bin/bash
# 定义一个简单的函数
check_port() {
nmap -p $1 $2
}
# 调用函数
check_port 80 192.168.1.1
8.2 函数参数
函数可以通过特殊变量 $1, $2, $3 等来访问参数。
8.3 返回值处理
通过 return 语句返回退出状态码,或者通过修改全局变量或输出结果来实现。
8.4 安全应用
- 代码复用:将重复执行的任务封装成函数。
- 模块化开发:将大型任务分解成多个函数。
- 错误处理:封装常见的错误处理逻辑为函数。
8.5 使用注意事项
- 局部变量:使用
local关键字声明局部变量。 - 参数处理:谨慎处理参数,避免因为参数未定义或为空导致的意外行为。
9 Shell 输入/输出重定向:安全信息的“搬运工”
9.1 标准输入、标准输出和标准错误
- 标准输入(stdin):默认从键盘接收输入。
- 标准输出(stdout):默认输出到屏幕。
- 标准错误(stderr):默认输出到屏幕,用于错误消息。
9.2 输出重定向
将命令的标准输出发送到文件。
command > output_file
9.3 追加重定向
将输出追加到文件末尾。
command >> output_file
9.4 输入重定向
从文件读取输入。
command < input_file
9.5 重定向标准错误
将错误消息重定向到文件。
command 2> error_file
9.6 合并标准输出和标准错误
command > output_file 2>&1
9.7 /dev/null 设备
丢弃输出。
command > /dev/null
9.8 管道操作
将一个命令的输出作为另一个命令的输入。
ls -l | wc -l
9.9 安全应用
- 日志处理:将应用程序的输出重定向到日志文件中。
- 自动化任务:将命令的输出静默或者记录到特定的文件中。
- 错误处理:将错误消息记录到文件以便后续分析。
10 Shell 文件包含:安全配置的“模块化管理”
10.1 基本用法
使用 source 或者 . 命令来实现文件包含。
source filename
. filename
10.2 使用注意事项
- 路径问题:注意文件的路径。
- 变量共享:被包含的文件中定义的变量会成为包含文件的一部分。
- 权限:被包含的文件需要具有执行权限。
10.3 安全应用
- 函数库:将一组相关的函数放在一个文件中,并通过文件包含来复用这些函数。
- 配置文件:将配置信息单独放在一个文件中,通过文件包含来加载这些配置信息。
- 模块化开发:将大型脚本分解成多个模块,通过文件包含来组装这些模块。
10.4 使用文件包含处理配置文件
#!/bin/bash
# 包含配置文件
source config.sh
# 使用配置信息
echo "Connecting to $HOST:$PORT with username $USERNAME"
请注意,这只是一个示例,实际应用中需要根据具体情况进行调整。

黑客/网络安全学习包


资料目录
-
成长路线图&学习规划
-
配套视频教程
-
SRC&黑客文籍
-
护网行动资料
-
黑客必读书单
-
面试题合集
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
*************************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************
1.成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
*************************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************
2.视频教程
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
*************************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************
3.SRC&黑客文籍
大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录
SRC技术文籍:

黑客资料由于是敏感资源,这里不能直接展示哦!
4.护网行动资料
其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!
5.黑客必读书单
**

**
6.面试题合集
当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。

更多内容为防止和谐,可以扫描获取~

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
*************************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*********************************
1万+

被折叠的 条评论
为什么被折叠?



