第一篇地址: https://bbs.pediy.com/thread-225630.htm
首先,感谢看雪,感谢上文 @dalao 兄的邀请,以及其他几位兄弟的捧场。
然后,特别感谢 milo兄关于QQ的指点,及这篇的审校。
最后,如第一篇所言,随手报了3个,均被忽略,赞tx!
刚开始专攻Exploit,对漏洞的评估有不足,感谢TSRC的 qwerty 的回复。
这里做个总结,希望各位老司机多多批评指正。
目前的代码主要组成是从Android QQ来的,版本7.2.0。
漏洞一: YY的DOS攻击
不到20分钟就给我忽略了,20分钟就忽略了,忽略,了,,,我这算是审核最快的报告吗???
大兄弟!老心!扎铁了!!!我仿佛看到了红旗在飘你们内心在奸笑!!!/[手动愤怒]
milo兄给我发了这篇(ec6K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4q4U0L8r3!0#2k6q4)9J5k6h3y4G2L8g2)9J5c8X3u0D9L8$3N6Q4x3V1k6Q4x3@1k6H3i4K6y4p5x3e0b7#2y4#2)9J5z5g2)9J5b7#2!0q4y4q4!0n7b7g2)9^5c8g2!0q4y4W2)9&6z5q4!0m8c8W2!0q4y4W2)9^5z5q4)9&6x3g2!0q4y4g2)9^5c8W2)9^5z5q4!0q4y4#2)9&6b7#2)9^5b7W2!0q4y4q4!0n7b7g2)9^5y4W2!0q4y4#2)9&6b7#2)9^5b7W2!0q4y4g2)9^5y4g2!0n7y4W2!0q4y4q4!0n7b7W2)9&6y4W2!0q4y4W2)9&6y4W2)9^5y4#2!0q4y4#2!0m8b7W2!0m8x3q4)9J5b7#2!0q4z5q4!0n7c8W2)9&6z5g2!0q4y4q4!0n7z5q4)9^5x3q4!0q4y4q4!0n7z5q4!0m8b7g2!0q4y4g2!0n7x3q4!0n7x3g2!0q4y4q4!0n7z5q4)9^5c8q4!0q4y4g2!0m8y4q4)9&6b7g2!0q4z5q4!0m8c8W2!0n7y4q4!0q4y4q4!0n7b7g2)9^5y4W2!0q4x3#2)9^5x3q4)9^5x3R3`.`.
尽管我仍然认为是可实施的。
漏洞二:反序列化对畸形数据包检测不足 (针对server,没实质危害)
这个在提交TSRC之前,纯属猜测服务端在反序列化时会触发,由于担心server是C的怕造成crash没测就提了。
被忽略之后,便使用获取好友功能测试了下,会返回脏数据,可能完全没有数据格式(即客户端无法解析,由于我是1:1还原的,所以判断这里可能就是返回了乱码)。
之后milo兄告诉我了tars ( c63K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6f1k6h3&6U0k6h3&6@1i4K6u0r3g2r3q4J5M7H3`.`. ),读了下源码,如果QQ Server使用的版本和GitHub上的版本是一样的,那可以确认问题是存在的。
原理:
客户端发送逻辑:
服务端接收逻辑:
序列化函数的类: 974K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6f1k6h3&6U0k6h3&6@1i4K6u0r3g2r3q4J5M7#2)9J5c8X3u0D9L8$3u0Q4x3V1k6E0j5i4y4@1k6i4u0Q4x3V1k6B7j5i4k6S2i4K6u0r3j5$3!0J5k6g2)9J5c8Y4y4J5j5#2)9J5c8X3#2S2K9h3&6Q4x3V1k6B7j5i4k6S2i4K6u0r3j5$3!0E0i4K6u0r3M7i4q4Q4x3V1k6@1j5i4u0K6i4K6u0r3M7s2u0G2N6r3!0U0L8$3I4Q4x3V1k6@1j5i4u0K6i4K6u0r3g2r3q4J5M7@1!0#2N6s2m8#2N6q4y4@1M7X3g2S2L8g2)9J5k6h3A6S2N6X3p5`.
反序列化的类: 16aK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6f1k6h3&6U0k6h3&6@1i4K6u0r3g2r3q4J5M7#2)9J5c8X3u0D9L8$3u0Q4x3V1k6E0j5i4y4@1k6i4u0Q4x3V1k6B7j5i4k6S2i4K6u0r3j5$3!0J5k6g2)9J5c8Y4y4J5j5#2)9J5c8X3#2S2K9h3&6Q4x3V1k6B7j5i4k6S2i4K6u0r3j5$3!0E0i4K6u0r3M7i4q4Q4x3V1k6@1j5i4u0K6i4K6u0r3M7s2u0G2N6r3!0U0L8$3I4Q4x3V1k6@1j5i4u0K6i4K6u0r3g2r3q4J5M7@1W2F1M7s2g2@1f1%4c8J5k6h3q4E0i4K6u0W2K9X3q4$3j5b7`.`.
在Android版本中分别对应 JceOutputStream 和 JceInputStream.
举个例子:大家看 JceInputStream 的 readHead
构造畸形数据包的方式很多,最简单的方式可能是直接修改 JceOutputStream 来生成。
剩下的就是攻击思路的问题,比如构造格式正常但逻辑却异常的数据包过掉Server,使数据可以到达好友客户端。
比如根据序列化原理,构造个可以被放大的包(打个比方原始数据占100字节内存,反序列化后占10000字节内存,反正意思就是这个意思),再配合第一个YY的DOS攻击。
使server异常的攻击都没有什么实质危害,但畸形数据到客户端就难说了。
.
漏洞三:QQ钱包支付密码猜解 (这个我觉得是有点风险的)
QQ钱包支付是使用https,证书校验方式只是 a48K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6*7K9s2g2S2L8X3I4S2L8W2)9J5k6i4A6Z5K9h3S2#2i4K6u0W2j5$3!0E0i4K6u0r3M7q4)9J5c8U0t1J5y4o6t1$3y4K6j5I4 中描述部分,强度应该还需要加强。
我的话不够权威,来个比较权威的,省去大家的质疑时间: 93dK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2G2N6$3q4K6M7q4)9J5k6h3!0J5k6#2)9J5c8X3W2F1k6r3g2^5i4K6u0W2M7r3S2H3i4K6u0r3b7$3g2J5N6r3W2X3K9h3y4S2N6r3g2Q4y4h3k6S2L8X3c8Q4y4h3k6b7N6h3u0D9K9h3y4Q4y4h3k6w2k6i4W2Q4y4h3k6b7K9h3&6F1K9h3&6Y4
在这里我再补充下我的理解,不了解HTTPS原理的兄弟先去熟悉下HTTPS,这里就不占用篇幅了。
然后我们思考个问题: 纯净的Android手机 HTTPS 一定是安全的吗?对,纯净的。
一定吗?
一定吗??
一定吗???
我认为不一定。
现在我们来回想一下,HTTPS之所以大家都在说足够安全的前提是什么?
前提就两条:1,可信的证书链 2,足够强的算法和密钥
算法肯定够强啊,秘钥也肯定够啊,1024都是最低标配了吧,所以第二条是可以保证的。
可是,可信的证书链能保证吗?怎么保证的呢?
这一点,在Android里,要分2个角度说,一个是系统层面,一个是webview层面。
首先说webview。
在Android里,不论是Webview组件apk,还是Chrome,包括火狐等浏览器,都是把根证书与apk打包在一起的。
比如Webview组件apk,大家可以把这个apk(包名:com.google.android.webview)拖出来,解压,找最大的那个so文件,ida打开,翻一翻就可以找到一堆的证书了。
比如PC版的chrome,证书是放在一个dll里的。
也就是说,webview、浏览器这种,保证证书链可信的方式是:升级。不升级就无法保证。
然后说系统。
系统的证书是放在了 /system/etc/security/cacerts/,我记得这个路径好像是写死的,大家去翻翻Android 源码,我上一次看得时候记得有一处是写死的这个路径,另外一处还是几处是拼接的,但结果是一样的,有时间的同学可以去确认下。
所以,系统是怎么保证证书可信的呢?对的,也是升级。
比如小米手机是升级补丁的时候会升掉,这一点还不错。
我算是华为的半个粉丝了,可是我可以说MATE1我首发时购买,直到用了5年扔掉,一次升级提示都没有过吗....
所以说,如果手机没升级、webview没升级,证书链就不一定可信,证书链不可信,那HTTPS就保证不了安全性。
那有实例吗?有的,很多,随便搜几个:
579K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2%4K9i4u0W2k6q4)9J5k6h3y4G2L8g2)9J5c8U0t1H3x3e0q4Q4x3V1j5H3x3#2)9J5c8X3y4G2L8h3!0V1L8#2)9J5k6r3y4G2L8i4m8J5L8$3#2A6M7$3g2Q4x3V1j5`.
451K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1L8$3y4K6i4K6u0W2L8h3W2U0M7X3!0K6L8$3k6@1i4K6u0W2j5$3!0E0i4K6u0r3P5X3S2Q4x3X3c8U0L8W2)9J5c8Y4y4W2j5%4g2J5K9i4c8&6i4K6u0V1N6i4m8V1j5i4c8W2M7#2)9J5c8W2y4W2j5%4g2J5K9i4c8&6b7h3c8$3K9i4y4G2M7X3W2W2M7#2)9J5c8U0t1H3x3e0q4Q4x3V1j5J5y4U0l9%4y4K6p5J5
3f4K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4N6A6L8r3I4A6j5h3#2D9L8$3&6Y4i4K6u0W2K9h3&6X3L8#2)9J5c8X3q4J5j5$3S2A6N6X3g2K6i4K6u0r3x3K6j5&6x3q4)9J5k6h3S2@1L8h3H3`.
d30K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2L8h3!0*7K9h3I4D9j5g2)9J5k6h3!0J5k6#2)9J5c8Y4y4W2j5%4g2J5K9i4c8&6i4K6u0r3x3U0l9I4y4g2)9J5c8U0l9K6i4K6u0r3x3U0y4Q4x3V1k6J5k6i4k6G2K9$3W2F1k6#2)9J5k6s2c8J5N6i4y4@1i4K6u0V1K9h3&6Q4x3X3c8G2L8X3g2Q4x3X3c8U0L8X3&6A6j5#2)9J5k6r3W2F1N6r3g2J5L8h3g2V1K9h3q4@1k6g2)9J5k6r3y4W2M7Y4c8A6k6X3W2U0j5i4c8W2i4K6u0r3
说到这里,我们也就明白了,若要HTTPS请求安全,除了降级攻击这种常规防御之外,还要保证证书链可信。
HTTPS有不可信的可能了,就打开了攻击中最重的那个大门。
第一步完成之后,我们看下如何猜解支付密码。业务功能是发红包。
[培训]科锐逆向工程师培训第53期2025年7月8日开班!
最后于 2018-4-13 15:57
被eightmg编辑
,原因: