>> 欢迎您, 傲气雄鹰: 重登陆 | 退出 | 注册 | 资料 | 设置 | 排行 | 新贴 | 精华 | 管理 | 帮助 首页

  小榕软件实验室
  刀光雪影
  三个有用的程序
发表文章 发表涂鸦
  回复数:10  点击数:621 将此页发给您的朋友        
作者 主题: 三个有用的程序 回复 | 收藏 | 打印 | 篇末
MIXTER帅哥哦
级别:长 老 级
威望:0
经验:0
货币:2007
体力:78.6
来源:61.147.217.*
总发帖数:529
注册日期:2001-08-12
查看 邮件 主页 QQ 消息 引用 复制 下载 

两个有用的程序

1。说明:
在网关上运行
用于端口重定向至内网IP、PORT,以进入内网

#include
#include
#include "TCPDataRedird.c"
#define TargetIP TEXT("192.168.1.3")
#define TargetPort (int)3389
#define ListenPort (int)3389//监听端口

#pragma comment(lib,"ws2_32.lib")

int main()
{
WSADATA wsd;
SOCKET sListen=INVALID_SOCKET,//本机监听的socket
sock[2];
struct sockaddr_in Local,Client,Target;
int iAddrSize;
HANDLE hThreadC2T=NULL,//C2T=ClientToTarget
hThreadT2C=NULL;//T2C=TargetToClient
DWORD dwThreadID;

__try
{
if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
printf("\nWSAStartup() failed:%d",GetLastError());
__leave;
}
sListen=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
if(sListen==INVALID_SOCKET)
{
printf("\nsocket() failed:%d",GetLastError());
__leave;
}

Local.sin_addr.s_addr=htonl(INADDR_ANY);
Local.sin_family=AF_INET;
Local.sin_port=htons(ListenPort);

Target.sin_family=AF_INET;
Target.sin_addr.s_addr=inet_addr(TargetIP);
Target.sin_port=htons(TargetPort);

if(bind(sListen,(struct sockaddr *)&Local,sizeof(Local))==SOCKET_ERROR)
{
printf("\nbind() failed:%d",GetLastError());
__leave;
}
if(listen(sListen,1)==SOCKET_ERROR)
{
printf("\nlisten() failed:%d",GetLastError());
__leave;
}
//scoket循环
while(1)
{
printf("\n\n*************Waiting Client Connect to**************\n\n");
iAddrSize=sizeof(Client);
//get socket sClient
sock[0]=accept(sListen,(struct sockaddr *)&Client,&iAddrSize);
if(sock[0]==INVALID_SOCKET)
{
printf("\naccept() failed:%d",GetLastError());
break;
}
printf("\nAccept client==>%s:%d",inet_ntoa(Client.sin_addr),
ntohs(Client.sin_port));
//create socket sTarget
sock[1]=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
if(sock[1]==INVALID_SOCKET)
{
printf("\nsocket() failed:%d",GetLastError());
__leave;
}
//connect to target port
if(connect(sock[1],(struct sockaddr *)&Target,sizeof(Target))==SOCKET_ERROR)
{
printf("\nconnect() failed:%d",GetLastError());
__leave;
}
printf("\nconnect to target 3389 success!");
//创建两个线程进行数据转发
hThreadC2T=CreateThread(NULL,0,TCPDataC2T,(LPVOID)sock,0,&dwThreadID);
hThreadT2C=CreateThread(NULL,0,TCPDataT2C,(LPVOID)sock,0,&dwThreadID);
//等待两个线程结束
WaitForSingleObject(hThreadC2T,INFINITE);
WaitForSingleObject(hThreadT2C,INFINITE);
CloseHandle(hThreadC2T);
CloseHandle(hThreadT2C);
closesocket(sock[1]);
closesocket(sock[0]);
printf("\n\n*****************Connection Close*******************\n\n");
}//end of sock外循环
}//end of try
__finally
{
if(sListen!=INVALID_SOCKET) closesocket(sListen);
if(sock[0]!=INVALID_SOCKET) closesocket(sock[0]);
if(sock[1]!=INVALID_SOCKET) closesocket(sock[1]);
if(hThreadC2T!=NULL) CloseHandle(hThreadC2T);
if(hThreadT2C!=NULL) CloseHandle(hThreadT2C);
WSACleanup();
}
return 0;
}



