Robin

LiuGuobin's blog

博客迁移记录
  1. 迁移原本的整个blog文件夹
  2. 在新电脑的bolg目录安装git、node.js、npm、hexo环境
  3. 在windows终端生成密钥
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱@qq.com"
ssh-keygen -t rsa -C "你的邮箱@qq.com"
  1. github个人主页设置的 SSH and GPG keys 中新建 SSH key
  2. 在blog目录中打开git bash执行下面命令
npm install hexo-cli -g
npm install hexo-deployer-git --save
阅读全文 »

ISCC_2024题解及思路

前言

因为这段时间面试了几次,也看了很多别人的面试总结,所以抽个时间总结一下自己面试的内容。

sql注入常见函数


#MySQL数据库版本
version()

#数据库安装路径
@@basedir

#数据库文件存放路径
@@datadir

#操作系统版本
@@version_compile_os

#拼接字符串,显示内容
函数concat()、concat_ws()、group_concat()

#截取字符串
substr()、substring()、mid()

sqlmap常见参数

阅读全文 »

分析一下内存马

内存webshell原理

  其原理是先由客户端发起一个web请求,中间件的各个独立的组件如Listener、Filter、Servlet等组件会在请求过程中做监听、判断、过滤等操作,内存马利用请求过程在内存中修改已有的组件或者动态注册一个新的组件,插入恶意的shellcode达到持久化的控制服务器。

PHP内存马

原理
阅读全文 »

Shiro550和721的原理区别

Shiro550

  Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。
在服务端对rememberMe的cookie值,先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。
  Payload产生的过程:
命令 => 序列化 => AES加密 => base64编码 => RememberMe Cookie值
  反序列化过程:
  获取rememberMe cookie ->base64 解码->AES解密(加密密钥硬编码)->反序列化(未作过滤处理)
  AES加密的密钥Key被硬编码(密钥初始就被定义好不能动态改变的)在代码里,这就意味着每个人通过源代码都能拿到AES加密的密钥
利用条件:知道aes加密的key且目标服务器含有可利用的攻击链。

Shiro721

  由于Apache Shiro cookie中通过 AES-128-CBC 模式加密的rememberMe字段存在问题,用户可通过Padding Oracle 加密生成的攻击代码来构造恶意的rememberMe字段,并重新请求网站,进行反序列化攻击,最终导致任意代码执行。
  利用条件:
知道已经登陆用户的合法cookie且目标服务器含有可利用的攻击链就可以进行漏洞利用。

阅读全文 »

Shell工具的流量特征

冰蝎2.0

  使用AES加密 + base64编码,AES使用动态密钥对通信进行加密,进行请求时内置了十几个User-Agent头,每次请求时会随机选择其中的一个。
  因此当发现一个ip的请求头中的user-agent在频繁变换,就可能是冰蝎。
  Content-Length: 16, 16就是冰蝎2连接的特征

冰蝎3.0

  取消了2.0的动态获取密钥,使用固定的连接密钥
  在冰蝎中,任何请求,最终都会调用Utils.getData函数,对请求的参数加密。对于上传文件,命令执行来讲,加密的参数不定长。但是对于密钥交互,获取基本信息来讲,payload都为定长,且无随机padding。
  webshell连接密码的MD5的前16位,默认连接密码是”rebeyond“(即密钥是md5('rebeyond')[0:16]=e45e329feb5d925b)
  3.0连接jsp的webshell的请求数据包中的content-type字段常见为application/octet-stream

阅读全文 »

SQLMAP os-shell原理

  当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。
  在mysql、PostgreSQL,sqlmap上传一个二进制库,包含用户自定义的函数,sys_exec()sys_eval()。那么他创建的这两个函数可以执行系统命令。
  在Microsoft SQL Server,sqlmap将会使用
xp_cmdshell
存储过程,如果被禁(在Microsoft SQL Server 2005及以上版本默认禁制),sqlmap会重新启用它,如果不存在,会自动创建
  必要条件:

  • 拥有网站的写入权限
  • Secure_file_priv参数为空或者为指定路径。
  • 普通注入–os-shell主要是通过上传一个sqlmap的马,然后通过马来进行命令执行。

SQL绕过waf

1. 大小写

阅读全文 »

泛型

泛型概念

  泛型的本质就是“数据类型的参数化”处理的数据类型不是固定的,而是可以作为参数传入,在调用泛型时必须传入实际类型。

  1. 把类型当作是参数一样传递
  2. <数据类型>只能是引用类型
  3. 泛型只在编译阶段有效,编译后生成的字节码 class 文件不包含泛型中的类型信息(类型参数在编译后会被替换成 object,运行时虚拟机并不知道泛型。)

泛型定义

阅读全文 »

序列化与反序列化概念

  Java序列化是指把Java对象转换为字节序列的过程;
  Java反序列化是指把字节序列恢复为Java对象的过程;

  Java的序列化技术就是把对象转换成一串由二进制字节组成的数组,然后将这二进制数据保存在磁盘或传输网络。
  而后需要用到这对象时,磁盘或者网络接收者可以通过反序列化得到此对象,达到对象持久化的目的。
反序列化条件:

  • 该类必须实现 java.io.Serializable 对象
  • 该类的所有属性必须是可序列化的。如果有一个属性不是可序列化的,则该属性必须注明是短暂的(注明是瞬态的,使用transient
    序列化过程:
  • 序列化:将 OutputStream 封装在 ObjectOutputStream 内,然后调用 writeObject 即可
  • 反序列化:将 InputStream 封装在 ObjectInputStream 内,然后调用 readObject 即可

序列化与反序列化操作

阅读全文 »

注解

Java注解概述

注解也叫元数据。一种代码级别的说明。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明注释。

注解分类

  • 标记注解: 没有参数的注解,仅用自身的存在与否为程序提供信息,如@Override注解,该注解没有参数,用于表示当前方法为重写方法。
  • 单值注解: 只有一个参数的注解,如果该参数的名字为value,那么可以省略参数名,如 @SuppressWarnings(value = "all"),可以简写为@SuppressWarnings("all")
  • 完整注解: 有多个参数的注解。
  • 自定义注解:使用反射机制解析注解
阅读全文 »

Java IO一览表

同步|异步|阻塞|非阻塞

同步

  指的是协同步调。既然叫协同,所以至少要有2个以上的事物存在。协同的结果就是:多个事物不能同时进行,必须一个一个的来,上一个事物结束后,下一个事物才开始。

阅读全文 »

前言

  这篇文章我觉得我对于网络基础部分就不用再说更多了,直接一张图就够。剩下的用代码和注释来说明,看懂就是学会。

单播通信

TCP通信

服务端

阅读全文 »