有没有办法使用 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 恶意软件研究。我正在寻找一种手动方式来检索或下载收到的彩信。我希望找到一些curl
或wget
行能够这样做,但没有发现任何有用的东西。
到目前为止,我从内部数据库中获得了一些彩信信息,发现者为:
# 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
部分?
然后查看MMSC
、Proxy
和port
的消息设置,我想构建一个有效的 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。显然,手机已植根并安装了busybox
和sqlite3
,也许还安装了curl
或wget
。 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 从命令行下载彩信?的主要内容,如果未能解决你的问题,请参考以下文章