上一篇,socks5簡介的握手階段厨诸,忽略了身份驗證流程,這里來補充一下
身份驗證方法選擇
客戶端發(fā)出第一幀:
+----+----------+----------+
|VER | NMETHODS | METHODS |
+----+----------+----------+
| 1 | 1 | 1 to 255 |
+----+----------+----------+
NMETHODS代表客戶端支持的身份驗證方法數(shù)量禾酱,METHODS代表客戶端支持的身份驗證方法微酬,有多種:0x01:GSSAPI,0x02:賬號密碼認證。比如客戶端只支持GSSAPI和賬號密碼認證兩種方法颤陶,這里發(fā)送的數(shù)據(jù)就會是 0x05 0x02 0x01 0x02
代理服收到后颗管,會回應(yīng)
+----+--------+
|VER | METHOD |
+----+--------+
| 1 | 1 |
+----+--------+
常見METHOD:
- 0x00,代表不用身份驗證的,即此代理服務(wù)任何人都可連接滓走,客戶端收到此回應(yīng)直接進入“準備代理”階段垦江,不用走身份驗證流程了
- 0xff,代表需要身份驗證且無可用的驗證方法,這時就算握手失敗了,關(guān)閉連接
- 0x01,代表需要身份驗證搅方,驗證方法為GSSAPI
- 0x02,代表需要身份驗證比吭,驗證方法為賬號密碼方式
身份驗證
這里假設(shè)客戶端收到的是0x05 0x02,即賬號密碼驗證方式,客戶端立即發(fā)出賬號密碼驗證方式的身份驗證幀:
+----+------+----------+------+----------+
|VER | ULEN | UNAME | PLEN | PASSWD |
+----+------+----------+------+----------+
| 1 | 1 | 1 to 255 | 1 | 1 to 255 |
+----+------+----------+------+----------+
ULEN:賬號長度 UNAME:賬號 PLEN:密碼長度 PASSWD:密碼
代理服解出賬號名和密碼,進行驗證姨涡,作出回應(yīng)
+----+--------+
|VER | STATUS |
+----+--------+
| 1 | 1 |
+----+--------+
STATUS是0x00衩藤,代表驗證成功,非0x00,代表鑒權(quán)失敗绣溜,必須關(guān)閉連接
總結(jié)
賬號密碼驗證方式比較簡單慷彤,但安全性較差,只要網(wǎng)絡(luò)線路上能抓包就能“盜得”明文的賬號密碼
引用
RFC1928-SOCKS Protocol Version 5
RFC1929-Username/Password Authentication for SOCKS V5