Weil Jimmer's BlogWeil Jimmer's Blog


Month:August 2016

Found 2 records. At Page 1 / 1.

淺談 HTTP、HTTPS、HSTS 安全 MITM、SSLStrip

No Comments
-
更新於 2017-10-17 22:29:26

眾所皆知要監聽帳號密碼已經不是難事,如上圖所示已經取得了"非HTTPS"加密連線的帳號密碼。最近研究少有成果,來寫篇文章留個紀念,當作我已經懂了原理。若有錯還請各位高手指正。

正常HTTP連線是不會有任何駭客可以侵入,例如手機網路(不談破譯基站或偽造基站)、非共用的私人網段。

一旦在區域網路上有他人的存在,就可能造成資安漏洞被MiTM(中間人)攻擊,竊聽信用卡、帳密…等資訊,例如:公用電腦、公用WiFi。所以很多重要網站(如:Google、FB)都有透過加密連線。如下圖所示,綠色鎖頭 https。

HTTPS的誕生就是預防被竊聽,它的加密現在有兩種形式,一個是RSA、另一個是ECC,都是利用數學難題作為基礎來加密資訊。

由上圖可知,每台電腦在出廠時,都會有"證書"存在自己電腦,不需要經過網路傳輸。也就是 CA Root 。所有證書的簽發都是一層一層向下簽,CA簽發給CA下的單位如DV、OV、EV證書驗證機構,再簽發給域名。而瀏覽器默認信任CA Root,由於來源可靠,故此域名就跟著被一塊信任。

當攻擊者想要竊聽 HTTPS 時會造成問題,因為攻擊者沒有私鑰,無法解密訊息,導致此監聽就無意義了,故只能偽造證書。但是偽造證書會出現一個問題,瀏覽器會警告用戶此證書不可信任(域名錯誤、來源不可信…等)!

所以攻擊者需要監聽HTTPS的辦法就是,想辦法讓瀏覽器不要透過HTTPS連線,利用SSLStrip可以達到此目的,假設此伺服器是強制HTTPS的情況,就會變成駭客與伺服器做安全連線,而真實用戶與駭客間採用HTTP連線。

因為這種情況的發生,所以進而加入一個新功能HSTS,嚴格HTTPS連線,一旦連上了HTTPS,就會發送HSTS頭部訊息,瀏覽器接收後,此後不管任何到此域名的連線都會變強制在本地端做307導向。使攻擊者只能接受並原封不動的傳送此連線資訊,而無法被監聽。

但不少用戶在瀏覽器網址框都是直接打 域名 或是 打 http:// 而不是 https:// ,所以普遍用戶都是 301 轉跳到 HTTPS,在第一次連接時的頭部訊息,如果發動了攻擊,就可以偽造後續所有連線,所以…SSLStrip還是略勝一籌阿。

基於此緣故,現行網際網路又推行了一個新東西:HSTS preload,顧名思義,預先載入,各網站的擁有者可以登入自己的域名到 preload list,等日後瀏覽器更新時,就會把這些網站列表編譯進瀏覽器內。此後瀏覽器,不用透過 301 轉向,直接查詢網站是否在清單裡,如果存在,則直接強制HTTPS連線,就算用戶輸入 http:// 開頭,還是一樣強制307轉跳到https連線。

這已經是終極預防措施,不過,經過我去查網路上某資訊得知,這個清單在Chrome瀏覽器中並非靜態,造成可以利用Delorean時間竄改工具(參考),攻擊瀏覽器,使之 preload 清單的 域名 過期,回到原本 先訪問 HTTP 再 轉跳 HTTPS 的模式,造就了 駭客再次入侵。SSLStrip 還是贏了……防不勝防!上網時要注意看是不是綠色鎖頭喔~


This entry was posted in General, Experience, The Internet, Note, WebHosting, Wi-Fi By Weil Jimmer.

不用寄信 檢查 Email 是否 真實 存在 PHP

No Comments
-
更新於 2016-08-04 20:48:17

最近很常研究 Email,由於是自己架設伺服器,比較麻煩,所以更深入研究了一下下。

