我目前正在审计一个 iOS 应用程序,我遇到了这种情况,这让我想知道它是否可以以某种方式被利用。
场景如下:有一个包含类名的 plist,即 UIViewController 子类名,作为字符串。
然后加载此类字符串并用于检索匹配类,如下所示:
NSString *className = ... // loaded from plist
UIViewController *vc = [(UIViewController *)[NSClassFromString(className) alloc] initWithNibName:className bundle:[NSBundle mainBundle]];
我想知道是否有可能(在越狱设备上)篡改 plist 并让应用程序加载任意 UIViewController 子类。
有什么想法吗?
最佳答案
是的,存在漏洞,但正如@LonelyDeveloper 在评论中所说,我认为这是您对越狱设备最不担心的事情。
的确,使用您发布的代码,如果有人修改了应用程序的 Info.plist - 他们可以在越狱手机上执行此操作 - 该应用程序将加载 UIViewController。现在,如果这就是他们所做的一切,那么它只会是应用程序中已经存在的子类,或者应用程序已经加载的库。
这样做可能只会导致应用程序无法正常运行。这似乎不是让应用程序执行完全恶意操作的好方法。
您的应用必须有一些其他缺陷。例如,假设这是一个缓存数据的银行应用程序。该应用程序打开时带有登录 View Controller 。帐户 View Controller 显示敏感信息,但应用程序不会让您在未通过登录 View Controller 成功输入密码的情况下看到帐户 View Controller 。通过此 plist 加载,如果 plist 指示加载 LoginViewController,并且攻击者修改 plist 以指定 AccountViewController,则有可能获得对本应访问的信息的访问权限保护。但是,我认为这种情况显示了缺陷的组合。
但是,如果恶意用户(有人偷了您的手机)或从 Cydia 恶意下载安装了 MobileSubstrate调整,然后他们可以加载 UIViewController 的任意子类,而不仅仅是从您的应用中加载错误的 View Controller 。但是,即使没有加载 plist 类,这也允许他们这样做。 MobileSubstrate 调整可以使用 Hook 来注入(inject)各种新代码,几乎在他们想要的任何地方。
因此,此漏洞已经存在,您必须相信越狱社区和越狱存储库能够充分保护您免受恶意软件的侵害。这就是为什么我基本上只在我的越狱设备上安装 Cydia、SBSettings、Activator 和 Saurik 的 unix 命令行工具。
关于ios - 从 plist 漏洞加载类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17231960/
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
目录1.漏洞简介2、AJP13协议介绍Tomcat主要有两大功能:3.Tomcat远程文件包含漏洞分析4.漏洞复现 5、漏洞分析6.RCE实现的原理1.漏洞简介2020年2月20日,公开CNVD的漏洞公告中发现ApacheTomcat文件包含漏洞(CVE-2020-1938)。ApacheTomcat是Apache开源组织开发的用于处理HTTP服务的项目。ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件。该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控
print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上
如何只加载map边界内的标记gmaps4rails?当然,在平移和/或缩放后加载新的。与此直接相关的是,如何获取map的当前边界和缩放级别? 最佳答案 我是这样做的,我只在用户完成平移或缩放后替换标记,如果您需要不同的行为,请使用不同的事件监听器:在你看来(index.html.erb):{"zoom"=>15,"auto_adjust"=>false,"detect_location"=>true,"center_on_user"=>true}},false,true)%>在View的底部添加:functiongmaps4rail