热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

bWAPP——A6(SensitiveDataExposure)

这个是bWAPP的第六节,SensitiveDataExposure(暴露敏感数据)1.Base64Encoding(Secret)顾名思义,就是密码

这个是bWAPP的第六节,Sensitive Data Exposure(暴露敏感数据 )

1.Base64 Encoding(Secret)

顾名思义,就是密码被加密了。

Low

很明显,在COOKIE里,有secret这个参数,而且就是很明显的base64编码secret=QW55IGJ1Z3M%2F,%2F是被url编码了的,实际上是/,这里放上url编码表。

backspace8%A41%a61%§%A7Õ%D5
tab9%B42%b62%«%ABÖ%D6
linefeed%0AC43%c63%¬%ACØ%D8
creturn%0DD44%d64%¯%ADÙ%D9
space20%E45%e65%º%B0Ú%DA
!21%F46%f66%±%B1Û%DB
"22%G47%g67%ª%B2Ü%DC
#23%H48%h68%,%B4Ý%DD
$24%I49%i69%µ%B5Þ%DE
%25%J%4Aj%6A»%BBß%DF
&26%K%4Bk%6B¼%BCà%E0
27%L%4Cl%6C½%BDá%E1
(28%M%4Dm%6D¿%BFâ%E2
)29%N%4En%6EÀ%C0ã%E3
*****%2AO%4Fo%6FÁ%C1ä%E4
+%2BP50%p70%Â%C2å%E5
,%2CQ51%q71%Ã%C3æ%E6
-%2DR52%r72%Ä%C4ç%E7
.%2ES53%s73%Å%C5è%E8
/%2FT54%t74%Æ%C6é%E9
030%U55%u75%Ç%C7ê%EA
131%V56%v76%È%C8ë%EB
232%W57%w77%É%C9ì%EC
333%X58%x78%Ê%CAí%ED
434%Y59%y79%Ë%CBî%EE
535%Z%5Az%7AÌ%CCï%EF
636%ð%F0
737%?%3F{%7BÍ%CDñ%F1
838%@40%|%7CÎ%CEò%F2
939%[%5B}%7DÏ%CFó%F3
:%3A/%5C~%7EÐ%D0ô%F4
;%3B]%5D¢%A2Ñ%D1õ%F5
<%3C^%5E£%A3Ò%D2ö%F6
&#61;%3D_%5F¥%A5Ó%D3÷%F7
>%3E&#96;60%|%A6Ô%D4ø%F8
ù%F9

所以secret&#61;QW55IGJ1Z3M/然后base64解密就可以得到密码。

Medium and High

查看源码

很明显从源码就可以看出&#xff0c;当security_level&#61;1或者security_level&#61;2时&#xff0c;secret是被sha1加密&#xff0c;security_level&#61;0就是普通的base64加密。

BEAST/CRIME/BREACH Attacks

The Lighttpd web server is vulnerable to the BEAST, CRIME and BREACH attacks. (bee-box only)

Configure TLS 1.1 or above, disable SSL and HTTP compression!
HINT: test the SSL connection on port 9443 with the O-Saft tool…&#xff08;使用O-Saft工具在端口9443上测试SSL连接…&#xff09;

Clear Text HTTP (Credentials)

明文传输用户凭证 。

Low

登录界面抓包

低级别用的是http&#xff0c;账户密码都是明文传输的。

Medium and High

查看源码

很明显看到中高级就是用https的&#xff0c;是加密传输数据。

Heartbleed Vulnerability

The Nginx web server is using a vulnerable OpenSSL version! ([bee-box]only)

HINT: login on port 8443 and launch the attack script…(登录端口8443并启动攻击脚本…)

Heartbleed Bug是流行的OpenSSL加密软件库中的一个严重漏洞。这种弱点允许在正常情况下通过用于保护Internet的SSL / TLS加密来窃取受保护的信息。SSL / TLS通过Internet为Web&#xff0c;电子邮件&#xff0c;即时消息&#xff08;IM&#xff09;和一些虚拟专用网络&#xff08;VPN&#xff09;等应用程序提供通信安全性和隐私。

