2023年7月31日发(作者:)
DVWA系列之BruteForce(暴⼒破解)源码分析及漏洞利⽤Brute Force⽬录low级别源码分析判断是否存在登录,条件如下:获取⽤户名、密码(md5加密)、使⽤数据库查询语句进⾏数据库查询、结果判断是否存在判断语句:如果查询结果在数据库中存在,得到⽤户详细信息,显⽰welcome……,否则返回⽤户名和(或)密码错误从源码中发现对$user没有做任何过滤,存在明显的sql注⼊漏洞;⽽$pass设置了md5加密算法,杜绝了通过参数password进⾏sql注⼊的可能性。漏洞利⽤尝试sql⼿⼯注⼊注⼊成功尝试md5解密发现利⽤burpsuite进⾏模糊测试:在登录框输⼊⽤户名:admin,密码123,打开代理,点击login进⾏抓包专业版与社区版区别:专业版可以随意更改线程数爆破线程数不宜过⾼,否则容易出错fuzzing模糊测试添加Payload
单击右上⾓start attack当然除了前端页⾯sql注⼊测试,也可以在抓包中修改参数,进⾏注⼊,并查看返回包的值即可修改如下:查看返回包:接下来通过burpsuite抓包进⾏密码爆破
Ctrl+i
如果有现成的密码本,可以上传密码本进⾏爆破。设置完成后,点击右上⾓start attack 开始爆破从如上爆破结果的length可知password与众不同,可推测为密码,查看分析结果medium级别源码分析与之前low等级源码,明显在判断login参数是否设置中,⽤户名和密码均添加了mysql_escape_string()函数,这个函数会对字符串中的特殊符号(x00,n,r,,’,”,x1a)进⾏转义,基本上能够抵御sql注⼊攻击。说基本上是因为查到说 MySQL5.5.37以下版本如果设置编码为GBK,能够构造编码绕过mysql_real_escape_string 对单引号的转义;同时,$pass做了MD5校验,杜绝了通过参数password进⾏sql注⼊的可能性。但是,依然没有加⼊有效的防爆破机制。具体的mysql_real_escape_string函数绕过问题详见漏洞利⽤此时不能再使⽤sql注⼊,但依旧可以⽤burpsuite进⾏抓包,添加爆破项,选择或上传密码本进⾏爆破即可,⽤low等级密码爆破流程基本⼀致。high级别源码分析与medium级别相⽐,增加了Anti-CSRFtoken和stripslashes()函数。其中,Token,可以抵御CSRF攻击;stripslashes()函数作⽤:去除字符串中的反斜线字符,如果有两个连续的反斜线,则只去掉⼀个。通过抓包,发现登录验证时提交了四个参数:username、password、Login以及user_token。刷新页⾯时,每次服务器返回的登陆页⾯中都会包含⼀个随机的user_token的值,⽤户每次登录时都要将user_token⼀起提交。服务器收到请求后,会优先做token的检查,再进⾏sql查询。查看页⾯源码如下:漏洞利⽤由于加⼊了Anti-CSRFtoken预防⽆脑爆破,不建议使⽤Burpsuite进⾏抓包爆破。可编写Python脚本进⾏密码爆破,⽤户名为admin。#coding=utf-8import reimport urllib2from bs4 import BeautifulSoupheader{'Host':'192.128.109.129','User-Agent':'抓包获取','Cookie':'security=high;PHPSESSID=粘过来'}url1='192.128.109.129/dvwa/vulnerabilities/brute/'def get_token(url): req=urllib2,Request(url,headers=header) responce=n(req) this_page=() soup=BeautifulSoup(this_page,"") r1=e(r'(?<=user_token"),*?value="([^"]+)') a=l(r1,str(soup)) print user_token return user_tokeni=0for line in open(''): user_token1=get_token(url1) url2='192.128.109.136/dvwa/vulnerabilities/brute/?username=admin&password='+()+'&Login=Login&user_token'&user_token1 print url2 i=i+1 req1=t(url2,headers=header) print i,'admin',() responce1=n(req1) this_page=() soup1=BeautifulSoup(this_page1,"") r2=e(r'protected') a1=l(r2,str(soup1)) if(str(a1)=="['protected']"): breakget_token的功能是通过python的BeautifulSoup库从html页⾯中抓取user_token的值运⾏代码,通过对⽐结果看到,密码为password时返回的长度不太⼀样,爆破成功!impossible级别源码分析相较于high级别,增加了最多登录失败次数,失败后的帐户锁定时间(单位:分钟),以及PDO(PHP Data Object)机制。当检测到频繁的错误登录后,系统会将账户锁定,爆破也就⽆法继续,安全级别进⼀步提⾼;同时,不能使⽤PDO扩展本⾝执⾏任何数据库操作,这就意味着⽆法通过破坏sql语句结构执⾏恶意的sql命令,即直接防⽌了sql注⼊的可能。
2023年7月31日发(作者:)
DVWA系列之BruteForce(暴⼒破解)源码分析及漏洞利⽤Brute Force⽬录low级别源码分析判断是否存在登录,条件如下:获取⽤户名、密码(md5加密)、使⽤数据库查询语句进⾏数据库查询、结果判断是否存在判断语句:如果查询结果在数据库中存在,得到⽤户详细信息,显⽰welcome……,否则返回⽤户名和(或)密码错误从源码中发现对$user没有做任何过滤,存在明显的sql注⼊漏洞;⽽$pass设置了md5加密算法,杜绝了通过参数password进⾏sql注⼊的可能性。漏洞利⽤尝试sql⼿⼯注⼊注⼊成功尝试md5解密发现利⽤burpsuite进⾏模糊测试:在登录框输⼊⽤户名:admin,密码123,打开代理,点击login进⾏抓包专业版与社区版区别:专业版可以随意更改线程数爆破线程数不宜过⾼,否则容易出错fuzzing模糊测试添加Payload
单击右上⾓start attack当然除了前端页⾯sql注⼊测试,也可以在抓包中修改参数,进⾏注⼊,并查看返回包的值即可修改如下:查看返回包:接下来通过burpsuite抓包进⾏密码爆破
Ctrl+i
如果有现成的密码本,可以上传密码本进⾏爆破。设置完成后,点击右上⾓start attack 开始爆破从如上爆破结果的length可知password与众不同,可推测为密码,查看分析结果medium级别源码分析与之前low等级源码,明显在判断login参数是否设置中,⽤户名和密码均添加了mysql_escape_string()函数,这个函数会对字符串中的特殊符号(x00,n,r,,’,”,x1a)进⾏转义,基本上能够抵御sql注⼊攻击。说基本上是因为查到说 MySQL5.5.37以下版本如果设置编码为GBK,能够构造编码绕过mysql_real_escape_string 对单引号的转义;同时,$pass做了MD5校验,杜绝了通过参数password进⾏sql注⼊的可能性。但是,依然没有加⼊有效的防爆破机制。具体的mysql_real_escape_string函数绕过问题详见漏洞利⽤此时不能再使⽤sql注⼊,但依旧可以⽤burpsuite进⾏抓包,添加爆破项,选择或上传密码本进⾏爆破即可,⽤low等级密码爆破流程基本⼀致。high级别源码分析与medium级别相⽐,增加了Anti-CSRFtoken和stripslashes()函数。其中,Token,可以抵御CSRF攻击;stripslashes()函数作⽤:去除字符串中的反斜线字符,如果有两个连续的反斜线,则只去掉⼀个。通过抓包,发现登录验证时提交了四个参数:username、password、Login以及user_token。刷新页⾯时,每次服务器返回的登陆页⾯中都会包含⼀个随机的user_token的值,⽤户每次登录时都要将user_token⼀起提交。服务器收到请求后,会优先做token的检查,再进⾏sql查询。查看页⾯源码如下:漏洞利⽤由于加⼊了Anti-CSRFtoken预防⽆脑爆破,不建议使⽤Burpsuite进⾏抓包爆破。可编写Python脚本进⾏密码爆破,⽤户名为admin。#coding=utf-8import reimport urllib2from bs4 import BeautifulSoupheader{'Host':'192.128.109.129','User-Agent':'抓包获取','Cookie':'security=high;PHPSESSID=粘过来'}url1='192.128.109.129/dvwa/vulnerabilities/brute/'def get_token(url): req=urllib2,Request(url,headers=header) responce=n(req) this_page=() soup=BeautifulSoup(this_page,"") r1=e(r'(?<=user_token"),*?value="([^"]+)') a=l(r1,str(soup)) print user_token return user_tokeni=0for line in open(''): user_token1=get_token(url1) url2='192.128.109.136/dvwa/vulnerabilities/brute/?username=admin&password='+()+'&Login=Login&user_token'&user_token1 print url2 i=i+1 req1=t(url2,headers=header) print i,'admin',() responce1=n(req1) this_page=() soup1=BeautifulSoup(this_page1,"") r2=e(r'protected') a1=l(r2,str(soup1)) if(str(a1)=="['protected']"): breakget_token的功能是通过python的BeautifulSoup库从html页⾯中抓取user_token的值运⾏代码,通过对⽐结果看到,密码为password时返回的长度不太⼀样,爆破成功!impossible级别源码分析相较于high级别,增加了最多登录失败次数,失败后的帐户锁定时间(单位:分钟),以及PDO(PHP Data Object)机制。当检测到频繁的错误登录后,系统会将账户锁定,爆破也就⽆法继续,安全级别进⼀步提⾼;同时,不能使⽤PDO扩展本⾝执⾏任何数据库操作,这就意味着⽆法通过破坏sql语句结构执⾏恶意的sql命令,即直接防⽌了sql注⼊的可能。
发布评论