2。
说明:TCP socket数据转发,sock[0]==>sClient sock[1]==>sTarget

#define BuffSize 20*1024 //缓冲区大小20k
//此函数负责从Client读取数据,然后转发给Target
DWORD WINAPI TCPDataC2T(SOCKET* sock)
{
int iRet,
ret=-1,//select 返回值
iLeft,
idx,
iSTTBCS=0;//STTBCS=SendToTargetBuffCurrentSize
char szSendToTargetBuff[BuffSize]={0},
szRecvFromClientBuff[BuffSize]={0};
fd_set fdread,fdwrite;
printf("\n\n*****************Connection Active*******************\n\n");
while(1)
{
FD_ZERO(&fdread);
FD_ZERO(&fdwrite);
FD_SET(sock[0],&fdread);
FD_SET(sock[1],&fdwrite);
if((ret=select(0,&fdread,&fdwrite,NULL,NULL))==SOCKET_ERROR)
{
printf("\nselect() failed:%d",GetLastError());
break;
}
//printf("\nselect() return value ret=%d",ret);
if(ret>0)
{
//sClinet可读,client有数据要发送过来
if(FD_ISSET(sock[0],&fdread))
{
//接收sock[0]发送来的数据
iRet=recv(sock[0],szRecvFromClientBuff,BuffSize,0);
if(iRet==SOCKET_ERROR)
{
printf("\nrecv() from sock[0] failed:%d",GetLastError());
break;
}
else if(iRet==0)
break;
printf("\nrecv %d bytes from sClinet.",iRet);
//把从client接收到的数据存添加到发往target的缓冲区
memcpy(szSendToTargetBuff+iSTTBCS,szRecvFromClientBuff,iRet);
//刷新发往target的数据缓冲区当前buff大小
iSTTBCS+=iRet;
//清空接收client数据的缓冲区
memset(szRecvFromClientBuff,0,BuffSize);
}
//sTarget可写,把从client接收到的数据发送到target
if(FD_ISSET(sock[1],&fdwrite))
{
//转发数据到target的3389端口
iLeft=iSTTBCS;
idx=0;
while(iLeft>0)
{
iRet=send(sock[1],&szSendToTargetBuff[idx],iLeft,0);
if(iRet==SOCKET_ERROR)
{
printf("\nsend() to target failed:%d",GetLastError());
break;
}
printf("\nsend %d bytes to target",iRet);
iLeft-=iRet;
idx+=iRet;
}
//清空缓冲区
memset(szSendToTargetBuff,0,BuffSize);
//重置发往target的数据缓冲区当前buff大小
iSTTBCS=0;
}
}//end of select ret
Sleep(1);
}//end of data send & recv循环
return 0;
}
//此函数负责从target读取数据,然后发送给client
DWORD WINAPI TCPDataT2C(SOCKET* sock)
{
int iRet,
ret=-1,//select 返回值
iLeft,
idx,
iSTCBCS=0;//STCBCS=SendToClientBuffCurrentSize
char szRecvFromTargetBuff[BuffSize]={0},
szSendToClientBuff[BuffSize]={0};
fd_set fdread,fdwrite;

while(1)
{
FD_ZERO(&fdread);
FD_ZERO(&fdwrite);
FD_SET(sock[0],&fdwrite);
FD_SET(sock[1],&fdread);
if((ret=select(0,&fdread,&fdwrite,NULL,NULL))==SOCKET_ERROR)
{
printf("\nselect() failed:%d",GetLastError());
break;
}
if(ret>0)
{
//sTarget可读,从target接收数据
if(FD_ISSET(sock[1],&fdread))
{
//接收target返回数据
iRet=recv(sock[1],szRecvFromTargetBuff,BuffSize,0);
if(iRet==SOCKET_ERROR)
{
printf("\nrecv() from target failed:%d",GetLastError());
break;
}
else if(iRet==0)
break;
printf("\nrecv %d bytes from target",iRet);
//把从target接收到的数据添加到发送到client的缓冲区
memcpy(szSendToClientBuff+iSTCBCS,szRecvFromTargetBuff,iRet);
//清空接收target返回数据缓冲区
memset(szRecvFromTargetBuff,0,BuffSize);
//刷新发送到client的数据缓冲区当前大小
iSTCBCS+=iRet;
}
//client可写,发送target返回数据到client
if(FD_ISSET(sock[0],&fdwrite))
{
//发送target返回数据到client
iLeft=iSTCBCS;
idx=0;
while(iLeft>0)
{
iRet=send(sock[0],&szSendToClientBuff[idx],iLeft,0);
if(iRet==SOCKET_ERROR)
{
printf("\nsend() to Client failed:%d",GetLastError());
break;
}
printf("\nsend %d bytes to Client",iRet);
iLeft-=iRet;
idx+=iRet;
}
//清空缓冲区
memset(szSendToClientBuff,0,BuffSize);
iSTCBCS=0;
}
}//end of select ret
Sleep(1);
}//end of while
return 0;
}



