前言
今天看到一个脚本需要爆破密码,我在已知密码是18位的情况下,妄想写个脚本去爆破,肯定是失败的,最后看到正确的脚本,我注意到里面用到*,最开始的理解是通配符绕过去了,经过shell脚本大佬·群主老师·云淡__风轻的点拨,我了解到一个关于shell脚本的知识点,有必要写个笔记记录一下。
进入正题
==绕过
先看脚本
1 | password='qwe123' |
逻辑就是定义一个password,然后我们的输入保存在input里,比较input和password看看o不ok
正常情况下我们要ok就应该输入‘qwe123’,和password去匹配
但是我们可以用到*, *在shell里叫glob,也叫通配符, *的作用可以用来匹配任何长度的任何字符,类似于正则里面的 *,
后来了解到glob有其他字符,各自有不同的功能,比如?可以匹配任意字符串,在我知道密码长度的情况下输入n个?,也能绕过
*没法用的情况1
如果脚本长这样
1 | password='qwe123' |
注意到$input前后多了引号,这个时候再使用*去通配就会失败
原因是:给$input前后加上引号,会导致*没办法展开,所以通配不了,这个时候只能输入和password一模一样的字符才能ok
*没法用的情况2
这个时候的脚本长这样
1 | password='qwe123' |
对比第一个脚本,在判断里面$input $password的位置调换了
这个东西有点抽象,群主当时给了例子
我自己复现了一下
接下来理解一下:*.txt能够代表很多个txt文件,他不能只等于1.txt,所以no,但是1.txt是 *.txt里面的一个,所以可以ok
通俗地讲就是多个文件不能等于特定的那一个,特定的一个文件属于多个文件里
回到input那里,我们给他输入*,就符合多个可能对应特定的一个,所以不能,所以not ok
*绕过的应用
了解到三个用法,有这个思路就可以用来爆破密码
1 | import string |
command = f”echo ‘{password}{character}*’注意这里最后就是有一个 *去通配,然后一位一位地去爆破密码
肯定不止这个用法,后续待更新
总结
肯定是要感谢群主的耐心指导
这个知识点现在理解了就觉得没什么,不过还是值得记录下来的