闲谈ClassLoader
闲谈ClassLoader总算放假了,摆了几天,幻兽帕鲁真上头(x。RWctf的那道shiro凹了半天反弹shell没成功是我没想到的,还是菜了。这篇文章就来讲讲Java的类加载机制吧,类加载机制之前在反射机制那篇文章里提到过,这次就来详细说说。 Java是一个依赖于JVM(Java虚拟机)实现的跨平台的开发语言。Java程序在运行前需要先编译成class文件,Java类初始化的时候会调用java.lang.ClassLoader加载类字节码,ClassLoader会调用JVM的native方法(defineClass0/1/2)来定义一个java.lang.Class实例 我们先来看一下JVM的架构图 ClassLoader的具体作用就是将class文件加载到jvm虚拟机中去,程序就可以正确运行了。但是,jvm启动的时候,并不会一次性加载所有的class文件,而是根据需要去动态加载。 Java类先来简单了解下Java类 接下来我们自己写一个测试类 123456package com.deicide.sec.classloader;public class TestHelloWorl ...
浅谈Java反射机制
浅谈Java反射机制这篇文章算是我做javasec的开始吧,这也是我学习P牛的Java安全漫谈以及Java Web 安全的文档的第一篇笔记,下一篇应该得到寒假写了,要期末周了,有点痛苦。 Java反射(Reflection)是Java非常重要且好玩的动态特性,通过使用反射我们不仅可以获取到任何类的成员方法(Methods)、成员变量(Fields)、构造方法(Constructors)等,还可以动态创建Java类实例、调用任意的类方法、修改任意的类成员变量值等。 反射机制原理在Java 程序中,JVM 加载完一个类后,在堆内存中就会产生该类的一个 Class 对象,一个类在堆内存中最多只会有一个 Class 对象,这个Class 对象包含了该类的完整结构信息,我们通过这个 Class 对象便可以得到该类的完整结构信息。 反射就是在运行时才知道要操作的类是什么,并且可以在运行时获取类的完整构造,并调用对应的方法。 反射机制原理示意图👇 那么如果我给出下面这段代码,在你不知道传入的参数值的时候,你能知道他的作用吗 1234public void execute(String class ...
SQL注入补充
SQL注入补充好久没写文章了,主要是最近在学java开发,也不知道记录些啥。 上周六(2023.11.11)去参加HackingGroup的一个闭门会议,有师傅讲到一个关于绕过语义分析的好玩的东西,就来记录(转载)一下 原文链接 => 安全研究所 | 突破语义分析的黑魔法 语义/词法分析词法分析目前,SQL注入的词法分析主流可以分为两类: 基于弱规则词法黑名单 基于此法Token变化 其中基于弱规则词法黑名单的算法有被用于大家熟知的 Libinjection ,它使用基于机器学习的技术,通过分析输入字符串的语法和语义特征来检测SQL注入攻击。主要是通过将用户的输入进行Token化,然后再去匹配一份维护好了的SQL注入黑名单规则库,从而有效发现SQL注入问题。 各种输入的对应词法如下: 123456789101112131415161718192021222324252627282930typedef enum { TYPE_NONE = 0 , TYPE_KEYWORD = (int)'k' , TYPE ...
SICTF2023_Round2_WP_By_D3ic1de
WebInclude挺简单的一个文件包含,没啥过滤的,直接来 题目描述中说flag位于flag.php,直接 1http://ip:port/?SICTF=php://filter/read=convert.base64-encode/resource=flag.php base64解密之后得到flag.php的源码 12345678<?php$file_path = "/flag";if (file_exists($file_path)) { $flag = file_get_contents($file_path);}else{ echo "error";} 发现真正的flag在/flag下 1http://ip:port/?SICTF=php://filter/read=convert.base64-encode/resource=/flag base64解码,拿到flag Baby_PHP这题考了些php的语言特性 1http://ip:port/?k%20e%20y=123%0A ...
PHP反序列化
PHP反序列化php面向对象基础知识类类:定义类名、定义成员变量(属性)、定义成员函数(方法) 12345678910class Class_Name {//成员属性声明//成员方法声明}//举个栗子class hacker{ var $name; var $sex; function } 序列化基础知识魔术方法12345678910111213141516__construct() // 类的构建函数__destruct() // 类的析构函数__call() // 在对象中调用一个不可以访问方法时调用__callStatic()// 用静态方法中调用一个不可访问方法时调用__get() // 获得一个类的成员变量时调用__isset() // 当对不可访问属性调用isset()或empty()时调用__set() // 设置一个类的成员变量时调用__unset() // 当对不可访问属性调用unset()时被调用__sleep() // 执行serialize()时 ...
Python原型链污染
Python原型链污染简介这一期主要是自己在打DASCTF2023七月暑期挑战赛遗憾爆0之后,在复现的时候想搞清楚这一类的攻击方式及解题技巧 类似于Javascript中的原型链污染一样,这种攻击方式可以在Python中实现对类属性值的污染。需要注意的是,由于Python中的安全设定和部分特殊实行类型限定,并不是所有的属性都是可以被污染的,不过可以肯定,污染只对类属性起作用,对于类方法是无效的。 不过由于Python中变量空间的设置,实际上还能做到全局变量中的属性实现污染。 那就索性把Javascript的原型链污染也一块说了好了,免得再出一期Javascript的原型链污染,主要是懒(bushi 那就先来说一下原型链污染是什么 原型链污染一般的原型链污染我们通常指的是针对于Javascript运行时的注入攻击。通过原型链污染,攻击者可能控制对象属性的默认值。这允许攻击者篡改应用程序的逻辑,还可能导致拒绝服务,或者在极端情况下,远程执行代码。 比较出名的一个原型链污染漏洞,是在2019年初,在Snyk的安全研究人员透露出流行的JavaScript库—Lodash的严重的漏洞,这允许黑客 ...
Docker命令
Docker命令底层原理在说Docker命令前先简要说一下它的原理 Docker是怎么工作的?Docker是一个Client-Server结构的系统,Docker的守护进行运行在主机上。通过Socket从客户端访问。 DockerServer接收到Docker-Client的指令,就会执行这个命令 Docker为什么比VM快 Docker有着比虚拟机更少的抽象层 Docker利用的是宿主机的内核,vm需要的是Guest OS 新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机是加载Guest OS,分钟级别的,而docker是利用宿主机的操作系统,省略了这个复杂的过程,秒级。 帮助命令123docker version # 显示docker版本信息docker info # 显示docker系统信息,包括镜像和容器的数量docker <命令> --help # 帮助命令 帮助文档地址:Reference documentation | Docker Documentation 镜像命令docker ...
CVE-2023-33246复现
CVE-2023-33246复现Apache RocketMQ 远程命令执行漏洞 影响范围 Apache RocketMQ <= 5.1.0 Apache RocketMQ <= 4.9.5 靶场搭建 靶场环境安装 12docker pull apache/rocketmq:4.9.1docker pull apacherocketmq/rocketmq-console:2.0.0 启动namesrv 1docker run -dit -p 9876:9876 -p 10909:10909 --name mqsrv -e "MAX_POSSIBLE_HEAP=100000000" apache/rocketmq:4.9.1 sh mqnamesrv /bin/bash 启动broker 1docker run -dit -p 10908:10908 -p 10911:10911 --name mqbroker --restart=always --link mqsrv:namesrv -e "NAMESRV_ADDR=namesrv: ...
Docker启程
Docker启程什么是dockerdocker是一种类似于虚拟机,但较虚拟机更为轻量,不回去模拟低层硬件,只会为每一个应用提供完全隔离的运行环境,,可以在环境中配置不同的工具软件,不同环境之间相互不影响。这个环境,在docker中也被称为容器(container)。 Image(镜像)课理解为一个虚拟机的快照,里面包含要部署的应用程序以及它所关联的所有库、软件,通过镜像,我们可以创建许多个不同的Container。 DockerfileDockerfile就像是一个自动化脚本,它主要被用来创建镜像。 Container(容器)这里的容器就像一台台运行起来的虚拟机,里面运行了应用程序,每个容器独立运行,相互不影响。 Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建 可以把容器理解为一个简易的linux系统 repository(仓库)仓库就是存放镜像的地方,仓库分为共有仓库和私有仓库 Docker Hub(默认是国外的) Docker为何而出现环境配置麻烦,每一个机器都要部署环境,比较费时费力。之前自己在虚拟机上搭lnmp环境,搭了一整个下午全是问题,然后用docke ...
SQL注入详解
SQL注入这一期其实也是因为自己之前打ctf的SQL注入这类题目的时候经常不知道从哪开始,一直感觉它烦,现在逼自己一把给他弄清楚 这部分也可以看看探姬师傅他们整理的文档,因为本文也是在这基础上加了些补充。 https://github.com/ProbiusOfficial/CTF-QuickStart/blob/main/doc/Web/SQL%E6%B3%A8%E5%85%A5%E5%85%A5%E9%97%A8.md SQL注入是一种常见的Web安全漏洞,形成的主要原因是Web应用程序在接受相关数据参数时为做好过滤,将其直接带入到数据库中查询,导致攻击者可以拼接执行构造的SQL语句。那什么是SQL? 结构化查询语言(Structured Query Language,SQL)是一种关系型数据库查询的标准编程语言,用于存取数据以及查询、更新、删除和管理关系型数据库(SQL是一种数据库查询语言) 注入产生的原因是后台服务器在接收相关参数时未做好过滤直接带入到数据库中查询,导致可以拼接执行SQL语句 这部分在学习的时候,建议自己整一个在本地的sql服务器,不管是mysql还是sql ...