注:以下漏洞示例已由相关厂商修复,切勿非法测试!

0x01 漏洞挖掘

01  注册

注册中最常见的有两个,一个是恶意注册,另一个是账户遍历。一个好的注册界面应该是这样

或者这样的

而不是这样的

要么使用短信或邮箱进行验证,要么存在难以识别的验证码,使得注册的请求无法批量提交。那么账户遍历是什么意思呢?在注册的时候Web程序往往会有用户名或手机号(或其他什么)检测之类的步骤,以避免相同账号注册两次,比如一般会提示“***用户名已存在!”。我们就可以利用这个步骤去批量尝试一些用户名,如果提示已存在就说明存在这个用户,然后就可以用这个用户名进行下一步操作,比如登录爆破(直接爆破的话可能会提示“用户名或密码错误”,用已知用户名爆破就只需要关心密码问题了)和密码找回。

02  登录

登录里比较简单的一种的情况就是登录界面不存在验证码可以直接爆破,第二种就是存在验证码但可被绕过,第三种是第三方账户登录可被绕过,这里重点说第二和第三种的问题。

1、短信验证码

这种情况一般指4位数字验证码,且不限制错误次数。比如以某APP为例,短信登录界面如下

获取验证码后随意填写,抓包

然后在intruder里爆破

再用获得的验证码登录即可。

2、图形验证码

以ESPCMS V6的一个漏洞为例,在会员和后台登陆的地方对验证码识别的方式是可以绕过的,在文件/upload/interface/member.php 500行左右的位置是后台登陆检验验证码的地方:

看一下他检测验证码的方式,将输入的验证码与cookie中的值比较,这意味着什么?只要我们不改变cookie中的值以及输入的验证码的值,那么就可以绕过验证码识别。也就是说验证码是和cookie绑定的,如图所示只要刷新一下改变验证码下面的这条cookie就跟着变化。只要不改变这两个值就能使用一个验证码持续登陆,这样就能爆破了。

如果爆破的话还要解决另外一个问题,每个登陆界面只能请求一次,因为还有一个隐藏的token参数

这样的话就要每尝试一次动态获取这个token值,其中token中的值是和返回的PHPSESSID绑定的,所以这里同步获取PHPSESSID和token然后进行爆破。例如在burp中只需要更新post数据中tokenkey的值即可再次发包,但是并不会触发验证码错误。

漏洞利用程序如下:

爆破测试

 

3、第三方账户登录绕过

现在很多网站或APP都支持第三方账号登录,比如微信、微博,这些登录本身接口一般没什么问题,但是在使用的时候可能会出现逻辑错误,以知乎曾经爆出的一个漏洞为例,打开知乎客户端,用一个微博小号登录,拦截微博授权成功的请求地址:https://api.weibo.com/oauth2/sso_authorize?sflag=1,修改Response Body,将uid改成要登录的uid:

然后即可登录

知乎服务器端在拿到客户端提交的授权成功以后,还应该调用第3方平台的token校验,以微博为例子,应该再调用一次:https://api.weibo.com/2/account/get_uid.json,看拿到的uid是否和客户端提交的uid一致。另外登录位置也存在账号遍历的情况,比如有的登录逻辑是先判断是否存在这个用户名然后给予提示“用户名不存在”或不提示。

02  密码找回

密码找回的利用姿势比较多,还是先说验证码的问题。除了上节所说的4位验证码的可爆破的问题,还有验证码泄露、认证绕过、越权等问题。

1、验证码泄露

仍然以某APP为例

输入验证码、要找回的账号和手机号,点击“获取验证码”,同时拦截抓包,然后就可以在返回包中看到要认证的验证码,这样不用得到用户的手机,也能得到他的验证码

再输入密码即可找回。

2、验证码的认证绕过

以某网站为例,在密码找回界面,输入用户名和密码,点击获取验证码

验证码随便输,然后点击下一步,拦截返回包,

将status改为0,然后就可以进入密码修改界面

另外也存在替换手机号的情况,及将验证码发送到你替换的手机上,而找回的密码还是原来的账号。

 

2、邮箱弱token

有时候密码找回是通过邮箱链接来实现的,链接里一般会有一个与账号绑定的具有唯一性的认证参数,若这个参数能够被猜解就会产生问题,以一个奇虎360出现过的一个漏洞为例,先正常流程取回一次密码,查看邮箱,邮件内容类似:

猜测一下此处的流程,用户取回密码时,产生一个精确的时间戳,与帐号绑定,记录在某个密码重置库内,那么修改这个用户密码必须得知道这个时间戳才可以,看似合理,但程序员忽略了一个细节,就是假如这个时间戳是新生成得,在一定时间段内进行暴力猜解,很快就可以获取到这个有效得链接!以某账号为例,输入其邮箱找回密码,然后同时爆破找回密码的链接,点击访问

