在几个月前,我有幸被约请参加了HackerOne上的一个私家项目。该项目遭到一系列IDOR缝隙的影响,经过对这些缝隙的运用,我成功接管了他们的一个运用。因为保密协议的约束,因而在本文中将不会呈现任何实在称号或与公司相关的信息。但我会更大极限的共享我从普通用户晋级为办理用户的详细进程。
侦查
这个阶段的使命十分简略:该项目将一切站点和子域都包含在了测验范围内,走运的是数量并不巨大。经过一番检查,有两个子域引起了我的留意app.site.com和admin.site.com,下面咱们就以这两个子站为切入点。
知己知彼百战不殆
在对任何的运用测验之前,我都会先依照方针运用的正常流程走一遍。在此期间,我会在后台运转burp阻拦恳求和接纳的数据,以便我更好的剖析运用的履行进程。
中心运用(app.site.com)十分的小,经过几个小时的折腾,我简直一无所得……说实话,我都有点想抛弃了~
第2次测验
中心运用上的一无所得着实令我有些绝望,还好还有一个办理站点(admin.site.com)。那么,有没有什么 *** 能够拜访到办理面板呢?经过几回测验,页面都只向我回来了一个“access denied”回绝拜访的提示信息,底子无法获取到任何的页面内容。就当我快要抛弃的时分,我惊讶的发现当运用VPN进行衔接时,回绝拜访提示居然消失了,而且页面内容也能看到。我不知道为什么我的VPN供给商,答应我拜访其内容(详细原因我也没有调查过,至少现在对我来说是十分有利的)
我拜访了办理站点,并被提示输入登录凭据。此外,这儿还有一个下拉菜单供给了:1.登录 2.注册 两个选项。
我测验了注册选项,API为我回来了一个“注册失利”的过错提示。这也在我的意料之中,让咱们经过burp来检查下恳求数据。
连环运用
注册表单向办理站点上的/api/register端点宣布恳求,之前在中心运用上恳求的也是这个端点。但这儿丢掉了一部分信息:办理站点上的原始恳求如下:
POST /api/register HTTP/1.1
Host: admin.site.com
{"firstName":null,"lastName":null,"login":"email-address@site.com","email":"email-address@site.com","password":"hunter2"}
让咱们将其与中心运用的恳求进行比较:
POST /api/register HTTP/1.1
Host: app.site.com
{"firstName":null,"lastName":null,"login":"email-address@site.com","email":"email-address@site.com","password":"hunter2","securityQuestions":[{"questionId":"1","answer":"test1"},{"questionId":"2","answer":"test2"}]}
经过比照能够看到,办理站点的恳求缺少了securityQuestions。假如咱们将该缺失部分增加上去,咱们就能够在办理站点上成功注册帐户。但这儿有一个问题,办理站点要求运用2FA进行身份验证。这种状况咱们能够测验烧过,例如给它一个空或随机值。这儿我随意填了串数字123456作为我的身份验证码,如我预期的那我成功经过了验证。(因为我并没有2AF设置,因而填写任何数字都应该是有用的)。到这儿,问题仍没有彻底处理。因为我的用户权限较低,因而只要对一些页面不幸的只读权限,包含配置文件和一些其它的文件。但不得不说这是一个十分好的开始!
稳扎稳打
办理站点有一个设置菜单,答运用户修正他们的电子邮件地址,暗码和2FA设置。当我测验更改我的信息时,页面会回来“Something went wrong”的提示,但因为我的帐户中没有设置2FA,因而我能够经过发送空POST恳求来进行修正:
POST /api/users/newAuthenticationCode/46774
HTTP/1.1 Host: admin.site.com
回来一个键值:
{"newKey":"YNFTHSAJVOR3RS6B"}
当页面加载时,这儿还有另一个到/api/users/authenticationCode/YNFTHSAJVOR3RS6B的恳求加载我的QR码。你或许现已猜到,我能够替换我的user_id (46774) 为恣意用户创立新的身份验证码,并运用恣意的2FA东西(如Duo/Google Authenticator)在我的设备上运用QR码注册它。
获取用户数据库
我仅有拜访的一个页面是一个空的“users”页面,该页面并没有为我回来网站上任何的用户信息,但它答应咱们进行搜索。GET恳求如下:
/api/users/search?page=&size=20&ascending=true&orderBy=Login&searchString=My_SEARCH_STRING&userRole=
假如咱们删除了searchString,size和page的值,那么将会获取到整个用户数据库,其间包含UID,email,login_id,profile以及其他一些细节信息。
目睹纷歧定为实
现在我已获取到了满足的信息,我想测验看看是否能获取到更高的拜访权限。当用户测验在办理站点内更改其用户详细信息时,运用程序将宣布以下恳求:
PUT /api/users HTTP/1.1
Host: admin.site.com
{"id":46774,"login":"email-address@site.com","firstName":null,"lastName":null,"email":"email-address@site.com","activated":true,"locked":false,"failedLoginAttempts":0,"authorities":["ROLE_USER"],"authenticationKey":"BHUVCONYHGLMUSAM"}
我测验将我的id替换为其它用户id,并企图修正他们的用户数据,但这并没有成功。这使我意识到,或许“Something went wrong”的过错提示仅仅一个假象,实际上帐户信息早已被成功更改。换而言之便是:即便运用程序成功进行了更改,也照样会回来过错提示。当我提交陈述时,我恳求厂商答应我更改其间一个办理员帐户的信息,而且答应我运用特定的用户ID测验帐户。
衔接缝隙
现在咱们现已承认,能够经过更改id值来创立新的身份验证码和更改其他用户帐户。我测验运用获准的特定用户ID user_id (user_id:3)进行测验。我首先为2FA创立了一个新的QR码,并导入到了Google authenticator中,然后我更改了电子邮件地址并重置了其暗码,并终究成功登录到了该帐户!
[1] [2] 黑客接单网
Burp Suite 是用于进犯web 应用程序的集成渠道。 它包含了许多东西,并为这些东西规划了许多接口,以促进加速进犯应用程序的进程。 一切的东西都同享一个能处理并显现HTTP 音讯,持久性,认证...
你乃至能够在同一个根本缓冲区上具有多个视图。 不同的视图将给你出现相同的操作下的不同成果。 进一步对揭露陈述中高档要挟活动中命名的进犯举动称号、进犯者称号,并对同一布景来历进行归类处理后的计算状况如下...
4.user.phpHost: localhost:6379主要有下面一些标题尽管这种进犯已呈现多年,但现在在大的门户网站还普遍存在,并且由于安全意识单薄,许多企业并未意识到这一问题的重要性。...
运用东西:发掘鸡 v1.1 明小子软件后台规划中存在缺点导致可遍历账号信息,并重置恣意账户暗码地址:http://www.digitalsquid.co.uk/netspoof/[1][2][3]黑客...
要提到装置完结JDK后为啥还要装备一下环境变量,或许许多Java的初学者或许有学过Java的朋友或许都未必能够彻底的答复的上来。 其实,所谓的环境变量,就是在操作体系中一个具有特定姓名的目标,它包含了...
#define SAFE_ACCEPT(stmt) (ap_listeners->next ? (stmt) : APR_SUCCESS)$ lsb_release -a博饼是赌博么, 修复建议...