pwn探索--大杂烩
pwn的核心:二进制漏洞的利用和挖掘研究层次:编译成机器码的二进制程序的漏洞二进制程序实际为可执行文件linux系统下ELF=windows系统下EXE文件一次简单的hack
CTF中pwn攻击脚本思路:
1.pwn程序/服务器(必不可少滴)开端——>from pwn import*2.使用python中pwn tools用remote函数打开远端需要攻击的服务器端口3.进行链接4.构造恶意数据5.发送恶意数据6.使用交互函数(io.interactive())获取flag
程序的编译与链接
linux借助文件头进行识别!(用vim打开可查看源码–>%!xxd可查看十六进制表示)
编译过程ls指list file即列出文件;可用ll查看文件详细内容。gcc兼具编译器和汇编器的功能。ctrl+alt+t 启动shell
Linux环境下执行可执行文件!xdd%-r 还原文件rm a.out 删除./a.out 是linux/unix环境下gcc编译源代码(c/c++)并连来接产生的默认执行文件名。./a.out ...
The Missing Semester of Your CS Education
The Missing Semester of Your CS EducationFirst Course Overview The Shell命令行语句
pwd(process[print] working directory)
输出当前位置
cd .
到当前目录
cd ..
上一级目录
cd /cd ~
回到根目录
cd -
回到跳转前的目录(可在两个目录之间切换)
ls -l
列出当前目录下子文件的详细信息
ls -a
列出所有文件包含隐藏文件
* ?
代替一个字符串 一个字符
mv A B
重命名并可以移动文件
cp A B
复制并可以移动文件
control L
清除终端
cat
打印文件内容到终端上
touch
建立新文件
>>
不覆盖而是叠加
A | B
A的输出作为B的输入
grep A B
在A里查找B
man,rm,mkdir,rmdir
> /
覆盖
rm用于无递归删除 -r 递归删除 rmdir仅允许删除空目录
mkdir 创建目录 ...
Docker部署小记
上次出题还是上次,好多指令已经记不清了.暂时写在这里,给自己也给以后的你们查阅.
有用的工具如果你去喜欢的浏览器搜索,不难发现xinetd确实很实用.(笑)
1git clone https://github.com/Eadom/ctf_xinetd.git
安装之后发现长这样
手搓docker-compose.yml(不会也可以找人机hh).
123456789101112version: '3' services: pwn: build: ./ image: pwn #这里的image写自己创建的镜像名 ports: - "60001:9999" pids_limit: 1024 # cpus: 0.5 restart: unless-stopped # privileged: true
ctf.xinetd文件
1234567891011121314151617181920service ctf{ ...
2024CUDSEC新生赛
CUDSEC——第七届”玄武杯”Pwn方向WPsign签到题没什么好说的 flag写在程序里 拖进IDA秒.
easy_shell算加强版签到了 运行程序看到
提示给了shell 那是提供了后门的(进IDA分析也能看到)直接
1ls 1>&0
打远程加上flag查看就好了.
1cat flag 1>&0
如果说为什么出这个感觉不沾边 问就是之前给新同学们布置过相关学习任务 考察一下(欢迎非预期的佬们交流~
only_chance这题有学弟卡在第二次地址接收 其实主要还是栈的工作原理理解的不是特别透彻(反思ing
运行其实就有提示没有后门怎么搞 八成要自己构造shellcode多打几次IDA分析发现gets s的大小是280 这里就可以利用栈溢出重定向到main进行第二次程序运行执行shellcode使用NOP sled确保在返回到 shellcode 时,即使位置偏移,程序也会“滑行”到有效的指令区域(2048也111)
exp
12345678910111213141516171819202122232425262728293031323334fro ...
FightPart项目疑问记录
需求分析
用户自定义添加标签,标签的分类(类型,怎么分类)比如Java/C++/网络安全,工作/大学
主动搜索,允许用户根据标签去搜索其他用户
组队
创建队伍
加入队伍
根据标签查询队伍
邀请其他人
退出队伍
允许用户修改标签
推荐
相似度计算算法+本地分布式计算
后端技术栈
Java+SpringBoot框架
SpringMVC+MyBatis+MyBatisPlus(提高开发效率)
MySQL数据库
Redis缓存
Swagger+Knife4j接口文档
数据库表设计标签的分类(有哪些、怎么分)不建议使用boolean定义,不灵活
新增标签表(分类表)建议用标签,不使用分类,更灵活.性别:男、女学习方向:Java、C++、Go、前端、网络安全目标:考研、考公、春招、社招、竞赛、转行、跳槽段位:身份:状态:着重自定义|
表设计
id int 主键、
标签名 varchar 非空(必须唯一,唯一索引)
上传标签的用户 userld int(如果要根据 userld 查已上传标签的话,最好加上,普通索引)
父标签 id ,parentld,int ...
HomeGal项目疑问记录
UserCenter 项目疑问记录如何进行企业级开发?其实不管做什么都需要事先做好规划.项目要实现的功能是什么,要怎么实现,做一个具体规划(预估时间),先完成框架搭建再去细化.
项目完整开发流程
需求分析
设计(概要设计、详细设计)
技术选型(前端/后端)
初始化(前端/后端),引入需要的技术
搭建框架(Demo)【引入框架后可依据需求瘦身】
实现业务逻辑
测试(单元测试)
代码提交/代码评审
部署
发布
Tips
框架瘦身阶段,每次删除一个文件都要重启项目是否能运行.
多查看官方文档.
养成好习惯,数据库相关操作语句做好本地或云端备份.
需要掌握的基本知识
controller:只需接收请求,不做任何业务处理.倾向对请求参数本身的校验,较少涉及业务逻辑校验.service: 业务逻辑处理(校验)有可能被contoller之外的类调用mapper(dao):数据访问层model:数据封装类utils:工具类(比如加密,日期转换,日期转换)Lombook:帮助生成小的Java类实体对象
Spring Boot框架整合
创建数据库
建表
引入需要的 ...
yubのAlgorithm.0x20.
分割回文串link:131. 分割回文串 - 力扣(LeetCode)
思路分析主题思想是和之前做的组合II相同的,问题的关键难点就是在怎么处理切割上.首先递归参数传入startIndex是表示下一轮递归遍历起始位置,那么startIndx就是作为我们的切割线一角色.再看回文子串如何判断?采用双指针法,一个在头一个在尾前后指针指向位置的元素相等就是回文串了.
1234567891011121314151617181920212223242526272829303132333435class Solution { List<List<String>> res = new ArrayList<>(); Deque<String> deque = new LinkedList<>(); public List<List<String>> partition(String s) { backtracking(s,0); return res; ...
yubのAlgorithm.0x19.
组合总和link:39. 组合总和 - 力扣(LeetCode)
思路分析其实思路和昨天的很像,但是元素可以复用而且也不是字符串.那还是依旧使用path进行记录,res进行返回结果,sum进行统计最后再加上一个标记位置进行判断即可.
1234567891011121314151617181920212223242526class Solution { List<Integer> path = new LinkedList<>(); List<List<Integer>> res = new ArrayList<>(); public List<List<Integer>> combinationSum(int[] candidates, int target) { int startIndex = 0; backstracking(candidates, target, sum, startIndex); return re ...
yubのAlgorithm.0x18
组合总和IIIlink:216. 组合总和 III - 力扣(LeetCode)
思路分析既然是要比对,那自然需要和目标值比对的sum,同时要记录path.这么一想其实和我们之前分析的组合问题就非常相似了.注意一下题目中给定的判定逻辑限制(数字1-9且不能重复)很完美的组合问题.天生的回溯搭子.
1234567891011121314151617181920212223242526272829303132333435class Solution { //记录路径 List<Integer> path = new LinkedList<>(); //记录结果 List<List<Integer>> result = new ArrayList<>(); public List<List<Integer>> combinationSum3(int k, int n) { backtracking(n,k,1,0); return ...
yubのAlgorithm.0x17
初探回溯什么是回溯算法回溯算法是一种暴力穷举的搜索方式.回溯和递归是相辅相承的**.(有递归就会有回溯)**
回溯法解决的问题
组合问题:N个数里面按一定规则找出k个数的集合.
切割问题:一个字符串按一定规则有几种切割方式.
子集问题:一个N个数的集合里有多少符合条件的子集.
排列问题:N个数按一定规则全排列,有几种排列方式.
棋盘问题:N皇后,解数独等.
使用回溯算法解决问题的思路虽然回溯算法暴力效率低下理解起来更为抽象,但好在天无绝人之路,回溯算法的问题都可以用树形结构来进行理解.
关键有以下两点:1.集合大小->树的宽度2.递归深度->树的深度
123456789101112void backtracking(参数) { if (终止条件) { 存放结果; return; } for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) { 处理节点; backtracking(路径,选择列表); // 递归 回溯,撤销处理结果 ...