還記得那些年,郵箱釣魚盛行,各種廣告郵件釣魚郵件層出不窮,經過郵箱防水墻能攔截一部分以外,你是否注意到了正常郵箱可能被有心人利用的姿勢?本文將用一個比較難以察覺的方式獲取目標的IP。
0×00 檢測郵件是否已讀
某天,工作的時候發送了一封郵件給一個比較重要的人,左等右等,心里在想,TA 看了我的郵箱沒有?現在通過一個姿勢來獲取一下自己郵箱的已讀狀態吧?郵件被打開后很大幾率會直接加載郵件中的圖片首先,準備一臺服務器,服務器的權限最好是自己有,使用一下代碼:
header('Content-Type:image/png');
$im = imagecreatetruecolor (1,1);
$background_color = imagecolorallocatealpha($im, 255, 255, 255, 127);
imagepng($im);
imagedestroy($im);
以上代碼創建了一個 1×1 大小的全透明的圖片(誰都看不到哦),我們把這個圖片放到我們自己的服務器上,訪問可以看到一張啥都沒有的圖片:

光是生成圖片還不夠,我們記錄一下 $_SERVER['HTTP_REFERER'] 和 $_SERVER['HTTP_USER_AGENT'] 這倆個存儲了用戶從哪里來,使用了什么用戶代理(瀏覽器設備)過來的,最后還有 ip,我們通過如下代碼獲取:> 參考:https://github.com/DXkite/suda/blob/master/system/src/suda/core/Request.php#L211
function get_ip()
{
static $ipFrom = ['HTTP_CLIENT_IP','HTTP_X_FORWARDED_FOR','HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP','HTTP_FORWARDED_FOR','HTTP_FORWARDED','REMOTE_ADDR'];
foreach ($ipFrom as $key) {
if (array_key_exists($key, $_SERVER)) {
foreach (explode(',', $_SERVER[$key]) as $ip) {
$ip = trim($ip);
if ((bool) filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
return $ip;
}
}
}
}
return '127.0.0.1';
}
獲取完以上數據后,寫入到數據庫中:
$ip = get_ip();
$from = $_SERVER['HTTP_REFERER'];
$client = $_SERVER['HTTP_USER_AGENT'];
// SQL 插入到數據庫中
// ...
寫完以后,我們在郵件中插入我們的圖片(使用 URL 插入),對方收到后可能是這樣的:

可以看到圖片現在就是一個小黑點(命名我弄成透明的了),只要對方查看了這一封郵件,我們就可以在后臺捕獲這個數據。

如果你對消息的時效性有要求,可以加一個短信通知(我這里用的是企鵝 SMS)

在對方訪問頁面的時候就通知到你的手機。
0×01 附帶的技能:IP 定位
上一步我們通過記錄了對方的各種信息:
字段
信息內容
解釋
HTTP_REFERER
http://netease-default-url-start/
從來源可以看出,用戶通過網易客戶端打開郵件
IP
117.136..
用戶使用的出網 IP
HTTP_USER_AGENT
Mozilla/5.0 (Linux; Android 8.0.0; MIX 2S Build/OPR1.170623.032; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/62.0.3202.84 Mobile Safari/537.36
從頭部分析,可以看到用戶通過小米 Mix 2S 打開的郵件

0×02 缺陷與防范
1. 用客戶端打開郵件直接中招
2. 網頁端郵件有小部分幾率屏蔽圖片,但是從目前情況來看,測試了幾個,騰訊,163 都沒有屏蔽
3. 除非使用代理上網,不然正常情況下定位效果還算可以
4. 適用于檢測郵件是否已讀,定位 IP 純屬附帶效果,但是也不容忽略(昂,定位在 TA 家,也不回復我郵件)
|