用修改的密码即可登录

4、越权修改

越权修改是指在密码找回的过程中将正在找回密码的账号替换为指定的账号并修改密码,以某邮箱系统的一个漏洞为例,使用手机找回的方法来验证

设置密码

提交的时候抓包,将userName改为想要修改的账户

在下一次的请求中再修改一次

然后使用修改的密码即可登录

03  越权

越权一般包括水平越权和垂直越权。

1、水平越权

水平越权:就是相同级别(权限)的用户或者同一角色不同的用户之间,可以越权访问、修改或者删除的非法操作。如果出现次漏洞,那么将可能会造成大批量数据泄露,严重的甚至会造成用户信息被恶意篡改。以某APP为例,在点击账户信息按钮时会返回当前账户的基本信息,如下是请求的数据包

返回的包为

如果直接修改Id,改为0001001238,那么注意看返回包

这里就是没有任何的身份认证,仅根据Id返回相应的数据,导致可以水平越权,查看他人的账户信息。再看另一个例子,以某网站为例,登录进入个人主页界面

在Firefox中修改uid的值即可进入他人账号

2、垂直越权

垂直越权:是不同级别之间或不同角色之间的越权;垂直越权又别分为向上越权与向下越权。比如,某些网站,像发布文章、删除文章等操作属于管理员该做的事情。假设一个匿名用户也可以做相同的事情,这就叫做向上越权;向下越权是一个高级用户可以访问低级用户信息(这也是不行的,这回暴漏用户的隐私)。以ZDSoft网站生成系统越权漏洞为例,比较老的一个洞,网站后台登录地址一般为:http://www.***.cn/admin/login.aspx

后台菜单地址为:

http://www.***.cn/admin/left.aspx

如果没有登录直接访问菜单地址js跳转到登录地址,但是禁用了浏览器js后就可以直接访问而不会跳转,比如访问用户管理界面

再以某APP为例,APP有两种登录模式,用户(指定人员)登录和游客登录。对于游客来说很多功能不能访问,只能看到如下功能

指定用户登录,可以使用所有功能

但是APP只是做了前端限制,以游客权限直接发送用户权限的数据包即可使用相关的功能,比如以游客的登录凭据访问用户才可使用的“**查询”功能。

3、两种越权的区别

水平越权的问题出现在同一个角色上,系统只验证了能访问数据的角色,而没有对角色内的用户做细分,也没有对数据的子集做细分,因为缺乏一个用户到数据之间的对应关系。由于水平权限管理是系统缺乏一个数据级的访问控制所造成的,因此水平权限管理又可称之为“基于数据的访问控制”;垂直权限问题出现在不同角色上,一般来说高权限角色可以访问低权限角色的资源,而低权限角色访问高权限角色的资源则被禁止。如果一个本属于低权限角色的用户通过一些方法能够过得低权限角色的能力,则发生了垂直越权漏洞。

04  交易

这里的情况一般就是订单可被恶意修改,比如修改购买数量和单价以形成超低价的总额,以中国移动出现过的一个漏洞为例,中国移动和健康体检通,可通过修改订单价格实现免费体检,首先选择套餐

然后抓包修改数据

然后即可支付

另外一个套餐

付款成功

可以看到套餐已订购

0x02  防御

01  验证码策略

1、验证码至少是6位数字,且有时间限制、获取次数限制和错误次数限制。

2、验证码的验证要放到服务端执行,不能将验证码返回到前端。

3、若只能放到前端,必须采取加密策略。

4、多步校验,比如找回密码第一步验证了,最后一步提交时也要验证。

02  权限策略

1、登录凭证要时刻验证,不能只在登录接口处进行登录验证,要任何需要登录权限的地方进行登录验证(cookie,ssid,token等)。

2、用户操作要进行对应的权限检查,不能只根据操作参数或链接执行功能。

3、Cookie要进行严格加密,并与用户session绑定。

4、采用“最小权限原则”进行访问控制。

03  密匙签名策略

1、邮箱找回密码的功能,其认证参数要唯一且不可预测,尽量减少不必要的参数。

2、支付功能一定要使用严格的签名算法,避免任何参数的修改。

