有没有办法使用 curl 或 wget 从命令行下载彩信?

Posted

技术标签:

【中文标题】有没有办法使用 curl 或 wget 从命令行下载彩信?【英文标题】:Is there a way to download an MMS from command line using curl or wget? 【发布时间】:2017-10-22 09:11:24 【问题描述】:

我正在针对基于 MMS 的攻击进行一些 android 恶意软件研究。我正在寻找一种手动方式来检索或下载收到的彩信。我希望找到一些curlwget 行能够这样做,但没有发现任何有用的东西。

到目前为止,我从内部数据库中获得了一些彩信信息,发现者为:

# find / -iname "*.db" |grep -iE "mms|sms"
...
/data/data/com.android.providers.telephony/databases/mmssms.db
/data/data/com.google.android.gms/databases/icing_mmssms.db
/data/data/com.android.mms/databases/message.db
/data/data/com.android.mms/databases/message_glance.db

# cd /data/data/com.android.providers.telephony/databases/
# echo "select * from pdu;" | sqlite3 -header mmssms.db
...
# echo "select date,sub,ct_l,tr_id from pdu;" | sqlite3 -header mmssms.db

  date|sub|ct_l|tr_id
  1495xxxxxx|Download this message|http://mmsc32:10021/mmsc/3_2?Ae_xxxx_xxxxx-xxx|Ae_xxxx_xxxxx-xxx

如何解释mmsc32:10021 部分?

然后查看MMSCProxyport 的消息设置,我想构建一个有效的 CLI 单行或浏览器请求,以下载文件进行检查。

在手机设置中我们可以通过以下方式找到MMSC:

Settings > More > Mobile network > Access Point Names > MMS: <your operator>

MMSC:       http://mms.company.net:8002/
MMS Proxy:  194.xx.xx.xx
MMS Port:   8080

如何从 shell 命令行(或外部浏览器)下载彩信文件?

PS。显然,手机已植根并安装了busyboxsqlite3,也许还安装了curlwget。 AOS 是 5.0+。


附录:2017-11-09

来自here:

MMS(多媒体消息服务)消息使用 SMS和WAP技术的结合。发送彩信时, 移动设备通过短信接收彩信通知消息。什么时候 移动设备收到此彩信通知消息, 移动设备自动启动 WAP 网关连接到 下载彩信内容。