3。SOCKET代理主控,负责监听两个TCP socket,等待攻击者和AgentSlave来连接,两个
scoket都连接成功后,开始转发数据



#include 〈stdio.h〉
#include 〈winsock2.h〉
#include "TCPDataRedird.c"

#pragma comment(lib,"ws2_32.lib")

#define TargetPort 3389//伪装的target的监听端口
#define LocalPort 12345//等待AgentSlave来connect的端口
int main()
{
WSADATA wsd;
SOCKET s3389=INVALID_SOCKET,//本机监听的socket,等待攻击者连接
s1981=INVALID_SOCKET,//监听的socket,等待AgentSlave来连接
sock[2]={INVALID_SOCKET,INVALID_SOCKET};
struct sockaddr_in Local3389,Local1981,Attack,Slave;
int iAddrSize;
HANDLE hThreadC2T=NULL,//C2T=ClientToTarget
hThreadT2C=NULL;//T2C=TargetToClient
DWORD dwThreadID;

__try
{
//load winsock library
if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
printf("\nWSAStartup() failed:%d",GetLastError());
__leave;
}
//create socket
s3389=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
if(s3389==INVALID_SOCKET)
{
printf("\nsocket() failed:%d",GetLastError());
__leave;
}
//create socket
s1981=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
if(s1981==INVALID_SOCKET)
{
printf("\nsocket() failed:%d",GetLastError());
__leave;
}
//fill the struct
Local3389.sin_addr.s_addr=htonl(INADDR_ANY);
Local3389.sin_family=AF_INET;
Local3389.sin_port=htons(TargetPort);

Local1981.sin_addr.s_addr=htonl(INADDR_ANY);
Local1981.sin_family=AF_INET;
Local1981.sin_port=htons(LocalPort);
//bind s3389 for attacker
if(bind(s3389,(struct sockaddr *)&Local3389,sizeof(Local3389))==SOCKET_ERROR)
{
printf("\nbind() failed:%d",GetLastError());
__leave;
}
//listen for attacker to connect
if(listen(s3389,1)==SOCKET_ERROR)
{
printf("\nlisten() failed:%d",GetLastError());
__leave;
}
//bind s1981 for AgentSlave
if(bind(s1981,(struct sockaddr *)&Local1981,sizeof(Local1981))==SOCKET_ERROR)
{
printf("\nbind() failed:%d",GetLastError());
__leave;
}
//listen for AgentSlave to connect
if(listen(s1981,1)==SOCKET_ERROR)
{
printf("\nlisten() failed:%d",GetLastError());
__leave;
}
//socket循环
while(1)
{
//wait for AgentSlave to connect
iAddrSize=sizeof(Slave);
sock[1]=accept(s1981,(struct sockaddr *)&Slave,&iAddrSize);
if(sock[1]==INVALID_SOCKET)
{
printf("\naccept() failed:%d",GetLastError());
break;
}
printf("\nAccept AgentSlave==〉%s:%d",inet_ntoa(Slave.sin_addr),
ntohs(Slave.sin_port));
//wait for Attacker to connect
iAddrSize=sizeof(Attack);
sock[0]=accept(s3389,(struct sockaddr *)&Attack,&iAddrSize);
if(sock[0]==INVALID_SOCKET)
{
printf("\naccept() failed:%d",GetLastError());
break;
}
printf("\nAccept Attacker==〉%s:%d",inet_ntoa(Attack.sin_addr),
ntohs(Attack.sin_port));
//创建两个线程进行数据转发
hThreadC2T=CreateThread(NULL,0,TCPDataC2T,(LPVOID)sock,0,&dwThreadID);
hThreadT2C=CreateThread(NULL,0,TCPDataT2C,(LPVOID)sock,0,&dwThreadID);
//等待两个线程结束
WaitForSingleObject(hThreadC2T,INFINITE);
CloseHandle(hThreadC2T);
CloseHandle(hThreadT2C);
closesocket(sock[0]);
closesocket(sock[1]);
}//end of socket while
}//end of try
__finally
{
//clean all
if(s3389!=INVALID_SOCKET) closesocket(s3389);
if(s1981!=INVALID_SOCKET) closesocket(s1981);
if(sock[0]!=INVALID_SOCKET) closesocket(sock[0]);
if(sock[1]!=INVALID_SOCKET) closesocket(sock[1]);
if(hThreadC2T!=NULL) CloseHandle(hThreadC2T);
if(hThreadT2C!=NULL) CloseHandle(hThreadT2C);
WSACleanup();
}
return 0;
}




