我是如何攻击现代自动售货机的

iso60001  2204天前

1.jpg

前言

无可争议的是,自动售货机对于黑客来说是一个特殊的对象,它总是被当成一道特别的美味。一开始,自动售货机不能联网,只接受硬币,然后,可以使用NFC卡片。如果我说“COGES”,我敢肯定某个人的脑海一定会回想起一些美好时光。但是,在这些年里,很多事情发生了根本性的变化。稍不注意,你就发现整个世界都被能与互联网相连接的东西所取代。

故事

有一天,我决定离开我的宿舍,然后直接回到我的家乡晒晒太阳,所以我去了大学拜访一位老教授。

“去喝杯咖啡吧!” - 他说 - 我们在走廊里走路时开始聊天。

到了自动售货机前

我:“让我付钱,我有钱币!”

他:“等等!让我用自动售货机的App支付,咖啡会更便宜“。

2.jpg

我想:“嗯......这个虚拟钱包貌似很酷......”。

此时我的灵魂告诉我:“我打赌你肯定能入侵他!”

3.png

$ 白帽内心的声音:“如果没有漏洞赏金奖励,也无须在意”。

$ 灰帽子内心的声音:“好的,我只会出于教育目的而这样做”。

$ 黑帽内心的声音:“来吧,伙计,让我们搞砸HEAP,伟大的木星!”。

那天晚些时候......(已非法充值999欧元)

4.gif

分析

预备工作,我用已root的Android手机(启用USB调试),从Play商店安装了目标应用程序,并通过adb将原始apk文件转储到我的笔记本电脑中。

adb pull /data/app/com.sitael.vending-1/ba se.apk ./Argenta.apk

我用apktool反编译apk文件

apktool d ./Argenta.apk ./Argenta

并使用jadx提取Java源代码

jadx ./Argenta.apk

首先,我通过将android:debuggable =“true”属性添加到application 来编辑AndroidManifest.xm l文件来制作可debug的apk文件。

5.png

然后,我重建了* .apk

apktool b ./Argenta

用keytool创建了一个新密钥

keytool -genkey -v -keystore Argenta.keystore -alias Argenta -keyalg RSA -keysize 2048 -validity 10000

利用生成的密钥使用jarsigner签署这个apk

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore Argenta.keystore Argenta.apk Argenta

最后,我优化它使它可以运行

vilalign -v 4 Argenta.apk Argenta-signed.apk

将这个apk安装在手机上

adb install ./Argenta-signed.apk

我在手机上运行了这个App,我开始通过logcat过滤软件包名来查看带特定的日志

adb logcat --pid =`adb shell pidof -s com.sitael.vending`

6.png

没有什么特别的发现,所以我开始梳理源代码寻找敏感信息。

最好看看AndroidManifest.xm l文件,因为我在这找到了对RushOrm的引用

7.png

因此,第一个关键字搜索是db_name

8.png

很好,我在手机上启动了Root Explorer,寻找argenta.db

9.png

找到后,我用adb把它拉到了我的笔记本上

adb pull /data/data/com.sitael.vending/databa ses/argenta.db ./db

并试图用数据库视图软件打开它

10.png

当然,它受密码保护

11.png

逆向

让我们回到源代码,看看RushAndroidConfig.java

12.png

在那里我找到了用于数据库的配置信息。并注意到this.encryptionKey = getDeviceId(context);这行代码。

我转到它的定义并发现目标应用程序使用手机的IMEI(*#06#)作为SQLite数据库的加密密钥。

13.png

高潮

经过几秒钟的检查,我打开了UserWallets表,并编辑了walletCredit字段,写入更改

14.png

然后我将修改后的数据库导回手机中

adb pull ./argenta.db /data/data/com.sitael.vending/databa ses/argenta.db

决定

我感觉我像是“罗宾汉”,我开发了一个Android的App,可以快速转储/恢复/篡改目标应用程序的数据库。然后我又回到了我的大学,最后测试是否能入侵成功,最后我黑边所有同品牌机器。

结论

从一个零信用账户,我可以:

提升信用额度。

买东西。

获取剩余的信用额度。

回到零信用状态。

再次提升信用额度。

重新开始。

通过对所有逆向出来的代码的大致检查,我发现了很大一部分程序代码没有经过混淆,这意味着没有采取很好的措施来保护用户数据并使应用程序保持安全。

一个月前…

我的白帽子内心督促我拿起电话,并打电话给这个公司,在内心的谴责下报告了这个漏洞。我绅士的地建议他们抛弃当前的程序架构,从头开始构建一个更好,更安全的架构。


原文:https://hackernoon.com/how-i-hacked-modern-vending-machines-43f4ae8decec

最新评论

昵称
邮箱
提交评论