首页
社区
课程
招聘
[原创]API安全漏洞靶场vAPI解题
发表于: 2022-12-11 21:24 1363

[原创]API安全漏洞靶场vAPI解题

2022-12-11 21:24
1363

vAPI是一款针对OWASP Top 10漏洞的练习靶场
项目地址:
https://github.com/roottusk/vapi
环境要求

安装方式docker

图片描述
打开浏览器,输入http://localhost/vapi/,靶场搭建成功
图片描述

对象级授权是一种通常在代码层面实现的访问控制机制,用于校验用户仅能访问其有权访问的对象,攻击者可以在发送的请求中改变对象的ID来攻击存在“失效的对象级授权”漏洞的API。
① 注册一个新用户
图片描述
② 根据id得到用户信息
图片描述
③ 改变id,发现可以得到任一用户信息,将id设置为1,得到flag
图片描述
漏洞成因:
API在返回基于标识符的数据时没有执行权限检查,因此我们得到了标志。

破坏的身份验证是指任何可能导致攻击者基于弱密码、默认密码、暴力/字典攻击或向未经授权的参与者暴露凭据/令牌来假定其他用户身份的行为。
该题的题目为:我们没有账号和密码,如何登录?(在给你的资源文件夹中有一些内容)
根据题目提示,查看resource文件夹
图片描述
图片描述
查看creds.csv可知这是个暴力破解问题,那么我们可执行如下操作:
① 首先,使用Burp suit对postman进行抓包
关于postman如何进行抓包配置
图片描述
在user/login请求的body中填好参数,点击sending
图片描述
在burp suit中抓到的包如下:
图片描述
② 点击action中的 send to Intruder进行爆破,另外burp suit专业版的爆破速度较快,建议下载专业版
图片描述
选择攻击类型为Pitchfork
图片描述
Positions下的Attack type,总共有四种的攻击模式,分别为 sniper、Battering ram、Pitchfork、cluster bomb
sniper:
sniper的特点是只需要指定一个Payload Set,不管你Positions中有几个变数,都是一个Payload Set,但会针对每个变数逐项的替换。在替换第一个位置变量的时候,第二个是不会动的,也就是替换第一个位置的时候,第二个会是原始值,而测试完第一个位置时,才会测试二个位置。
Battering ram:
这种攻击模式实际上比第一种还好理解,也是不管你Positions中有几个变数,都是一个Payload Set。
并且每个变量位置的值都会是一样的。
Pitchfork
不能只输入一个字典,每个变量要有自己的字典文件,也就是说每个变量有一个属于自己的Payload set,但是要注意的是每个Payload set里面的payload个数要一样。(当然其实payload set不一样也是没关系,还是可以执行,只是多出来的那些payload不会被送出去而已)
cluster bomb
这种方式也是每个变量都要输入字典,但是不会像Pitchfork是一对一的关系,而是每个都会去尝试到,逐项地去尝试一多对的方式。

对payload进行配置,根据字典的特点,第一个payload删除,后面的所有字符,即
图片描述
第二个payload从后向前截取8位,密码的长度
图片描述
图片描述
图片描述
③ 点击start attack进行爆破
图片描述
使用破解的账户和密码登录成功,得到token
图片描述
④ 使用token获取用户的详细信息拿到flag
图片描述
漏洞成因:
API没有对身份验证功能实施速率限制,攻击者通过提供泄漏的凭据,通过凭据填充攻击访问了其他用户的帐户。

题目:请尝试资源文件夹中的Android应用程序
下载apk模拟器,安装安卓应用程序
图片描述
直接对 APK 流量进行抓包,Flag 就在返回结果中。
图片描述
漏洞成因:
API在响应登录请求时返回了过多的信息,但没有反映界面上的所有信息,因此Burpsuite等代理工具可以帮助查找不必要的暴露数据。

