暴力破解漏洞复现

owasp dvwa brute force漏洞复现(暴力破解)

首先看代码:
在这里插入图片描述
isset
isset — 检测变量是否已设置并且非 null
说明:
isset(mixed $var, mixed $… = ?): bool
检测变量是否设置,并且不是 null。
如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。
若使用 isset() 测试一个被设置成 null 的变量,将返回 false。
同时要注意的是 null 字符(“\0”)并不等同于 PHP 的 null 常量。
如果一次传入多个参数,那么 isset() 只有在全部参数都以被设置
时返回 true 计算过程从左至右,中途遇到没有设置的变量时就会立
即停止。
参数:
var 要检查的变量。
返回值:
如果 var 存在并且值不是 null 则返回 true,否则返回 false。
mysql_result()
定义和用法:
mysql_result() 函数返回结果集中一个字段的值。
如果成功,则该函数返回字段值。如果失败,则返回 false。
语法:
mysql_result(data,row,field)
在这里插入图片描述
说明:
当作用于很大的结果集时,应该考虑使用能够取得整行的函数。这些
函数在一次函数调用中返回了多个单元的内容,比 mysql_result()
快得多。
此外请注意,在字段参数中指定数字偏移量比指定字段名或者
tablename.fieldname 要快得多。
定义和用法
mysql_num_rows() 函数返回结果集中行的数目。
语法
mysql_num_rows(data)
在这里插入图片描述
说明
mysql_num_rows() 返回结果集中行的数目。此命令仅对 SELECT 语
句有效。要取得被 INSERT,UPDATE 或者 DELETE 查询所影响到的行
的数目,用 mysql_affected_rows()。
提示和注释
注释:如果使用 mysql_unbuffered_query(),则直到结果集中的所
有行都被提取后 mysql_num_rows() 才能返回正确的值。
(开始复现)
打开环境,配置代理(准备爆破
在这里插入图片描述
添加用户,我们随便输一个密码,然后准备抓包(当然再这里你也可
以爆破用户名)
在这里插入图片描述
(BP 抓到包了)
在这里插入图片描述
我们发送给测试器(准备爆破):
在这里插入图片描述
攻击类型继续选择 Sniper 就行
添加密码本:
在这里插入图片描述
这里长度跟其他的不一样的就是密码(admin)在这里插入图片描述
登录密码:
(显示登录成功)
在这里插入图片描述
Medium Brute Force Source
首先我们继续来看代码:在这里插入图片描述
mysql_real_escape_string() 函数
定义和用法
mysql_real_escape_string() 函数转义 SQL 语句中使用的
字符串中的特殊字符。
下列字符受影响:
• \x00
• \n
• \r

• ’
• "
• \x1a
如果成功,则该函数返回被转义的字符串。如果失败,则返回
false。
语法
mysql_real_escape_string(string,connection)
在这里插入图片描述
说明
本函数将 string 中的特殊字符转义,并考虑到连接的当前字符
集,因此可以安全用于 mysql_query()。
提示和注释
提示:可使用本函数来预防数据库攻击。
注:mysql_real_escape_string 这个函数有一个注入绕过的知识,
这里就先不说了,等到 SQL 注入的时候再细说
mysql_query() 函数
定义和用法
mysql_query() 函数执行一条 MySQL 查询。
语法
mysql_query(query,connection)在这里插入图片描述
说明
如果没有打开的连接,本函数会尝试无参数调用 mysql_connect()
函数来建立一个连接并使用之。
返回值
mysql_query() 仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE 语句
返回一个资源标识符,如果查询执行不正确则返回 FALSE。
对于其它类型的 SQL 语句,mysql_query() 在执行成功时返回 TRUE,
出错时返回 FALSE。
非 FALSE 的返回值意味着查询是合法的并能够被服务器执行。这
并不说明任何有关影响到的或返回的行数。很有可能一条查询执行成
功了但并未影响到或并未返回任何行。
提示和注释
注释:该函数自动对记录集进行读取和缓存。如需运行非缓存查
询,请使用 mysql_unbuffered_query()。
mysql_error() 函数
mysql_error() 函数返回上一个 MySQL 操作产生的文本错误信
息。
本函数返回上一个 MySQL 函数的错误文本,如果没有出错则返回
‘’(空字符串)。
语法

在这里插入图片描述
mysql_error(connection
mysql_num_rows() 函数
定义和用法
mysql_num_rows() 函数返回结果集中行的数目。
语法
mysql_num_rows(data)
在这里插入图片描述
说明
mysql_num_rows() 返回结果集中行的数目。此命令仅对 SELECT
语句有效。要取得被 INSERT,UPDATE 或者 DELETE 查询所影响到的
行的数目,用 mysql_affected_rows()。
提示和注释
注释:如果使用 mysql_unbuffered_query(),则直到结果集中的
所有行都被提取后 mysql_num_rows() 才能返回正确的值
与 low 级别相比较,只是增加了回显的时间,所以还是可以使用 low
级别的方法直接爆破,不过花费的时间相对会长一点。
(开始复现)
首先我们打开页面,然后随便输入一个密码然后开始 BP 抓包
在这里插入图片描述
这里我们发送给测试器添加密码:在这里插入图片描述
然后我们添加一个简单的字典就准备攻击:在这里插入图片描述
在这里插入图片描述
等待爆破结束,查看结果:
返回页面输入密码:admin
在这里插入图片描述
爆破成功!
High Brute Force Source
老规矩首先我们还是来看代码:
在这里插入图片描述
stripslashes() 函数
定义和用法
stripslashes() 函数删除由 addslashes() 函数添加的反斜杠。
提示:该函数可用于清理从数据库中或者从 HTML 表单中取回的数
据。
语法
在这里插入图片描述
stripslashes(string)
实例
删除反斜杠:

<?php echo stripslashes("Who\'s Bill Gates?"); ?>

mysql_close() 函数
定义和用法
mysql_close() 函数关闭非持久的 MySQL 连接。
语法
mysql_close(link_identifier)
在这里插入图片描述
说明
本函数关闭指定的连接标识所关联的到 MySQL 服务器的非持久连接。如果没有指定 link_identifier,则关闭上一个打开的连接。返回值
如果成功则返回 true,失败则返回 false。
提示和注释
提示:通常不需要使用 mysql_close(),因为已打开的非持久连接会在脚本执行完毕后自动关闭。
注释:mysql_close() 不会关闭由 mysql_pconnect() 建立的持久连接。审计代码后可以发现使用了随机 token 机制来防止 CSRF,从而在一定程度上防止了重放攻击,增加了爆破难度,但是任然可以使用 bp的爆破模块
注:什么是 token
token 的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。当用户第一次登录后,服务器生成一个 token 并将此 token 返回给客户端,以后客户端只需带上这个 token 前来请求数据即可,无需再次带上用户名和密码。简单 token 的组成;uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token 的前几位以哈希算法压缩成的一定长度的十六进制字符串。为防止 token 泄露)。身份认证概述
由于 HTTP 是一种没有状态的协议,它并不知道是谁访问了我们的应用。这里把用户看成是客户端,客户端使用用户名还有密码通过了身份验证,不过下次这个客户端再发送请求时候,还得再验证一下。
通用的解决方法就是,当用户请求登录的时候,如果没有问题,在服务端生成一条记录,在这个记录里可以说明登录的用户是谁,然
后把这条记录的 id 发送给客户端,客户端收到以后把这个 id 存储在cookie 里,下次该用户再次向服务端发送请求的时候,可以带上这个cookie,这样服务端会验证一下 cookie 里的信息,看能不能在服务端这里找到对应的记录,如果可以,说明用户已经通过了身份验证,就把用户请求的数据返回给客户端。以上所描述的过程就是利用 session,那个 id 值就是
sessionid。我们需要在服务端存储为用户生成的 session,这些session 会存储在内存,磁盘,或者数据库。基于 token 机制的身份认证 使用 token 机制的身份验证方法,在服务器端不需要存储用户
的登录记录。大概的流程:
客户端使用用户名和密码请求登录。服务端收到请求,验证用户名和密码。验证成功后,服务端会生成一个 token,然后把这
个 token 发送给客户端。客户端收到 token 后把它存储起来,可以放在 cookie 或者 Local Storage(本地存储)里。客户端每次向服务端
发送请求的时候都需要带上服务端发给的 token。服务端收到请求,然后去验证客户端请求里面带着 token,如果验证成功,就向客户端
返回请求的数据。
CSRF 概念:
CSRF 跨站点请求伪造(Cross—Site Request Forgery),跟 XSS攻击一样,存在巨大的危害性,你可以这样来理解:攻击者盗用了你
的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送
邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。如下:其中 Web A 为存在 CSRF 漏洞的网站,Web B 为攻击者构建的恶意网站,User C 为 Web A 网站的合法用户。
CSRF 攻击攻击原理及过程如下:

  1. 用户 C 打开浏览器,访问受信任网站 A,输入用户名和密码请求登录网站 A;
    2.在用户信息通过验证后,网站 A 产生 Cookie 信息并返回给浏览器,此时用户登录网站 A 成功,可以正常发送请求到网站 A;
    3.用户未退出网站 A 之前,在同一浏览器中,打开一个 TAB 页访问网站 B;
    4.网站 B 接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点 A;
    5.浏览器在接收到这些攻击性代码后,根据网站 B 的请求,在用户不知情的情况下携带 Cookie 信息,向网站 A 发出请求。网站 A 并不知道该请求其实是由 B 发起的,所以会根据用户 C 的 Cookie 信息以 C 的权限处理该请求,导致来自网站 B 的恶意代码被执行。 复现步骤跟前面的一样,我就不再做多余的重复,密码爆破出来还是admin最后附上 kali 爆破神器 hydra 的用法:(温馨提示:不一定有用,望酌情使用)
    参数说明
    hydra -h:在这里插入图片描述
    hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]]
    [-e ns]
    [-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-f] [-
    s PORT] [-S] [-vV] server service [OPT]
    -R 继续从上一次进度接着破解。
    -S 采用 SSL 链接。
    -s PORT 可通过这个参数指定非默认端口。
    -l LOGIN 指定破解的用户,对特定用户破解。
    -L FILE 指定用户名字典。
    -p PASS 小写,指定密码破解,少用,一般是采用密码字典。
    -P FILE 大写,指定密码字典。
    -e ns 可选选项,n:空密码试探,s:使用指定用户和密码试探。
    -C FILE 使用冒号分割格式,例如“登录名:密码”来代替-L/-P 参
    数。
    -M FILE 指定目标列表文件一行一条。
    -o FILE 指定结果输出文件。
    -f 在使用-M 参数以后,找到第一对登录名或者密码的时候中止破解。
    -t TASKS 同时运行的线程数,默认为 16
    -w TIME 设置最大超时的时间,单位秒,默认是 30s。
    -v / -V 显示详细过程。
    server 目标 ip
    service 指定服务名,支持的服务和协议:telnet ftp pop3[-ntlm]
    imap[-ntlm] smb smbnt
    http-{head|get} http-{get|post}-form http-proxy cisco ciscoenable vnc
    ldap2 ldap3 mssql mysql oracle-listener postgres nntp socks5
    rexec
    rlogin pcnfs snmp rsh cvs svn icq sapr3 ssh smtp-auth[-ntlm]
    pcanywhere
    teamspeak sip vmauthd firebird ncp afp 等等。
    OPT 可选项
    1、破解 ssh:
    hydra -l 用户名 -p 密码字典 -t 线程 -vV -e ns ip ssh
    hydra -l 用户名 -p 密码字典 -t 线程 -o save.log -vV ip ssh
    2、破解 ftp:
    hydra ip ftp -l 用户名 -P 密码字典 -t 线程(默认 16) -vV
    hydra ip ftp -l 用户名 -P 密码字典 -e ns -vV
    3、get 方式提交,破解 web 登录:
    hydra -l 用户名 -p 密码字典 -t 线程 -vV -e ns ip http-get
    /admin/
    hydra -l 用户名 -p 密码字典 -t 线程 -vV -e ns -f ip httpget /admin/index.php
    4、post 方式提交,破解 web 登录:
    hydra -l 用户名 -P 密 码字典 -s 80 ip http-post-form
    “/admin/login.php:username=USER&password=PASS&submit=lo
    gin:sorry password”
    hydra -t 3 -l admin -P pass.txt -o out.txt -f 192.168.176.131
    http-post-form
    “login.php:id=USER&passwd=PASS:wrong username or<br/> password
    (参数说明:-t 同时线程数 3,-l 用户名是 admin,字典 pass.txt,
    保存为 out.txt,-f 当破解了一个密码就停止, 192.168.176.131
    目标 ip,http-post-form 表示破解是采用 http 的 post 方式提交的
    表单密码破解,中 的内容是表示错误猜解的返回信息提示。)<br/> 5、破解 https:<br/> hydra -m /index.php -l muts -P pass.txt 192.168.176.131 https<br/> 6、破解 teamspeak:<br/> hydra -l 用户名 -P 密码字典 -s 端口号 -vV ip teamspeak<br/> 7、破解 cisco:<br/> hydra -P pass.txt 192.168.176.131 cisco<br/> hydra -m cloud -P pass.txt 192.168.176.131 cisco-enable<br/> 8、破解 smb:<br/> hydra -l administrator -P pass.txt 192.168.176.131 smb<br/> 9、破解 pop3:<br/> hydra -l muts -P pass.txt my.pop3.mail pop3<br/> 10、破解 rdp:<br/> hydra ip rdp -l administrator -P pass.txt -V<br/> 11、破解 http-proxy:<br/> hydra -l admin -P pass.txt http-proxy://192.168.176.131<br/> 12、破解 imap:<br/> hydra -L user.txt -p secret 192.168.176.131 imap PLAIN<br/> hydra -C defaults.txt -6 imap://[fe80::2c:31ff:fe12:ac11]:143/PLAIN
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值