| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发测试 -> vAPI-API漏洞靶场通关指南 -> 正文阅读 |
|
[开发测试]vAPI-API漏洞靶场通关指南 |
基础准备VAPI介绍vAPI是一款针对OWASP Top 10漏洞的练习靶场,vAPI项目是一个故意引入了多种漏洞的可编程接口API,广大研究人员可以利用vAPI来研究和练习OWASP Top 10漏洞。 安装(Docker)
安装完成默认后访问 http://IP:80/vapi/ 即可访问 vAPI。 Postman配置Postman是一个独立的软件测试API(应用程序编程接口)平台,用于构建,测试,设计,修改和记录API。 这是一个简单的图形用户界面,用于发送和查看HTTP请求和响应。 使用Postman进行测试时,不需要编写任何HTTP客户端网络代码。 相反,构建了称为集合的测试套件,并让Postman与API进行交互。 导入 CollectionvAPI 编写了专门的测试 Collection,可方便我们导入和后续的测试。打开 PostMan,在 My Wordspace 中点击 Import,切换到 Link 导入,将 vAPI 为我们编写好的 Collection 导入。 Collection 文件链接:
设置 host导入成功后,随意选择一个请求,将光标移动到 {{host}} 上,然后点击 Add new variable 为 host 设置地址为 vAPI-IP : Port,并将 Scope 作用域设置为 Collection VAPI。 笔者 vAPI 安装环境为 http://10.211.55.10:8081/vapi/,设置 host 为 10.211.55.10:8081 安装时注意问题1. [Warning] IPv4 forwarding is disabled. Networking will not work.没有开启流量转发,Docker 网桥配置后,需要开启流量转发,不然容器没有网络。
重启network服务
2. 80端口被占用vAPI默认绑定主机80、3306、8001端口,分别对应HTTP,MySQL,PHPMyAdmin,如果出现占用,需要修改 docker-compose.yml 文件中对应端口,如果能正常启动则无需修改。
vAPI1简单的 API 权限校验缺失导致的越权漏洞。 接口API1 共有3个接口,分别为创建用户、获取用户信息、修改用户信息。 创建用户传入用户名、姓名、课程、密码,创建成功返回创建信息。(下同) 获取用户信息(Flag获取接口)将 api1_id 设置为刚刚返回的 id 名称,需要在 Headers 中设置 Authorization-Token,格式为 base64_encode(username:password)。 还有一种是不需要指定用户 id,直接使用 Token 对应 id,是市面上的主流方法。(下同) 修改用户同样需要在 Headers 中设置 Authorization-Token,然后设置修改内容。(下同) 漏洞点在获取了对象数据时,只要传入任一有效的 Authorization-Token,即可获取所有用户信息,查看 id 为1的用户信息即可拿到 flag。 查看关键验证代码可知,验证处只判断了用户名与密码是否匹配,没有判断用户是否匹配。属于越权漏洞。
同理可知也能访问 update 修改任意用户信息。 简易应对措施
vAPI2身份验证验证手段缺失导致的暴力破解。 接口API2 共有2个接口,分别为用户登录、获取用户信息。 用户登录使用 email 与 password 登录。 漏洞点由文档提示找到 /Resouces 目录下的 creds.csv,可知是个暴力破解。 使用 BurpSuite 进行暴力破解,不必抓包,可以直接在 Postman 中点击 code 查看 HTTP 请求信息,然后填写到 BurpSuite 的 Intruder 模块。 Attack type 需要调整为 Pitckfork模式。这里回忆一下 Intruder 的四种攻击模式:
需要取消两个 payload 的 URL-Encode,并且添加对应的处理逻辑:
爆破结果: 使用登录接口登录后拿到 token,放入 Authorization-Token 中使用获取用户信息接口拿到 flag 简易应对措施
vAPI3过度信息暴露,在开发过程中,经验不足的程序员可能会将数据查询结果不做任何过滤,或包含在 JSON 的 Data 中返回给前端处理,或包含在 JSON 的 Data 中进行返回,导致敏感信息泄漏。 接口这一关在 /Resouces 目录下有个 APK 文件安装。 漏洞点直接对 APK 流量进行抓包,Flag 就在返回结果中。 简易应对措施
vAPI4缺少对资源和速率的限制。在这里新学了一个缩写 OTP,One Time Password,一次性密码,也就是市面上最常见的短信验证码。 更多安全相关缩写可以查阅:网络安全专业术语英文缩写对照表 接口API4 共有3个接口,分别为手机登录、验证一次性密码、获取用户信息。 手机登录只需要传入手机号,就会提示已将4位数字发送到手机号。 验证一次性密码传入4位数字的一次性密码进行验证。 漏洞点由于后台没有对访问速率与错误次数进行限制,导致暴力破解,这里指导一下4位数字 payload 的生成,就不演示了。 简易应对措施
vAPI5功能权限认证缺陷。有些程序员为了方便,会将同样的业务抽离出两个不同的接口,以供不同的用户使用,比如所有用户访问 /userInfo 可以访问自己的用户信息,管理员访问 /userInfoList 可以查看所有用户信息,这样做的好处是不必在一个接口中同时完成筛选查找和批量查找,但这样的两个接口同样需要进行管理员权限认证,否则便会产生越权漏洞。 在开发时建议严格遵守 Restful 规范,例如:
更多可查阅 Restful API设计最佳实践 接口API5 共有两个接口,分别为创建用户、获取用户信息。 漏洞点因为分离出的管理员用来查看所有用户数据的 /users 接口没有进行管理员权限校验,只需要创建普通用户,然后使用普通用户即可查看所有用户数据。 简易应对措施
vAPI6过度数据赋值。与 vAPI3 形成闭环,vAPI3是在返回过程中没有使用新建数据传输类或过滤,本题是因为在绑定传入参数时,没有新建数据传输类,直接使用了 DAO 层类进行绑定,并在更新数据库时没有指定修改字段,导致用户所有字段可控。比如普通用户在修改个人信息时可修改所有信息,比如将 roleID 等权限字段修改为与管理员相同,完成权限提升。 接口API6 共有两个接口,分别为创建用户、获取用户信息。 获取用户信息该关的用户信息多个 credit 字段。 漏洞点credit 很明显是权限字段,创建新用户时直接传入 credit 为 100,然后使用新用户获取个人信息即可拿到flag。 简易应对措施
vAPI7因为没有配置 CORS 导致的 CSRF 漏洞,太过简单不做介绍。 接口API7 共有4个接口,分别为创建用户、用户登录、获取Key、用户退出。 获取 Key登录后直接访问该接口就可以获取该用户的敏感信息。 漏洞点登录后,直接在 Get Key 接口添加任意 Origin 即可拿到 flag。 简易应对措施
vAPI8注入。 接口API8 共有两个接口,分别为用户登录、获取Flag。 漏洞点注入,直接传入 admin’ or '1 即可登录拿到 authKey,然后使用 authKey 拿到 flag。 简易应对措施
vAPI9vAPI9 有 v2 版本。尽管有了更新更安全的 APIv2,但是有不少网站仍然暴露了老版 APIv1,其中可能存在漏洞。 接口API9v2 只有一个接口,为用户登录。 用户登录可以看出需要传入 username 与 4位数字的 pin 码。 漏洞点尝试爆破,发现存在防爆破机制,当尝试次数过多则会返回500。 将 URL 中的 v2 改成 v1,爆破老版本 API,没有爆破机制,成功爆破 pin 为 1655,得到flag。 简易修复措施
vAPI10这一关直接访问就能得到 Flag,目的是为了告诉我们,对 API 做日志管理与访问监控很重要。因为大多数 API 都没有配置监控与日志记录,这使得攻击者保持不被发现,从而允许他在系统中保持持久性,执行横向移动,并破坏重要的系统。 参考资料
|
|
开发测试 最新文章 |
pytest系列——allure之生成测试报告(Wind |
某大厂软件测试岗一面笔试题+二面问答题面试 |
iperf 学习笔记 |
关于Python中使用selenium八大定位方法 |
【软件测试】为什么提升不了?8年测试总结再 |
软件测试复习 |
PHP笔记-Smarty模板引擎的使用 |
C++Test使用入门 |
【Java】单元测试 |
Net core 3.x 获取客户端地址 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/17 22:44:40- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |