上一篇:win2003不能网上升级解决 >>
怎样编写远程漏洞测试代码
翻译:冰血封情 [e.s.t]
来源:邪恶八进制安全小组
强烈推荐英文基础好的不要下载我的翻译 因为冰血封情的e文水平问题 技术翻译中存在错漏纯属必然
所以本翻译文章仅仅是给一些英文不太好的朋友对照阅读 以便学习的
英文原文_exploits.htm" target=_blank>http://www.zone-h.org/files/32/remote_exploits.htm
注意 本文章为翻译粗稿 通宵翻译 必定有错 欢迎大家上来指正...文章整理核对后发原创区 草稿先发内部了...
1 介绍
大家好,欢迎阅读我的首篇英语文章,同时也是我的首篇关于exploit coding的文章,随后我将会引导你去探索remote exploits编写基础的奥秘。为了能够跟上我所讲的知识,您应该已经掌握了c socket编程和ansi c,当然最好您已经明白了local exploits是怎么工作的。如果你还对这些前置知识有些陌生,那么我推荐您还是先阅读一下其他的技术资料,比如:
《the c programming language》(kernighan/ritchie)
《unix network programming》(richard stevens)
我的主页上还有一篇很不错的有关exploits的技术文章,也就是《smashing the stack for fun and profit》(aleph1)
2 如何发并完成我们的整个任务呢
好咧,咱们现在做什么呢?我们现在要测试一个有问题的程序(vulnerable.c)并且想要得到一个remote shell。我们首先来找可以利用的安全漏洞。然后仔细的阅读vulnerable.c,编译并且尝试利用这个漏洞。再然后,我们来看看这个有问题的程序,并且注意到程序中有问题的函数。接下来我们盘算着如何触发溢出,我们的exploit的代码大概的结构是怎样的,最后我们动工完成exploit。
| #include <stdio.h> #include <netdb.h> #include <netinet/in.h> #define buffer<a href="#" target="_blank">_</a>size 1024 #define name<a href="#" target="_blank">_</a>size 2048 int handling(int c) { char buffer[buffer<a href="#" target="_blank">_</a>size], name[name<a href="#" target="_blank">_</a>size]; int bytes; strcpy(buffer, "my name is: "); bytes = send(c, buffer, strlen(buffer), 0); if (bytes == -1) return -1; bytes = recv(c, name, sizeof(name), 0); if (bytes == -1) return -1; name[bytes - 1] = ’\0’; sprintf(buffer, "hello %s, nice to meet you!\r\n", name); bytes = send(c, buffer, strlen(buffer), 0); if (bytes == -1) return -1; return 0; } int main(int argc, char *argv[]) { int s, c, cli<a href="#" target="_blank">_</a>size; struct sockaddr<a href="#" target="_blank">_</a>in srv, cli; if (argc != 2) { fprintf(stderr, "usage: %s port\n", argv[0]); return 1; } s = socket(af<a href="#" target="_blank">_</a>inet, sock<a href="#" target="_blank">_</a>stream, 0); if (s == -1) { perror("socket() failed"); return 2; } srv.sin<a href="#" target="_blank">_</a>addr.s<a href="#" target="_blank">_</a>addr = inaddr<a href="#" target="_blank">_</a>any; srv.sin<a href="#" target="_blank">_</a>port = htons( (unsigned short int) atol(argv[1])); srv.sin<a href="#" target="_blank">_</a>family = af<a href="#" target="_blank">_</a>inet; if (bind(s, &srv, sizeof(srv)) == -1) { perror("bind() failed"); return 3; } if (listen(s, 3) == -1) { perror("listen() failed"); return 4; } for(;;) { c = accept(s, &cli, &cli<a href="#" target="_blank">_</a>size); if (c == -1) { perror("accept() failed"); return 5; } printf("client from %s", inet<a href="#" target="_blank">_</a>ntoa(cli.sin<a href="#" target="_blank">_</a>addr)); if (handling(c) == -1) fprintf(stderr, "%s: handling() failed", argv[0]); close(c); } return 0; } 相关文章:
© 2006 www.java-asp.net
|
