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

not*_*bit 12 sqlite security android mms apn

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

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

# 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
Run Code Online (Sandbox Code Playgroud)

如何解读这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
Run Code Online (Sandbox Code Playgroud)

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

PS.显然,手机是植根并兼得busyboxsqlite3,或许也curlwget安装.AOS是5.0+.


附录:2017-11-09

这里:

MMS(多媒体消息服务)消息使用SMS和WAP技术的组合发送.当发送MMS消息时,移动设备通过SMS接收MMS通知消息.当移动设备接收到该MMS通知消息时,移动设备自动发起WAP网关连接以下载MMS消息的内容.

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

此外,智能手机不再将MMS或SMS内容下载到SIM卡.这就是"功能"手机用来做这件事的方式.


附录:2017-11-13

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

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. 
Run Code Online (Sandbox Code Playgroud)

因此,我们可以预期URI in ct_l可以解释如下:

  • 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语句检索和下载MMS的内容.也许是这样的:

# 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
Run Code Online (Sandbox Code Playgroud)

第一个显然无法在电话环境之外工作,因为它指的是IP类C,仅在移动分配的IP中可见.

小智 1

我只是使用了你的附录来让它工作,但不得不稍微改变一下。

请注意,我在 Linux 上运行此程序,并PPP使用通过连接的 USB 调制解调器定义的接口。显然,对于传送彩信推送的运营商来说,执行此操作的连接必须是“网上”。

curl --interface ppp0 -v -x 10.202.2.60:8080 --output mms.pdu http://pxt-get.vodafone.net.au:8080/mmsc?xxxxxxxxxxx
Run Code Online (Sandbox Code Playgroud)

在哪里:

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

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

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

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

这会将 MMS 保存到文件中mms.pdu


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

debug
4000000
modem
crtscts
lock
connect /etc/ppp/net-connect
asyncmap 0
defaultroute
:
mtu 1400
Run Code Online (Sandbox Code Playgroud)

/etc/ppp/net-chat

debug
4000000
modem
crtscts
lock
connect /etc/ppp/net-connect
asyncmap 0
defaultroute
:
mtu 1400
Run Code Online (Sandbox Code Playgroud)

/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
Run Code Online (Sandbox Code Playgroud)

最后连接,通过执行以下操作:/usr/sbin/pppd /dev/ttyUSB3