密码脚本编写
创建一个简单的入门级猜数密码脚本
mkdir -v /sh
vim /sh/caizi.sh
#!/bin/bash
read -p 'please input your number:' x
if [ $x -eq 520 ]
then
echo 'you are right'
elif [ $x -gt 520 ]
then
echo 'you are bigger'
else
echo 'you are little'
fi
这里无论输入是否正确都会退出,需要做脚本优化
脚本优化
创建一个简单的猜数密码脚本
vim /sh/caizi.sh
#!/bin/bash
while :
do
read -p 'please input your number:' x
if [ $x -eq 520 ]
then
echo 'you are right'
break
elif [ $x -gt 520 ]
then
echo 'you are bigger'
else
echo 'you are little'
fi
done
给文件添加可执行权限
chmod +x /sh/caizi.sh
执行脚本
. /sh/caizi.sh
这里没有对密码输入类型和长度进行设置,可以正则表达式对输入内容做初步限制
正则表达式
vim /sh/caizi.sh
#!/bin/bash
while :
do
read -p 'please input your number:' x
echo -e $x | egrep -q '[0-9a-zA-Z]+$' #限制必须输入数字或大小组名
if [ $ -ne 0 ]
then echo 'please enter numbers or letters'
elif [ $x -eq 520 ]
then
echo 'you are right'
break
else
echo 'you are wrong'
fi
done
(a-z无法和1-9比较)
简单的脚本注入
输入注入代码
please input your number: 1 -eq 1 -o 123
未作正则表达式
做了正则表达式
这里运用的是输入没有限制可以注入相应的脚本(如‘-’)从而绕过密码并且还可以执行其他命令甚至获取root权限
由此可见简单的入门脚本可以通过脚本注入的方法实现无需密码登陆十分不安全,这时我们就需要用到正则表达式对输入的密码做限制过滤传入的参数。
正则表达式
vim /sh/caizi.sh
#!/bin/bash
while :
do
read -p 'please input your number:' x
y=$(echo -e $x | sed 's/-//g' )
echo -e $x | egrep -q '[0-9a-zA-Z]+$' #限制必须输入数字或大小组名
if [ $ -ne 0 ]
then echo 'please enter numbers or letters'
elif [ $y -eq 520 ]
then
echo 'you are right'
break
else
echo 'you are wrong'
fi
done
(这里可以将退出命令break改为其他命令,这样输入正确就会执行其他命令)
修改脚本功能:
如果密码输入正确创建520you用户密码为520,输入失败则直接退出
vim /sh/caizi.sh
#!/bin/bash
while :
do
read -p 'please input your number:' x
y=$(echo -e $x | sed 's/-//g' )
echo -e $x | egrep -q '[0-9a-zA-Z]+$' #限制必须输入数字或大小组名
if [ $ -ne 0 ]
then echo 'please enter numbers or letters'
elif [ $y -eq 520 ]
then
echo 'you are right'
i=${x}you
useradd $i
echo "520" | passwd –stdin $i
break
else
echo 'you are wrong'
break
fi
done
可以看到如果用户已创建还会执行,需进一步优化。
vim /sh/caizi.sh
#!/bin/bash
while :
do
read -p 'please input your number:' x
y=$(echo -e $x | sed 's/-//g' )
echo -e $x | egrep -q '[0-9a-zA-Z]+$' #限制必须输入数字或大小组名
if [ $ -ne 0 ]
then echo 'please enter numbers or letters'
elif [ $y -eq 520 ]
then
echo 'you are right'
( i=${x}you
if id $i
then
echo "$i exist"
else
useradd $i
echo "520" | passwd –stdin $i
fi )
break
else
echo 'you are wrong'
break
fi
done
虽然做了输入限制,但没有限制输入次数和时间可以通过暴力破解破解出密码,因而脚本还需要做进一步的脚本优化。