渗透测试业务逻辑之业务接口调用

VSole2022-03-25 06:36:34

0x00:前言

上周做渗透,有一个 sql 注入,负责安全审核的人给开发说你们的程序既然还有 sql 注入,我一年也看不见几个。这句话让我又再次深刻的认识到,渗透测试常规的一些注入跨站漏洞不如以前那么盛了,有点经验的开发写东西都会去考虑到了,再加上修复方法也在逐渐的完善,逻辑类的东西也应该并重的去测。

0x01:分类

我把逻辑类的问题大概总结了一下,大概可以分为十个模块,分别是登录认证模块测试、业务办理模块测试、业务授权访问模块测试、输入 / 输出模块测试、回退模块测试、验证码机制测试、业务数据安全测试、业务流程乱序测试、密码找回模块测试、业务接口调用模块测试。

这次记录的是第十个也就是最后一个模块业务接口调用模块测试。

0x02:业务接口调用模块

1,接口调用重放测试

测试方法:接口调用重放测试可以理解成重放测试,接口也就是数据请求,功能很多,例如发布文章,发布评论,下订单,也可以理解成只要请求有新的数据生成,能重复请求并成功,都可以算请求重放,也就是接口重放测试。

修复方法:对生成订单缓解可以使用验证码,防止生成数据的业务被恶意调用。或是每一个请求有唯一的一个 token,请求提交后,token 失效这样。也可以参考微信的做法,在参数中添加 timestamp 和 nonce,并对其进行签名加密。

2,接口调用遍历测试

测试方法:例如有一个功能,是浏览商品的历史记录。把其用户的浏览历史记录 url 发送到 intruder,遍历其用户的 id,看返回 response 信息中是否有正常返回的,且是其他用户的,则证明存在接口遍历问题。

修复方法:在 session 中存储当前用户的凭证或者 id,只有传入凭证或者 id 参数值与 session 中的一致再返回数据内容。

3,接口调用参数篡改测试

测试方法:例如在一些短信验证码、邮件验证码等功能业务中,比如修改其他用户密码,发送后,再次点击重新发送,拦截其请求,修改为自己的账号,如果自己收到了验证码,则存在此问题。

修复方法:会话 session 中存储重要的凭证,在忘记密码、重新发送验证码等业务中,从 session 获取用户凭证而不是从客户请求的参数中获取。从客户端处获取手机号、邮箱等账号信息,要与 session 中的凭证进行对比,验证通过后才允许进行业务操作。

4,接口未授权访问

测试方法:只要是登录后才可以返回相关信息的接口,在未登录状态下也可以返回的,就是未授权访问。在一般的网站测试中,可以 http history 中选择网站的根目录地址,然后右键 spider from here 进行爬去相关的 url,然后在 target 栏下的 site map 中利用 mime type 进行筛选,主要关注一下 json、script、xml 等这些类型,然后把 url 贴到浏览器中看是否能访问来验证。

经验之谈:或者在测试的时候,相关数据包发送到 repeater 后,删除 cookie 进行 go,如果成功返回信息,则是存在此问题的。但把 url 贴到浏览器中时会跳到登录页,这时为了验证可以使用 firefox 的 backfar 插件再试。

修复方法:利用 token 校验的方式,在 url 中添加一个 token 参数,只有 token 验证通过才返回接口数据且 token 使用一次后失效。在接口被调用时,后端对会话状态进行验证,如果已经登录,便返回接口数据,如果未登录,则返回自定义的错误信息。

5,callback 自定义测试

测试方法:因为同源策略,很多网站都会使用 JSONP,而 JSONP 一般会使用 callback 回掉函数,如果这个函数没有做相关的措施,可以随意传入 js 代码并执行则存在此问题。

可以使用 burp 的爬虫功能,先爬去目标网站,然后筛选一下包含有 callback 关键词的 url,看 response 返回的 mime 类型,如果是 text/html 的,则可以输入 js 代码确认下是否存在这个问题。

修复方法:首先可以定义下 content-type 为 json 格式,content=application/json。其次建立 callback 函数白名单,如果传入的函数不是白名单内的,则组织并转到异常页。最后可以对 callback 参数进行 html 实体编码来过滤掉一些特殊字符。

6,webservice 测试

这个测试我目前没有具体的实操过,之前有一次是接口测试就是 webservice 的。回头有测试用例的话,再单独记录一篇博客。

0x03:总结

业务逻辑模块记录,十个模块都大概的总结完了,如果你是一个渗透人员,希望这些思路和方法可以帮到你,如果你觉得博客说的太大概,不详细,那么建议先玩一下 burp,推荐看 burp 实战指南,然后再回头看博客,一定是通俗易懂的。因为确实不是深奥的什么东西,就是一些常规的简单思路。

渗透测试接口测试
本作品采用《CC 协议》,转载必须注明作者和本文链接
或是每一个请求有唯一的一个 token,请求提交后,token 失效这样。把其用户的浏览历史记录 url 发送到 intruder,遍历其用户的 id,看返回 response 信息中是否有正常返回的,且是其他用户的,则证明存在接口遍历问题。
翻看前端代码,可怜的js文件就几个,不过看还真的有了新发现,common.js里面定义了一些地址。扩大战果有了接口,除了测试接口未授权,我们还能对接口进行其他测试。看了下接口,账号只能后台添加、审核、删除、停用。不了解开发的心态)这里的参数js中并没有提供,需要自己Fuzz,不过这个系统非常的人性化,提供了报错信息,图是后补的。
渗透测试-API接口测试
2021-12-28 22:57:33
一个API中通常包含的结构有:本文记录的是Postman学习,以及一些接口测试概念。帮助大家建立接口测试的整体概念,以及学会Postman工具的使用。因为客户自己的测试人员平时做业务功能测试时,也都是有现成的测试 demo的,不可能在Postman中一个一个手动构造请求去测试
渗透测试Tips
2022-04-13 06:38:50
知己知彼,百战不殆1、如果提示缺少参数,如{msg:params error},可尝使用字典模糊测试构造参数,进一步攻击。
主要是可以拿着这些信息通过goole,或github搜索一些其他的敏感信息,扩大搜索面。效果就不多说了,在github泄漏一些账号或源码的事件简直不要太多。)如果得到的ip结果不同,即可判断使用了CDN。nmap扫描服务器进行搜集,我认为也是至关重要的一点,不能遗漏。里面的security项rename-command CONFIG ""又问:如果内容禁止使用ip如何探测内网端口1、使用dns解析2、127。
接口未授权在尝是了一波js接口后没有发现什么漏洞,但是查找到了一些信息泄露。sql注入(两枚)在刚刚注册了用户,登录进去。第一处将url和参数进行拼接。第二处第二处同样是js文件内找到。在图片中间的地方插入xss语句但是如果没有找到可以注册的api,则这个漏洞无法利用,为了扩大漏洞危害,尝试删除cookie,是否可以未授权文件上传。
了解接口常见漏洞,将帮助你在测试接口获取更多的思路。信息披露信息可能会在 API 响应或公共来源中披露。敏感数据可以包含攻击者可以利用的任何信息。例如,使用WordPress API的网站可能会在不知不觉中与导航到API路径的任何人共享用户信息。错误消息可帮助 API 使用者排查其与 API 的交互问题,并允许 API 提供者了解其应用程序的问题。其他良好的信息来源是在侦察期间收集的 API 文档和资源。
前言:渗透测试的时候往往会遇到盲注这类的繁杂的手工测试,所以需要编写半自动化脚本去进行测试减少时间浪费并快速
VSole
网络安全专家