Heartbleed错误允许Internet上的任何人读取受OpenSSL软件易受攻击版本保护的系统的内存。这会破坏用于识别服务提供商的密钥&#xff0c;并加密流量&#xff0c;用户的名称和密码以及实际内容。这允许攻击者窃听通信&#xff0c;直接从服务和用户窃取数据并模仿服务和用户。

Host Header Attack (Reset Poisoning)

主机标头攻击

PS:https://www.acunetix.com/blog/articles/automated-detection-of-host-header-attacks/

通常的做法是&#xff0c;同一Web服务器在同一IP地址上托管多个网站或Web应用程序。这就是主机头存在的原因。主机头指定应处理传入HTTP请求的网站或Web应用程序。Web服务器使用此标头的值将请求分派给指定的网站或Web应用程序。托管在同一IP地址上的每个Web应用程序通常称为虚拟主机。什么构成主机头攻击&#xff1f;

如果我们指定无效的主机标头会发生什么&#xff1f;大多数Web服务器都配置为将无法识别的主机头传递给列表中的第一个虚拟主机。因此&#xff0c;可以将具有任意主机头的请求发送到第一个虚拟主机。

传递任意主机头的另一种方法是使用X-Forwarded-Host头。在某些配置中&#xff0c;此标头将重写Host标头的值。因此&#xff0c;可以提出以下请求。

GET / HTTP/1.1
Host: www.example.com
X-Forwarded-Host: www.attacker.com

许多Web应用程序依赖于HTTP 主机头来理解“它们在哪里”。不幸的是&#xff0c;许多应用程序开发人员没有意识到HTTP主机头是由用户控制的。您可能已经知道&#xff0c;在应用程序安全性中&#xff0c;用户输入应始终被视为不安全&#xff0c;因此&#xff0c;如果没有先验证它&#xff0c;就永远不会信任。

主机头的使用在PHP Web应用程序中尤为常见&#xff0c;但是&#xff0c;它肯定不是PHP Web应用程序特有的问题。以下示例中的PHP脚本是主机头的典型且危险的用法。就bWAPP的这个例子而言

可以看到当低级别的时候&#xff0c;$server &#61; $_SERVER["HTTP_HOST"]&#xff0c;这就很危险。主要的头部攻击启用的两个主要攻击媒介是网络缓存中毒&#xff0c;以及滥用其他渠道进行敏感操作&#xff0c;例如密码重置。

网络缓存中毒

Web缓存中毒是攻击者用来操纵Web缓存以向请求页面的任何人提供有毒内容的技术。

为此&#xff0c;攻击者需要毒害由站点本身或下游提供者&#xff0c;内容传递网络&#xff08;CDN&#xff09;&#xff0c;聚合器或客户端与服务器之间的其他缓存机制运行的缓存代理。然后&#xff0c;缓存将向被请求它的任何人提供有毒内容&#xff0c;受害者无法控制向他们提供的恶意内容。

密码重置中毒

实现密码重置功能的常用方法是生成秘密令牌并发送包含此令牌的链接的电子邮件。如果攻击者通过攻击者控制的主机头请求密码重置&#xff0c;会发生什么&#xff1f;

如果Web应用程序在编写重置链接时使用主机头值&#xff0c;则攻击者可能会中毒发送给受害者的密码重置链接。如果受害者点击电子邮件中的中毒重置链接&#xff0c;攻击者将获得密码重置令牌并可以继续并重置受害者的密码。

HTML5 Web Storage (Secret)


WebStorage

WebStorage是HTML新增的本地存储解决方案之一&#xff0c;但并不是为了取代COOKIE而制定的标准&#xff0c;COOKIE作为HTTP协议的一部分用来处理客户端和服务器通信是不可或缺的&#xff0c;session正是依赖于实现的客户端状态保持。WebStorage的意图在于解决本来不应该COOKIE做&#xff0c;却不得不用COOKIE的本地存储。

但是该例中不应该将secret这种重要的信息用WebStorage存储在本地。

POODLE Vulnerability

PS:https://blog.csdn.net/zhaihaifei/article/details/47278041

