植入木马,SSL剥离,会话劫持,钓鱼网站等获取密码的方法称之为密码窃取,这些方法的共同特点是在用户输入时或密码传输过程中对明文密码进行截获。本文将要介绍的密码攻击是指从网站服务器上破解用户密码的方法,网站数据库保存的用户密码都是经过哈希加密的,不可能被反向破译,因此密码攻击的难度要比密码窃取难度大得多。看到这里相信很多读者会有疑问:既然如此,密码攻击还有什么意义呢?别着急,请往下看。
密码窃取与密码攻击
密码窃取虽然简单高效,但适用性差。植入木马、钓鱼网站在那些安全观念淡薄、防范意识较差的用户计算机上才能发挥作用,而SSL剥离、会话劫持等方式需要黑客与被攻击者处于同一个无线局域网内。打个不太恰当的比方,密码窃取就像是拿着鱼竿在海边等鱼上钩,而密码攻击就像是乘坐渔船出海打鱼,前者收成好的时候也能钓个十条八条,而后者虽然困难一些,但能让你满载而归。
密码加密的基本原理
为了保证用户密码的安全性,任何网站都不会直接存储明文密码,而是通过哈希加密算法将密码转换为固定长度的字符串,网站数据库保存的密码是一长串没有任何意义的哈希字符。当用户登录时,后台将用户提交的明文密码经过加密算法的计算,并将计算结果与数据库中保存的哈希串进行比对,比对结果一致则向前台返回登录成功的信息。加密算法的过程是不可逆的,因此即使知道密码的加密方式和算法的实现过程,也不可能通过哈希串反向破译出密码。
密码攻击的基本原理
“破解”哈希密码的工具,但是其根本原理只有两个字:“猜”和“试”。所谓“猜”就是通过穷举的方式将可能的密码组合依次存入文本文件(字典),而“试”就是将字典中的每个可能的密码传入加密函数计算,然后将计算结果与哈希密码进行比对,结果一致就意味着密码被成功破解。构建字典是密码攻击的关键,完备合理的字典能大大提高攻击效率和破解成功率,网上有大量的字典可以下载(超过100G),当然也可以根据需要构建自己的字典。
密码攻击的两种方式
在线攻击:在线攻击就是在网站的用户验证的环节试探用户的用户名和密码(如下图),在线密码攻击指的当然不是在登录页面里手动输入所有可能的用户名和密码,而是通过代码实现自动试探。攻击之前获取网站的基本信息非常有必要,包括:网站协议(http,https,ftp,pop3,...)、完整的登录url(一般不可见)、登录失败信息(“Login failed”,“请检查用户名、密码”等等)。
掌握了这些信息之后,下面的攻击就简单多了。比如要攻击用户“Admin”的密码:使用程序(代码)循环模拟用户登录行为,从字典中依次选取密码,组装后向网站发送登录请求(request),接收网站的反馈信息(response)并加以分析,如果没有返回登陆失败信息,说明攻击成功。现在很多网站通过验证码、滑块拼图、限制失败登录次数等方式,这些措施虽然提高了安全性,但无法彻底杜绝在线攻击。
离线攻击:离线攻击是将获取的哈希密码保存到本地,利用自己的计算机对密码进行离线破解(如何获取哈希密码不在本文讨论范围)。在线攻击是将明文密码发送到网站进行试探,因此我们不用关心网站究竟采用的哪种加密算法。离线攻击必须要先判断密码的加密方式,这个过程有一定难度,可以通过现有工具实现,有时需要靠经验、统计、测试来判断,有时也需要直觉和运气。判断加密方式之后,剩下的就是将字典中的密码依次加密、比对的过程。
总结
回顾总结以上两种密码攻击方式,每个步骤都可以自己编程实现,当然也可以利用现有的软件。如在线攻击中,获取网站基本信息可以用BurpSuite,表单密码破解可以用hydra,离线攻击可以用John the Ripper、hashcat等工具。我不会在文章里介绍这些黑客工具的用法,只会通过分析原理帮助大家寻找解决问题的思路。迷恋黑客工具只会让人沦为“脚本小子”,掌握原理并自己动手解决问题才是黑客的核心技术,希望大家理解我的良苦用心。密码攻击原理虽然不复杂,但是实现起来需要大量的知识储备,关于密码攻击的知识路线图,我会在后续的文章中为大家梳理,请持续关注。
领取专属 10元无门槛券
私享最新 技术干货