米斯特白帽培训讲义 漏洞篇 弱口令、爆破、遍历
弱口令没有严格和准确的定义,通常认为容易被别人(它们有可能对你很了解)猜测或被破解工具破解的口令均为弱口令。弱口令指的是仅包含简单数字和字母的口令,例如”123”、”abc”等,因为这样的口令很容易被别人破解。
通过爆破工具就可以很容易破解用户的弱口令。
危害
中石油的多个加油站的视频监控被入侵,我们可以通过它们看一些隐私。也可以通过它把监控器关掉,来进行一些非法活动。
分类
普通型弱口令就是常见的密码,比如,目前网络上也有人特地整理了常用的弱口令(Top 100):
对于网站后台而言,一般为:
- admin
- admin123
- admin888
- admin666
- …
具体来说,不同的后台类型拥有不同的弱密码:
- 数据库(phpmyadmin)
- 账号:root
- 密码:root、root123、123456
- tomcat
- 账号:admin、tomcat、manager
- 密码:admin、tomcat、admin123、123456、manager
- jboss
- 账号:admin、jboss、manager
- weblogic
- 账号:weblogic、admin、manager
- 密码:weblogic、admin、manager、123456
条件型
条件型弱口令就是和用户信息相关的密码,比如生日+手机号、姓名首字母+生日、爱人姓名首字母+生日+常用字母(520、1314 等)。
我们可以使用这个来生成条件弱口令字典。
比如我们知道一个人,他的信息如下:
- 姓名:王小二
- 邮箱:412391882@qq.com
- 英文名:twowang
- 手机号:110
那我们就可以在这个网站上输入这些信息,然后点击下方的“提交”。
然后我们就得到了这个最有可能的密码。
点击“查看更多”之后还可以获取更多弱口令。
比如说,我们使用这样一段代码来演示弱口令漏洞,它模拟了某个系统的后台。
第一行到第七行组成了一个 HTTP 表单。我们可以看到,这个表单使用 POST 方法向这个页面自己提交信息,表单域对应 PHP 的un
变量,pw
表单域对应 PHP 的pw
变量。
第九行和第十行从 HTTP 请求的主体中取出un
参数和pw
参数。
第十一到第十八行对用户名和密码参数做判断,如果都为空,那么我们认为它仅仅是显示页面的请求,直接返回。如果un
为admin
,且pw
为admin888
,因为这是我们预设的正确用户名和密码,所以显示登陆成功,否则显示登录失败。
真实代码的用户名和密码是从数据库里面取的,但是它仍然是确定的东西,而且如果存在弱口令,还是能破解出来,原理一致。
把它保存为lesspass.php
,将其部署后访问http://localhost/lesspass.php
。
首先输入和admin
,尝试失败:
之后是admin
和admin123
,还是失败。最后尝试admin
和admin888
,成功。
可见,爆破破解的原理就是一个一个尝试,破解效果完全取决于你所使用的字典。如果密码碰巧在你的字典中,就一定能成功。
Burp Suite 爆破
首先我们需要把浏览器和 Burp 的代理配置好,打开 Burp 的拦截模式。之后我们在lesspass.php
页面中随便输入什么东西并提交,在 Burp 中就可以看到拦截的封包:
为了爆破密码,我们需要使用它的 Intruder 功能,右键弹出菜单并选择”Send to Intruder”:
之后访问 Intruder 标签页,在 Position 子标签页中我们可以看到封包。
我们需要点击右边的Clear
按钮把所有标记清除掉,由于我们需要破解密码,我们选中密码参数值点击Add
。
之后我们切换到旁边的 Payloads 标签页,点击中间的load
按钮,加载字典。我们选择之前的top100.txt
。
不要忘了要将admin888
插入进去。在下面的输入框中输入admin888
,并点击旁边的Add
。
点击右上角的Start Attack
来开始爆破(老版本是Intruder -> Start Attack
菜单栏),我们会看到结果列表。
我们点击Length
表头,让它按照长度来排序。可以发现有一个项目的长度与其它明显不同,那么它就是正确的结果。
PKAV Fuzzer
我们可以在下载工具。
我下载的版本的 1.5.6,我就可以双击Pkav HTTP Fuzzer 1.5.6.exe
来打开它。另外目录下还有一份使用手册,,大家可以参考这个手册。这个教程只会讲用到的功能。
左边是“请求包”输入框,我们需要填写整个 HTTP 封包(就是 Burp 中的Proxy -> Intercept
选项卡中的内容),我们将其复制过来。然后我们选中pw
位置的admin
,点击下面的“添加标记”:
我们再来看看右边的“重放设置”,“重放模式”和“变体赋值”都不用改动,我们点击下方的“导入”按钮,选择之前的top100.txt
。
之后再“添加”按钮右边的输入框中输入admin888
,然后点击“添加”。
然后我们点击下方的“发包器”选项卡,在新的界面中直接点“启动”:
然后我们点击“长度”表头,让它按照长度排序。
我们可以看到,仅当密码为admin888
时长度为 6,其它都是其它数值,那么它就是正确密码。
比如这段代码,我们将其保存为info.php
:
这段代码模拟了用户信息的查询页面,一共有五条记录。我们可以访问这个页面,并使用 Burp 来拦截。像之前一样,发送到Intruder
,然后清除掉所有标记,只保留 ID 的标记:
由于是纯数字,我们把上面的Payload Type
调成Numbers
。下面,我们把From
设为1
,To
设为10
,Step
设为1
。
之后点击Start Attack
。我们可以看到结果,其中ID 1 ~ 5 的长度都是 224,6 ~ 10 都是 211。我们之前的测试中,2 是有效的,所以 224 应该是有效内容的长度。
字典
更多字典请见 Kali 系统的目录。