POODLE漏洞&#xff1a;在Downgraded Legacy Encryption上填充Oracle

SSLv3降级加密协议Padding Oracle攻击&#xff08;POODLE&#xff09;技术分析

漏洞概述&#xff1a;

SSL 3.0的历史非常久远&#xff0c;已经有将近15年了&#xff0c;现今几乎所有的浏览器都支持该协议。今天该协议爆出了一个漏洞&#xff0c;该漏洞由谷歌公司率先发现&#xff0c;下面是此漏洞的大致描述。
  攻击者可利用该漏洞获取安全连接当中某些是SSLv3加密后的明文内容。因为兼容性问题&#xff0c;当浏览器进行HTTPS连接失败的时候&#xff0c;将会尝试使用旧的协议版本&#xff0c;这其中就包括SSL 3.0&#xff0c;于是加密协议由更加安全的协议&#xff08;比如&#xff1a;TLS 1.0&#xff09;降级成SSL 3.0。
  攻击者在此漏洞利用中扮演一种中间人的角色&#xff0c;比如A&#xff0c;C进行通信&#xff0c;B&#xff08;攻击者&#xff09;在中间作为一个代理&#xff0c;B截获A&#xff0c;C之间的通信后经过SSLv3加密后的数据包&#xff0c;利用SSLv3中存在的漏洞&#xff0c;解密得到其数据包的明文信息&#xff0c;而这些明文信息极有可能是用户的隐私数据&#xff0c;比如COOKIE&#xff0c;这样攻击者就可以拿到这些隐私数据&#xff0c;进行更深层次的攻击。
  由此可见此&#xff0c;黑客们可以利用此漏洞。截获用户的隐私数据&#xff0c;进而造成了用户隐私的泄漏&#xff0c;危害较大&#xff0c;应当引起我们的高度重视&#xff0c;而现今唯一解决该问题的方式就是禁用SSLv3加密协议。

构造一个SSLv3的web中间人攻击

​ 如果B服务器上的Javascript可以让A发送大量带COOKIE的请求&#xff0c;例如让A去访问一个社交网站而A本身保存有那个社交网站的COOKIE&#xff08;根据COOKIE机制每次请求肯定会使用同样的COOKIE&#xff09;。通过构造大量SSLv3请求再结合截包替换SSL数据可以做到逐字节还原COOKIE字段&#xff0c;而在这种情况下COOKIE作为敏感信息&#xff0c;地位和用户名&#43;密码是相同的。  下面假设填充粒度为8字节&#xff0c;某社交网站的COOKIE为abcdefgh。

​ 首先Javascript可以让用户A生成一个图中第一行所示的明文web请求包…B服务器拿到使用CBC模式下的SSLv3数据然后将最末尾块替换为左起第四个块的密文然后反复发送这个包直到解密后的Cn[7]碰巧为7&#xff08;因为每次连接key都不同&#xff09;&#xff0c;收到连接成功信息。使用之前介绍的反推公式&#xff08;L为8代入&#xff09;可以反推出COOKIE字段第8字节为’h’。

​ 然后通过填充请求路径字段让A生成一个图中第二行所示的“右移1字节”的请求包…同样方法可以推算出COOKIE字段第7字节’g’。    依此类推直到获取整个COOKIE值”abcdefg”。此时黑客通过中间人攻击已经获得用户COOKIE&#xff0c;用户隐私暴露无遗。

解决方案

​ 目前解决该问题可以禁用SSL3.0&#xff0c;或者SSL3.0中使用的CBC模式加密&#xff0c;但是有可能造成兼容性问题。建议支持TLS_FALLBACK_SCSV&#xff0c;这可以解决重试连接失败的问题&#xff0c;从而防止攻击者强制浏览器使用SSL3.0。 它还可以防止降级到TLS1.2至1.1或1.0&#xff0c;可能有助于防止未来的攻击。

SSL 2.0 Deprecated Protocol

远程服务使用具有已知弱点的旧已弃用协议对流量进行加密。

SSL 2.0是1995年第一个公开发布的SSL版本。此版本的SSL包含许多导致SSL 3.0引入的安全问题。SSL 3.0于1996年发布&#xff0c;完全重新设计了协议。

