mysql登录抓包_MySQL登录验证的抓包
理論知識(shí)部分摘錄自:
http://blog.chinaunix.net/uid-9234131-id-5088292.html
http://blog.csdn.net/sissiyinxi/article/details/7660389
1.服務(wù)器端會(huì)隨機(jī)生成一個(gè)random string發(fā)送給客戶(hù)端;
2.客戶(hù)端收到random string后,進(jìn)行hash加密
第一步,將密碼hash,得到hash值hash_stage1;? eg.hash_stage1=sha1("password");
第二步,二次hash,得到hash_stage2;? eg. hash_stage2=sha1(hash_stage1);
第三步,將密碼二次hash得到的值與random string進(jìn)行hash,得到hash_stage3; eg. hash_stage3=sha1("randomstring",hash_stage2);
第四步,異或處理準(zhǔn)備發(fā)送給服務(wù)器端,得到reply=xor(hash_stage1,hash_stage3);
最后,將reply的值發(fā)送給服務(wù)器端。
3.服務(wù)器端收到reply后同樣進(jìn)行hash運(yùn)算
第一步,將保存的hash形式的密碼hashpassword與random string進(jìn)行hash,得到server_hash_stage1=sha1("randomstring","hashpassword");
第二步,將客戶(hù)端發(fā)送的reply與剛才得到的hash值進(jìn)行異或運(yùn)算,得到xor_value;eg. xor_value=xor(reply,server_hash_stage1);
第三步,將得到的異或值進(jìn)行hash,得到server_hash_stage2;eg. server_hash_stage2=sha1(server_hash_stage1);
第四步,驗(yàn)證,將最后得到的hash值server_hash_stage2與保存的密碼hashpassword進(jìn)行比較。eg.?? server_hash_stage2==hashpassword,相等則驗(yàn)證通過(guò)。
下圖是我從mysql5.7.22代碼里面截取的偽代碼:
官方文檔:
MySQL uses passwords in two phasesof client/server communication:
When a client attempts to connectto the server, there is an initial authentication step in which the client mustpresent a password that has a hash value matching the hash value stored in theuser table for the account the client wants to use.
After the client connects, it can(if it has sufficient privileges) set or change the password hash for accountslisted in the user table. The client can do this by using the PASSWORD()function to generate a password hash, or by using a password-generatingstatement (CREATE USER, GRANT, or SET PASSWORD).
> SELECT PASSWORD('Abcd@1234');?? # mysql用戶(hù)密碼的計(jì)算方式:(hash方式)
+-------------------------------------------+
| PASSWORD('Abcd@1234')???????????????????? |
|-------------------------------------------|
|*47B150E012313114C04A1C9336709424085B6BD0 |
+-------------------------------------------+
使用wireshark抓取通過(guò)navicat登錄虛擬機(jī)的mysql-5.7的部分截圖:
第5~7個(gè)包是三次握手包。
第8個(gè)包:
server告知客戶(hù)端,當(dāng)前服務(wù)器的字符集、認(rèn)證使用的插件。并將隨機(jī)生成的一個(gè)salt值發(fā)給client。
第9個(gè)包:
client端收到server端發(fā)來(lái)的salt值,然后使用salt值和本地的登錄密碼生成一個(gè)新的隨機(jī)串,然后將新的串發(fā)往服務(wù)端(就是上圖中的dd249f24....這串字符串)。服務(wù)端check字符串反解析。
第10個(gè)包,是server-->client的ACK包。
第11個(gè)包開(kāi)始及之后的一些packet就是client server之間的通訊了。
總結(jié)
以上是生活随笔為你收集整理的mysql登录抓包_MySQL登录验证的抓包的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql什么情况会扫描所有_造成MyS
- 下一篇: mysql开启定时器_MySQL定时器开