[ 此消息由 MIXTER 在 2002-08-19.21:04:34 编辑过 ]

编辑 删除 发表时间发表于 2002-08-19.20:48:30   MSIE 5.0 Windows 98IP: 已记录
MIXTER帅哥哦
级别:长 老 级
威望:0
经验:0
货币:2007
体力:78.6
来源:61.147.217.*
总发帖数:529
注册日期:2001-08-12
查看 邮件 主页 QQ 消息 引用 复制 下载 

我加了一个TCP SOCKET数据转发的程序

这三个程序配合紧密
可以用这三个就进入内网


编辑 删除 发表时间发表于 2002-08-19.21:05:48   MSIE 5.0 Windows 98IP: 已记录
MIXTER帅哥哦
级别:长 老 级
威望:0
经验:0
货币:2007
体力:78.6
来源:61.147.217.*
总发帖数:529
注册日期:2001-08-12
查看 邮件 主页 QQ 消息 引用 复制 下载 

原来是两个
我加了一个TCP SOCKET数据转发


编辑 删除 发表时间发表于 2002-08-19.21:13:40   MSIE 5.0 Windows 98IP: 已记录
tiandia帅哥哦
级别:一般站友
威望:0
经验:0
货币:194
体力:33.3
来源:211.90.207.*
总发帖数:29
注册日期:2002-07-24
查看 邮件 主页 QQ 消息 引用 复制 下载 

通过打开了网关上的3389,还需要端口重定向了吗?
----------------------------------------------------------
hehaj

编辑 删除 发表时间发表于 2002-08-19.21:25:01   MSIE 6.0 Windows XPIP: 已记录
MIXTER帅哥哦
级别:长 老 级
威望:0
经验:0
货币:2007
体力:78.6
来源:61.147.217.*
总发帖数:529
注册日期:2001-08-12
查看 邮件 主页 QQ 消息 引用 复制 下载 

如果你能真正理解了端口重定向的技术价值
再来跟我探讨这个问题

OK???

[ 此消息由 MIXTER 在 2002-08-19.21:30:28 编辑过 ]

编辑 删除 发表时间发表于 2002-08-19.21:28:10   MSIE 5.0 Windows 98IP: 已记录
逆刃刀客帅哥哦
级别:老 站 友
威望:0
经验:0
货币:840
体力:56.5
来源:dune
总发帖数:210
注册日期:2002-03-15
查看 邮件 主页 QQ 消息 引用 复制 下载 