今天想到就寫一篇,真實檢查 Email 的方法,因為這個不是驗證 Email 格式與否,而是直接驗證 此Email是否存在,並且無須寄信即可以檢查。

首先先查詢 Email @後域名的MX紀錄,再查此IP,得到 IP 後即可透過 TCP 連線至該 SMTP 伺服器驗證以確立此 Email 確實存在,而不是亂打的。

//Check email is exist
var_dump(check_is_email_real_exist("test@example.com"));

function check_is_email_real_exist($email_address){
	if ((!filter_var($email_address, FILTER_VALIDATE_EMAIL)===false) and strlen($email_address)<=254){
		$emailxx=explode('@',$email_address);
		$dns_lookup_result=dns_get_record($emailxx[1],DNS_MX);
		if (count($dns_lookup_result)==0){
			return false;
		}else{
			$address=gethostbyname($dns_lookup_result[0]['target']);
			if ($address!=''){
				$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
				if ($socket === false) {
					echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
					return false;
				}
				$result = socket_connect($socket, $address, 25);
				if ($result === false) {
					echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
					return false;
				}
				$in = "HELO hi\r\n";
				socket_write($socket, $in, strlen($in));
				if(substr(socket_read($socket, 2048),0,3)=='220'){
					$in = "MAIL FROM:<thisistest@gmail.com>\r\n";
					socket_write($socket, $in, strlen($in));
					if(substr(socket_read($socket, 2048),0,3)=='250'){
						$in = "RCPT TO:<$email_address>\r\n";
						socket_write($socket, $in, strlen($in));
						if(substr(socket_read($socket, 2048),0,3)=='250'){
							$in = "QUIT\r\n";
							socket_write($socket, $in, strlen($in));
							if(substr(socket_read($socket, 2048),0,3)=='250'){
								return true;
							}else{
								return false;
							}
						}else{
							return false;
						}
					}else{
						return false;
					}
				}else{
					return false;
				}
			}else{
				return false;
			}
		}
	}else{
		return false;
	}
}

代碼醜陋,請各位看官不要介意。


This entry was posted in General, Experience, Functions, PHP By Weil Jimmer.

 1 /1 頁)

Visitor Count

pop
nonenonenone

Note

台灣假新聞橫行,沒一家霉體能信的,網軍側翼到處洗風向,堪憂。

毋忘初心,
絕不利慾薰心。

支持網路中立性.
Support Net Neutrality.

飽暖思淫欲,
饑寒起盜心。

支持臺灣實施無條件基本收入

歡迎前來本站。

Words Quiz


Search

Music

Blogging Journey

4480days

since our first blog post.

The strong do what they can and the weak suffer what they must.

Privacy is your right and ability to be yourself and express yourself without the fear that someone is looking over your shoulder and that you might be punished for being yourself, whatever that may be.

It is quality rather than quantity that matters.

I WANT Internet Freedom.

Reality made most of people lost their childishness.

Justice,Freedom,Knowledge.

Without music life would be a mistake.

Support/Donate

This site also need a little money to maintain operations, not entirely without any cost in the Internet. Your donations will be the best support and power of the site.
MethodBitcoin Address
bitcoin1gtuwCjjVVrNUHPGvW6nsuWGxSwygUv4x
buymeacoffee
Register in linode via invitation link and stay active for three months.Linode

Support The Zeitgeist Movement

The Zeitgeist Movement

The Lie We Live

The Lie We Live

The Questions We Never Ask

The Questions We Never Ask

Man

Man

THE EMPLOYMENT

Man

In The Fall

In The Fall

Facebook is EATING the Internet

Facebook

Categories

Android (7)

Announcement (4)

Arduino (2)

Bash (2)

C (3)

C# (5)

C++ (1)

Experience (52)

Flash (2)

Free (13)

Functions (36)

Games (13)

General (60)

Git (2)

HTML (7)

Java (13)

JS (7)

Mood (24)

NAS (2)

Note (32)

Office (1)

OpenWrt (6)

PHP (9)

Privacy (4)

Product (12)

Python (4)

Software (11)

The Internet (25)

Tools (16)

VB.NET (8)

WebHosting (7)

Wi-Fi (5)

XML (4)