目录
定场诗
水纹珍簟思悠悠,千里佳期一夕休。
从此无心爱良夜,任他明月下西楼。
引言
善守者,藏于九地之下;善攻者,动于九天之上。
Brute Force,暴力破解,最原始的密码破解方式。由于对登录没有做任何限制,在不计时间成本的前提下进行穷举攻击一定能撞出正确密码!
0x1 环境介绍
服务器端:win7 ;phpstudy +DVWA;192.168.1.254
攻击端:kali;192.168.1.2
0x2 Low级别:小试牛刀
用BP抓个包试试水,账号admin,密码123。
发送到Intruder。
Target设置一下,因为是http协议的,所以用80端口就可以。
单爆破密码,用Sniper就行,把密码标记一下。
填字典,其他默认不动,开始攻击。
发现有个长度不一样的包,用password手工测试,成功登入。
看一下源码,发现可以进行sql注入,用or或者直接阻断后面的AND。
尝试一下在用户名输入admin' OR '1'='1 登录成功。
因为AND的优先级高于OR,先判断AND,无论AND判断后的结果是什么,都会判断OR。
尝试直接用#注释掉后面的判断。输入admin'# ,成功登录。
0x3 Medium级别:聊胜于无
使用Low级别中同样的方法,用BP进行爆破,发现仍然有用,但是爆破的速度明显感觉慢了很多。
那么直接来看看源码到底哪里有什么不一样。发现增加了转译防止SQL注入,而登陆失败后的sleep函数使得每次登陆之间的时间增加,这就是为什么爆破速度明显变慢。
0x4 High级别:不过如此
看一下high的源码。加入了token,进行了过滤和转译防止sql注入,登录失败后等待时间变成了随机。
使用BP抓包,发现登录验证增加了token,那么爆破的思路就是用pitchfork模式爆破password的同时增加一个token参数。
依旧是发送到Intruder,标记password和token,攻击方式改为Pitchfork。
在Options页中,在Grep-Extract中添加参数
在Start after expression后输入value=',点击Fetch response,获得返回信息。
选中token值,点击ok,记录下此时的token值:4d1cfc3d052e3f9ce64b2e34ac418e69。
在资源池中将最大线程改为1,因为pitchfork不支持多线程。
在payloads中,给第一个payload配置密码本
在第二个payload中配置token,选择Recursive grep模式,将刚才记录的token复制到初始值中。
开始爆破, 发现长度不同的返回包,尝试password,成功登录。
0x5 Impossible级别:典范之作
看一下Impossible网页源码,与High相比,增加了登陆失败锁定功能,登录3次失败后会被锁定登录,并且使用了PDO来防御SQL注入,是安全网站的典范之作。