Web渗透测试中常见逻辑漏洞解析与实战相关推荐

  1. 渗透测试中常见的一些名词解释

    1.POC POC,Proof ofConcept,中文意思是"观点证明".这个短语会在漏洞报告中使用,漏洞报告中的POC则是一段说明或者一个攻击的样例,使得读者能够确认这个漏洞是 ...

  2. cURL在Web渗透测试中的应用

    1.概述 cURL是一个命令行下用于传输数据的工具,支持多种协议 cURL有如下特性: 1.支持多种协议,包括:DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, ...

  3. web渗透测试----15、SSRF漏洞(服务端请求伪造漏洞)

    SSRF漏洞是一种在未能获取服务器权限时,利用服务器漏洞,由攻击者构造请求,服务器端发起请求的安全漏洞,攻击者可以利用该漏洞诱使服务器端应用程序向攻击者选择的任意域发出HTTP请求. 很多Web应用都 ...

  4. web渗透测试思路浅谈-----漏洞发现及利用

    0x02 漏洞发现及利用 1.SQL注入 SQL注入是一种将SQL代码插入或添加到应用(用户)的输入参数中,再将这些参数 传递给后台的SQL数据库加以解析并执行的漏洞,具体过程如下: 注入类型有get ...

  5. 渗透测试中网站代码漏洞审计服务

    渗透测试系统漏洞如何找到:在信息收集的根本上找到目标软件系统的系统漏洞.系统漏洞找到我来为大伙儿梳理了4个层面:框架结构模块透明化系统漏洞:依据所APP的的框架结构模块版本号状况,检索透明化系统漏洞认 ...

  6. Kali Linux Web 渗透测试秘籍 第三章 爬虫和蜘蛛

    第三章 爬虫和蜘蛛 作者:Gilberto Najera-Gutierrez 译者:飞龙 协议:CC BY-NC-SA 4.0 简介 渗透测试可以通过多种途径完成,例如黑盒.灰盒和白盒.黑盒测试在测试 ...

  7. Web渗透测试常规套路

    注:文章首发自合天智汇微信公众平台 0x01:本篇文章旨在给小白白们做一次有关web渗透的科普,其中涉及到的套路.工具可能在如今XX狗.XX盾当道的社会已不再适用,但是其中涉及的思想永远不会过时,其中 ...

  8. 常规web渗透测试漏洞描述及修复建议

    1.Apache样例文件泄漏 漏洞描述 apache一些样例文件没有删除,可能存在cookie.session伪造,进行后台登录操作 修复建议 1.删除样例文件 2.对apache中web.xml进行 ...

  9. Kali Linux Web 渗透测试秘籍 第四章 漏洞发现

    第四章 漏洞发现 作者:Gilberto Najera-Gutierrez 译者:飞龙 协议:CC BY-NC-SA 4.0 简介 我们现在已经完成了渗透测试的侦查阶段,并且识别了应用所使用的服务器和 ...

最新文章

  1. 听李宏毅点评GPT-3:来自猎人暗黑大陆的模型
  2. CRLF line terminators导致shell脚本报错:command not found
  3. [bbk3100]第7集 - Chapter 04 - 介绍RAC中CVU工具的使用
  4. 别在被骗了!!!!!!
  5. php.ini 没有pdo,php.ini 没有pdo怎么办
  6. Jsp基本page指令、注释、方法声明,书写规范及注意事项
  7. Springboot项目启动报错:
  8. 【基础数学】Jensen不等式
  9. Java类加载器的使用
  10. 华为交换机如何恢复出厂设置
  11. 网络保护第三层 WAF-网络应用防火墙
  12. 微信图片 自动上传到服务器,微信小程序怎样使图片上传至服务器
  13. Windows下后台运行Python程序,并终止特定程序
  14. oracle的LPAD方法用法
  15. 《嫌疑人X的献身》读书笔记
  16. TimesTen缓存管理员用户到底需要什么权限?
  17. 页面加载时就请求ajax,页面加载时发送Ajax请求
  18. uefi启动解析:由原理到实例
  19. linux管理工具WDCP的安装教程
  20. 网络安全 中间人攻击-ARP欺骗 工具:Cain

热门文章

  1. Java for循环的几种用法
  2. leetcode -- 357. Count Numbers with Unique Digits
  3. 【界面无法显示】getStorageInfoSync和getStorageSync的区别
  4. InnoDB和MyISAM有哪些不同
  5. gis怎么改鼠标滚轮缩放_PhotoShop缩放画面的快捷方式
  6. 用php求n个分数的和,php关于数组n个随机数分成x组,使每组值相近的算法
  7. android 属性动画伸缩,Android的属性动画(二)加载框圆点旋转收缩放大缩小效果的实现...
  8. 新手网站推广邮件群发一点心得
  9. 设置linux服务,Linux服务的seLinux设置
  10. flask查询mysql数据展示_flask再学习-思考之怎么从数据库中查询数据在页面展示!...