要发送彩信,您必须首先创建一个彩信文件。这 MMS 消息文件的格式记录在 MMS 封装中 开放移动联盟发布的协议规范 (http://www.openmobilealliance.org) 和/或 WAP 论坛 (http://www.wapforum.org)。 MMS 消息文件格式由一个 MMS 消息二进制标头,后跟多部分 MIME 消息,其中 多部分消息以二进制多部分格式编码为 由 WAP 无线会话协议 (WSP) 规范定义。这 二进制 MMS 消息文件使用 MIME 类型存储在 Web 服务器上 application/vnd.wap.mms-message 和 MMS 消息类型 m-retrieve-conf。二进制 MMS 标头的子集作为 MMS 发送 通知消息(MMS 消息类型 m-notification-ind)通过 SMS 发送到 移动设备连同指向该位置的 URL 指针 完整的消息。

此外,智能手机不再将彩信或短信内容下载到 SIM 卡。这就是“功能”手机过去的做法。


附录:2017-11-13

查看Telephony.java 中显示的 SQLite3 表的 API-23 (M) 源,我们发现 CONTENT_LOCATION = "ct_l";,所以我们可以搜索它的其他用途here。简要总结我们的发现:

date    # The message delivery time.
sub     # The subject of the message, if present.
ct_l    # The Content-Location of the message. A field in interface:Telephony.BaseMmsColumns 
tr_id   # The transaction-id of the message. 

因此我们可能期望ct_l 中的URI 可以解释如下:

http://mmsc32:10021 是被上面 MMS 代理(如图所示)屏蔽的服务器 (IP:PORT) /mmsc/3_2 是消息处理器的 WAP URL ?Ae_xxxx_xxxxx-xxx 告诉消息处理器检索“事务 id”给出的消息:Ae_xxxx_xxxxx-xxx`

因此,使用代理 (APN) 设置,并使用从消息 DB (mmssms.db) 中提取的 URL,应该能够检索和下载彩信的内容,使用精心设计的curl 声明。 也许是这样的:

# curl -x http://proxy_server:proxy_port --proxy-user username:password -L http://url
curl -v -x http://194.xx.xx.xx:8080 -L http://mmsc32:10021/mmsc/3_2?Ae_xxxx_xxxxx-xxx
# Or from outside local net:
curl -v -x http://mms.company.net:8002 -L http://mmsc32:10021/mmsc/3_2?Ae_xxxx_xxxxx-xxx

第一个显然不能在电话环境之外工作,因为它指的是 IP 类 C,仅在移动分配的 IP 内可见。

【问题讨论】:

代理通常用于检索MSISDN(号码)并将其附加到MMSC进行检查。无论您在 HTTP 标头中提供什么,都不会传递数字,也不会下载相应的消息。 @Marvin 当然,但是应该能够根据找到/提取的内容设置该代理(如上所示)。 自己的代理无法做到这一点。运营商的代理检查 sgsn/ggsn 的数据连接以检索 imsi/msisdn,然后将其传递给 mmsc 以验证带有订户号的 MMS 下载链接。 @Marvin 然后我不确定我是否完全理解这个过程。你能链接到一些东西,我可以在哪里阅读这个? (什么是sgsn/ggsn?)我想您是在谈论mmsc32:10021 部分,它是从手机内部处理的? (在哪里?)归根结底,我只想将消息下载到文件中,而不需要手机处理它,因为它可能包含恶意软件。 我想说的是,您只能通过手机/SIM 数据会话下载,通过互联网是不可能的。 【参考方案1】:

我希望你能得到答案。我不是那个,但会提供我价值 2 美分的建议...

短版

您不能让文本跳过“发送到”SIM 卡并自动转移到某些计算机。

制作一个 Android 应用以安装在您的手机上,确保其工作是检测新收件箱消息的副本并将其转移到您的计算机上。

为 SIM 卡使用 USB 加密狗。插入计算机后,您将直接在计算机上接收消息,而无需涉及电话。

加长版

比起命令行工具,您最好制作一个实际的应用程序(通过 Android SDK)来检查接收到的消息并将一些数据转发给您(例如:通过电子邮件、套接字或任何您喜欢的方式)。 “一些数据”也意味着消息本身的完整副本,或者只是发送 [in-app] 的反馈 消息分析(例如:检测到的图像数量、图像字节的十六进制打印输出等)。

看看 Android 的 SmsManager API 它甚至会告诉你:

有关如何作为 Android 上的默认 SMS 应用程序的信息 4.4(API 级别 19)及更高版本,请参阅 Telephony

还请查看该 API 的 downloadMultimediaMessage 命令。它正在做你需要的事情。 Telephony 页面有开始的信息和链接,但是关于这个主题的独立博客文章和教程(比如example)也在那里。

不管怎样,上你的帖子...

(1)

“我只想将消息下载到一个文件中,而不需要手机处理它,因为它可能包含恶意软件”

你如何想象“没有手机处理它”工作?手机保存您的运营商(通过服务中心)从发件人自己的提供商的服务中心收到消息后会将消息转发到的 SIM 卡。你和curl 不在这个循环中。只有当您的 SIM 卡收到短信并且手机操作系统会提醒您时,您才会知道该短信。

从技术上讲,手机已经处理了这条消息,只是你还没有打开它。

(2)

“如何从 shell 命令行或外部浏览器下载彩信文件?”

您必须下载整个 mmssms.db 文件并从中提取特定消息。您将.db 视为任何其他在线数据库(例如:使用 SQL/php 类型查询等)。

请参阅本教程以获得有用的建议:http://cheeky4n6monkey.blogspot.co.uk/2013/02/

未来收到消息的另一种方法是获取一个 (USB) SIM 加密狗来接收您的卡。一旦插入计算机,它就可以接收/发送消息,因为 SIM 卡在加密狗内是活动的/活动的(作为电话的代理)。

加密狗带有自己的软件(例如image of such),用于管理网络连接和读/写 SMS/MMS 消息。这就像让 SIM 卡不在手机上而是在桌面上工作。

【讨论】:

是的,当然我们可以写一个应用来拦截消息,但这不是我要问的。但就像应用程序一样,我们应该同样能够检索消息。 (1) AFAIK,没有新手机将任何消息下载到 SIM,消息的二进制详细信息决定了手机 (TE) 操作系统将如何处理该消息。例如。将其保存在 SIM 中,在 SE 中处理(APN 设置等),直接显示(闪烁 SMS),或回复发件人等。(2)在您或您的手机决定打开它之前,该消息不在数据库中,这又是取决于您的设置。 作为 (1) 的附注,阅读 this 也可能很有趣。和this。【参考方案2】:

我刚刚使用了你的 附录 让它工作,但不得不稍微改变它。

请注意,我是通过连接的 USB 调制解调器定义的 PPP 接口从 linux 运行的。显然,对于提供 MMS 推送的运营商而言,执行此操作的连接必须是“on net”。

curl --interface ppp0 -v -x 10.202.2.60:8080 --output mms.pdu http://pxt-get.vodafone.net.au:8080/mmsc?xxxxxxxxxxx

地点:

ppp0是调制解调器连接定义的接口,并且:

http://pxt-get.vodafone.net.au:8080/mmsc?xxxxxxxxxxx 是原始彩信推送通知中传递的 URL,并且:

10.202.2.60 是我的运营商提供的彩信代理,并且:

8080 是我的运营商提供的彩信端口

这会将彩信保存到文件mms.pdu


配置文件: /etc/ppp/options:

debug
4000000
modem
crtscts
lock
connect /etc/ppp/net-connect
asyncmap 0
defaultroute
:
mtu 1400

/etc/ppp/net-chat:

#!/bin/sh
/usr/sbin/chat -v -t 60 -f /etc/ppp/net-chat

/etc/ppp/net-connect:

ABORT 'ERROR'
ABORT 'BUSY'
ABORT 'NO CARRIER'
'' AT
OK ATE0
OK AT+IPR=4000000
OK AT+CGDCONT=1,"IP","live.vodafone.com"
OK AT&S1
OK AT&F
OK AT&W
OK AT+CNMP=14
OK AT&W
OK ATE0
OK ATD*99***1#
CONNECT

最后连接,通过:/usr/sbin/pppd /dev/ttyUSB3

【讨论】:

这太棒了伊恩!当时我从来没有按照我的意愿完成这项工作,基本上也没有进一步完成这项任务。您设法使用--interface 选项完成了这项工作,这很棒。看看你如何设置你的 PPP 接口会很酷。我想这个问题有点过时了,但也许你有一个链接到一篇文章或其他一些有用的 cmets? 我把它放在 /etc/ppp/options:york.workingsoftware.com.au/shortly/#LcwxDoAgDEbh/… 我把它放在 /etc/ppp/net-chat:york.workingsoftware.com.au/shortly/… 我把它放在 /etc/ppp/net-connect: york.workingsoftware.com.au/shortly/#U1bUT8rM0y/… 然后我可以通过这样做来连接: /usr/sbin/pppd /dev/ttyUSB3 然后我仍然可以连接到调制解调器SMS AT 命令并通过以下方式读取 WAP PUSH 通知:cu -s 115200 /dev/ttyuSB2 我使用这个库来编码/解码 MMS PDU github.com/pmarti/python-messaging 虽然当心!!他们的教程遗漏了编码 MMS PDU 过程中绝对关键的部分,这让我花费了大约 18 个小时的时间:你必须将 From 参数包含在“插入地址令牌”中,我不知道“插入”是什么-address-token”应该是这样,所以我按字面意思输入“Insert-address-token”并且它起作用了:)然后我就去睡觉了。 openmobilealliance.org/tech/affiliates/wap/… 似乎是 Py3 fork here 的一些不错的更新。

以上是关于有没有办法使用 curl 或 wget 从命令行下载彩信?的主要内容,如果未能解决你的问题,请参考以下文章

Linux里面wget和curl命令区别是啥?

wget命令怎么用

如何使用 curl 或 wget 从 GitLab 下载 maven 包?

Linux的wget命令详解转载

Linux Wget 命令

wget