好酷啊,不过我还只是一个scriptkid.不是弱口令就是sa,好无聊啊。
----------------------------------------------------------
爱情就像我们看过的一场烟花,在绽放的瞬间是绝美的,但是,现在它熄灭了,夜空沉寂了,我们也就回家了,就是如此.
优雅地骂,文明地掐

编辑 删除 发表时间发表于 2002-08-19.23:03:47   MSIE 5.01 Windows 2000IP: 已记录
神仙姐姐美女哟
级别:风云使者
威望:0
经验:9
货币:3051
体力:32
来源:紫禁城
总发帖数:1081
注册日期:2002-01-28
查看 邮件 主页 QQ 消息 引用 复制 下载 

可以榕哥没有给你开编程版块~ 你把程序公布出来吧
大家看不懂的。
----------------------------------------------------------
淡泊明志,宁静至远;请别害我,我是好人!

编辑 删除 发表时间发表于 2002-08-19.23:37:38   MSIE 5.0 Windows 98IP: 已记录
摩登野人帅哥哦
级别:高级站友
威望:0
经验:0
货币:669
体力:49.5
来源:湖北
总发帖数:182
注册日期:2002-06-23
查看 邮件 主页 QQ 消息 引用 复制 下载 

看源程序可以消除对技术的神秘感,其实不就是些api调用吗。
----------------------------------------------------------

编辑 删除 发表时间发表于 2002-08-19.23:42:37   MSIE 6.0 Windows 2000IP: 已记录
逆刃刀客帅哥哦
级别:老 站 友
威望:0
经验:0
货币:840
体力:56.5
来源:dune
总发帖数:210
注册日期:2002-03-15
查看 邮件 主页 QQ 消息 引用 复制 下载 

好厉害啊,mixter已经好几篇加精了.能不能介绍几个好的编程教学,源码网站啊
----------------------------------------------------------
爱情就像我们看过的一场烟花,在绽放的瞬间是绝美的,但是,现在它熄灭了,夜空沉寂了,我们也就回家了,就是如此.
优雅地骂,文明地掐

编辑 删除 发表时间发表于 2002-08-20.14:55:30   MSIE 5.01 Windows 2000IP: 已记录
MIXTER帅哥哦
级别:长 老 级
威望:0
经验:0
货币:2007
体力:78.6
来源:61.147.218.*
总发帖数:529
注册日期:2001-08-12
查看 邮件 主页 QQ 消息 引用 复制 下载 

www.csdn.net

编辑 删除 发表时间发表于 2002-08-20.20:08:19   MSIE 5.0 Windows 98IP: 已记录
非黑不可帅哥哦
级别:圣骑士
威望:0
经验:1
货币:882
体力:58.9
来源:湖北
总发帖数:224
注册日期:2002-08-11
查看 邮件 主页 QQ 消息 引用 复制 下载 

看不懂 怎么看也不明白
----------------------------------------------------------
◇╔═╗◇╰缺的就是钱ツ 穷的-别来ツ
◇║流║◇╰玩的就是拽ツ看不惯-滚开ツ
◇║氓║◇╰多的就是女人ツ丑的-不爱ツ
◇╚═╝◇╰混的就是牛逼ツ不服-你来ツ
为中国崛起而读书————非黑不可

编辑 删除 发表时间发表于 2002-08-21.11:42:43   MSIE 5.01 Windows 2000IP: 已记录
选择回复        
 快速回复主题: >>>高级模式
  用户名: 没有注册? 密码: 忘记密码?
记住密码
HTML语法
禁止IDB代码
禁止表情字符

[按 Ctrl+Enter 快捷键可直接提交帖子]
 投票评分: 共 0 票  
所有时间均为: 北京时间 ↑TOP 
关闭主题 拉前主题 移动主题 主题置顶 取消置顶 总固顶主题 取消总固顶 加入精华 移出精华 删除主题