一、概述
????????????旁路式HTTP注入利用TCP會(huì)問劫持以及HTTP重定向機(jī)制實(shí)現(xiàn)HTTP信息的注入。與串接式注入方案相比,旁路式方案不需要將注入設(shè)備串接到用戶現(xiàn)有的網(wǎng)絡(luò)中,只需要將網(wǎng)絡(luò)流量鏡像到旁路式注入設(shè)備即可。該HTTP注入方式的主要優(yōu)點(diǎn)是對(duì)現(xiàn)有的網(wǎng)絡(luò)運(yùn)行完全沒有影響,而且通過添加更多的HTTP注入設(shè)備即可實(shí)現(xiàn)注入能力的線性擴(kuò)展。
二、技術(shù)原理
1. TCP會(huì)話劫持
? ? ? ?TCP會(huì)話劫持是通過檢視正在進(jìn)行TCP通信的用戶瀏覽器和web服務(wù)器之間傳送的報(bào)文來獲取該保溫的IP地址,TCP端口,TCPde seq/ack值等信息。這樣,當(dāng)用戶瀏覽器發(fā)起到Web服務(wù)器的請(qǐng)求并且在收到Web服務(wù)器響應(yīng)前,旁路式注入設(shè)備利用已知的seq/ack參數(shù)構(gòu)造一個(gè)HTTP重定向報(bào)文發(fā)送給用戶瀏覽器。
2. HTTP重定向
? ? ? HTTP重定向通過向用戶瀏覽器返回301/302響應(yīng)代碼將用戶的HTTP請(qǐng)求指向另一個(gè)地址。301代表是永久性的轉(zhuǎn)移,302代表暫時(shí)性轉(zhuǎn)移。旁路式HTTP注入方案通過在TCP會(huì)話劫持階段向用戶瀏覽器返回302 Found響應(yīng)消息將用戶瀏覽器的后續(xù)請(qǐng)求重新定向到注入設(shè)備的HTTP反向代理。
3. HTTP反向代理
? ? ? HTTP反向代理接收來自用戶瀏覽器的請(qǐng)求后,將該請(qǐng)求轉(zhuǎn)發(fā)給另外一個(gè)服務(wù)器,并將從該服務(wù)器上得到的結(jié)果返回給用戶瀏覽器。HTTP信息的注入就是在HTTP反向代理服務(wù)器上實(shí)現(xiàn)的:在收到服務(wù)器的響應(yīng)結(jié)果后,HTTP反向代理并不立即將該結(jié)果返回給用戶,而是根據(jù)配置在響應(yīng)結(jié)果中注入特定的內(nèi)容(一般是JavaScript代碼)后再將結(jié)果返回給用戶瀏覽器。
三、技術(shù)實(shí)現(xiàn)

? ? ? ?利用libpacap的api接口,主線程再網(wǎng)口上嗅探數(shù)據(jù)包(只嗅探80端口的數(shù)據(jù)包,并且tcp payload長(zhǎng)度要大于20);嗅探到指定規(guī)則的數(shù)據(jù)包后,將數(shù)據(jù)加到隊(duì)列中,然后多個(gè)子線程去從隊(duì)列中獲取數(shù)據(jù)包,然后解析,將body的數(shù)據(jù),替換成指定的js的代碼,然后利用libnet的api,構(gòu)造自定義的數(shù)據(jù)包,立即返回給用戶。
不足:為了提高性能,可使用內(nèi)核模塊pfring。此api基本兼容libpcap接口。