BruteForce
一、low级别
在登录时使用bp进行抓包
将抓到的包发送到Intruder模块。设置需要爆破的参数,和爆破的类型。
这里爆破的类型一共有四种:
- sniper(狙击手):一个字典,可以设置多个爆破点,但是只能按顺序进行爆破。
- Battering ram(攻城锤):一个字典,可以设置多个爆破点,多个爆破点可以同时进行爆破。
- Pitchfork(杈):每一个爆破点对应一个字典,取每个字典的对应项。
- Cluster bomb(集束炸弹):每一个爆破点对应一个字典,交叉匹配所有可能。
一般建议使用第四种类型,可以遍历所有可能。
然后在payload选项中添加字典模板,需要添加两个,也可以使用本地的字典文件。
长度和其他的不同的,大概率就是用户名和密码了。
代码分析
相关函数:
- mysqli_num_rows()函数:返回结果集中行的数目。
- mysqli_fetch_assos()函数:返回根据从结果集取得的行生成的关联数组,如果没有更多行,则返回 false。
他对用户输入的用户名和密码没有做任何的过滤就会去查询数据库,因此我们在只知道用户名的情况下可以使用万能密码 admin' or '1'='1
来闭合或者说是绕过查询语句它:$query = "SELECT * FROM users WHERE user = '$user' AND password = '$pass';";
,直接进行登录。结果如下图所示。
二、 medium级别
依旧按照和low级别相同的步骤进行暴力破解。
我们依旧可以破解成功,但是我们会发现破解的过程中很慢,我们来看看源代码。
代码分析
相关函数:
- trigger_error()函数:创建用户自定义的错误。
- E_USER_ERROR:用户自定义错误类型。
- mysql_fetch_assoc() 函数:从结果集中取得一行作为关联数组
尝试用admin’ or ‘1’='1登录
登录失败,万能密码在这一关无法使用,但是依然可以爆破。
三、high级别
用同样的方法进行爆破
爆破失败,状态码都是302重定向,即使我们的字典中有正确的用户名和密码也是爆破失败的。why??
代码分析
相关函数:
- var_dump()函数:显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
- stripslashes() 函数:删除由 addslashes() 函数添加的反斜杠。可用于清理从数据库中或者从 HTML 表单中取回的数据。
- addslashes() 函数:返回在预定义字符之前添加反斜杠的字符串。该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串。默认地,PHP 对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。所以不应对已转义过的字符串