大多数情况下,API没有设置为保护自己免受过度的客户端请求。攻击者可以利用此漏洞向服务器发送大量请求,从而导致拒绝服务(DoS)或绕过身份验证系统。
题目:
我们相信OTP(one times password)是一种很好的验证用户身份的方式,如果实现正确,也是安全的!
① 尝试登录
图片描述
四位的手机验证码已发送,但我们不知道验证码是什么,尝试爆破
设置攻击类型和payloads
图片描述
四维数字,1000-9999,按照顺序尝试爆破
图片描述
结果:
图片描述
将key复制过去,得到flag
图片描述
漏洞成因:
由于速率限制未在第二因素身份验证机制(OTP)上实现,我们通过对OTP值发起暴力攻击来绕过它,并获得正确的OTP,从而获得用户详细信息。

一些管理功能可以在没有任何授权的情况下访问,但不会直接向普通用户公开,因此根据开发人员的说法,这些功能是安全的。实际上,只有在攻击者没有发现之前,这些才是安全的,这可以通过尝试有根据的猜测或暴力攻击轻松实现。
题目:您可以将自己注册为用户。就是这样还是还有其他的?(我经常听到管理员登录,但使用不同的路线)
图片描述
注册成功,拿到token,base64位编码(username:passsword)
猜测拿到所有用户的接口为GET /vapi/api5/users使用注册用户的toekn值获得所有所有用户信息,拿到flag
图片描述
漏洞成因:
页面虽没有直接向普通用户公开,但没有任何授权检查来验证用户的权限。

很多时候,API信任从客户端接收的用户输入,并将其写入数据库而不进行过滤。攻击者可以从API文档、有根据的猜测或http响应中找到其他对象,并将其添加到请求中,以获得对受限功能的未授权访问。比如:在注册用户时,攻击者可以附加&admin=true参数并获得管理员权限。
① 创建用户,使用token值获取用户信息
图片描述
根据题目提示,credit就是权限信息,我们在创建用户时直接更改credit=100
图片描述
拿到flag
图片描述

安全配置错误是由于默认或不完整的配置、错误配置的HTTP标头、不必要的HTTP方法、跨源资源共享(CORS)错误配置以及包含敏感数据的详细错误消息而导致的。攻击者可以利用这些不良配置获得未经授权的访问或破坏安全机制。
CSRF(Cross-site request forgery)跨站请求伪造。跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如发邮件、发消息、甚至财产操作:转账、购买商品等)。
CSRF攻击原理及过程:
1.用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
2.在用户信息用过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
3.用户未退出网站A之前,在同一浏览器中打开一个TAB页访问网站B;
4.网站B接受到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
5.浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
题目:嘿,这是一个API,对吗?所以我们期待跨源请求。我们只是希望它能正常工作。
① 创建一个用户
图片描述
② 登录
图片描述
③ 直接在 Get Key 接口添加任意 Origin 即可拿到 flag
图片描述

注入攻击不仅在web应用程序中普遍存在,而且在OWASP前十大API安全列表中也占有一席之地。API调用可能包括SQL查询、NoSQL查询、LDAP、OS或请求中的其他命令。当服务器盲目地执行作为用户查询的一部分接收的输入而不进行过滤时,就会发生注入攻击。
简单的sql注入
图片描述
图片描述

API倾向于公开比看起来更多的端点,尤其是旧版本的端点。开发人员可能会让较旧版本的API运行以实现向后兼容性,而这可能没有实现足够的安全机制。普通用户可能无法直接访问旧版本,但攻击者可以列举并发现它们被误用。
尝试爆破,发现存在防爆破机制,当尝试次数过多时,会出现500错误,该接口应该存在速率限制
图片描述
根据题目提示,将API中的V2改为V1,再次尝试爆破
图片描述
发现只有1655返回的长度不一致,尝试pin=1655,得到flag
图片描述


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 273
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
好帖,现在就学一下,然后丰富下简历
2023-10-16 22:49
0
游客
登录 | 注册 方可回帖
返回
//