由于SSL2.0中出现的问题&#xff0c;协议使用起来不安全&#xff0c;应该完全禁用。
由于POODLE&#xff08;Padding Oracle On Downgraded Legacy.Encryption&#xff09;漏洞&#xff0c;SSL 3.0使用起来也不安全&#xff0c;应该被禁用以避免攻击者检索到安全连接的明文。此外&#xff0c;Elliptic Curve Cryptography&#xff08;本文稍后将讨论&#xff09;不能与SSL3.0一起使用。

Internet Explorer 6是唯一仍然使用SSL3.0的浏览器。因此&#xff0c;除非仍然需要支持旧版Internet Explorer 6浏览器&#xff0c;否则应禁用SSL 3.0。

Text Files (Accounts)


查看源码

switch($_COOKIE["security_level"]){case "0" :$line &#61; "&#39;" . $username . "&#39;, &#39;" . $password . "&#39;" . "\r\n";break;case "1" :$username &#61; xss_check_3($username);$password &#61; sha1($password, false);$line &#61; "&#39;" . $username . "&#39;, &#39;" . $password . "&#39;" . "\r\n";break;case "2" :$username &#61; xss_check_3($username);$salt &#61; md5(uniqid());// $password &#61; sha1($salt . $password, false);//$password &#61; hash("sha512", $salt . $password, false);$password &#61; hash("sha256", $salt . $password, false);$line &#61; "&#39;" . $username . "&#39;, &#39;" . $password . "&#39;, &#39;salt:" . $salt . "&#39;" . "\r\n";break;default :$line &#61; "&#39;" . $username . "&#39;, &#39;" . $password . "&#39;" . "\r\n";break;}

可以看得出来&#xff0c;Low级别的账号密码都是明文传输的&#xff0c;这是很不安全的。Medium级别的将密码进行了sha1加密&#xff0c;但是这还不是很安全&#xff0c;因为还是可以通过字典爆破或者暴力破解甚至可以通过查表的方式找出密码。而High级别的用的是hash加盐加密技术。

盐&#xff08;Salt&#xff09;是什么&#xff1f;就是一个随机生成的字符串。我们将盐与原始密码连接&#xff08;concat&#xff09;在一起&#xff08;放在前面或后面都可以&#xff09;&#xff0c;然后将concat后的字符串加密。采用这种方式加密密码&#xff0c;查表法就不灵了&#xff08;因为盐是随机生成的&#xff09;。

但是随便加盐会有很多问题&#xff0c;就是如果采用md5(salt&#43;message)&#xff0c;这种方式会遇到哈希长度扩展攻击

这实际上就是Hmac算法&#xff1a;Keyed-Hashing for Message Authentication。它通过一个标准算法&#xff0c;在计算哈希的过程中&#xff0c;把key混入计算过程中。

和我们自定义的加salt算法不同&#xff0c;Hmac算法针对所有哈希算法都通用&#xff0c;无论是MD5还是SHA-1。采用Hmac替代我们自己的salt算法&#xff0c;可以使程序算法更标准化&#xff0c;也更安全。

Python自带的hmac模块实现了标准的Hmac算法。我们来看看如何使用hmac实现带key的哈希。

>>> import hmac
>>> message &#61; b&#39;Hello, world!&#39;
>>> key &#61; b&#39;secret&#39;
>>> h &#61; hmac.new(key, message, digestmod&#61;&#39;MD5&#39;)
>>> # 如果消息很长&#xff0c;可以多次调用h.update(msg)
>>> h.hexdigest()
&#39;fa4ee7d173f2d97ee79022d1a7355bcf&#39;

如何加盐才是正确的姿势

  1. MD5(MD5(password)&#43;salt)
  2. SHA512(SHA512(password)&#43;salt)
  3. 引入慢哈希: bcrypt(SHA512(password), salt, cost)

推荐阅读
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • centos6.8 下nginx1.10 安装 ... [详细]
  • 1、etcnginxconf.ddefault.conf,添加如下信息:location{try_files$uri$urirouter;rootho ... [详细]
author-avatar
顾玉妙
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有