- 博客(41)
- 收藏
- 关注
原创 [深育杯 2021]find_flag wp(绕过PIE和canary 格式化字符串 栈溢出 )
直接跳到格式化字符串漏洞处,然后查看栈结构,rbp上下分别是canary和返回地址。所以我们要输入0x40-0x8来把v2到canary填充完,然后再原封不动的输入canary,然后再输入0x8个a填充rbp指针,然后再输入后门函数地址覆盖返回地址。所以我们栈的第一个位置其实是rdi,所以canary和return的位置分别为17和19,我们输入。开了canary保护,栈溢出时,要还原canary,开了PIE,地址会改变。有了返回地址,我们减去偏移就能得到程序基地址,返回地址偏移为0x146F。
2023-06-28 21:06:32 668
原创 pwn3-绕过防御-ROP(1)
*ROP:**全程Return Oriented Programming(面向返回的编程),在栈溢出基础上,利用程序中已有的小片段(gadgets),改变寄存器或变量的值,从而控制程序执行流程,从而绕过NX防御,常见有ret2text,ret2syscall,ret2libc(最常用)…**gadgets:**以ret结尾的指令序列,通过这些序列可以修改某些地址的内容。ROP攻击满足的条件:1.存在溢出,且可以控制返回地址2.满足条件的gadgets。
2023-06-08 21:44:14 840
原创 pwn(2)-栈溢出下
只要我们通过特定的汇编代码把特定的寄存器设定为特定的值后,在调用int 80h执行sys_execve(“/bin/sh”,NULL,NULL)就可以获得shell了;64位程序传递参数不是直接通过栈,而是前六个参数通过寄存器,分别是RDI,RSI,RDX,RCX,R8,R9。不同内核态操作通过给寄存器设置不同的值,在调用指令int 80h,就可以通知内核完成不同的功能。2.ebx设为"/bin/sh"字符串的地址。2.RDI设为"/bin/sh"字符串的地址,RDI=&(“/bin/sh”)
2023-06-08 14:45:22 1437
原创 pwn(1)-栈溢出(上)
0x7fffffffcb18和0x7ffffffffcb28中,再后面就是函数返回地址了。gets函数可以无限写入,把前面注满,就到了存储返回地址的地址,就可以改变返回地址。gdb调试到push操作esp会减少4,ebp不变,只改变栈顶。后面的3131就是输入1的填充结果,如果我们把这个地址填充成。栈的高地址在下低地址在上,先进入的数据压入栈底。要想修改返回地址,就要知道要溢出多少个字节。可以看到,他会提示你该返回地址不存在。我们把它输入到程序,可以看到地址被修改。运行到ret后,返回会main函数,
2023-06-08 14:42:33 795
原创 pwn入门(0.0)
程序执行要确定下一条指令的地址,就是PC,寄存器位EIP即指针寄存器。xor:异或,可以避免坏字节/x00的出现;每个函数都有属于自己的栈帧,如何保证函数栈帧正确,通过esp和ebp。为定义变量扩展空间,定义一个char a[10],就把栈顶指针向上抬。and/or/not/neg:与/或/逻辑非(反码)/非(补码)mil/imul:无符号整数乘法/有符号整数乘法。div/idiv:无符号整数除法/有符号整数除法。push:操作数压入栈顶,栈顶指针减小。代码区,数据区,堆区,栈区。
2023-06-08 14:37:33 562
原创 NSSCTF [suctf 2019]hardcpp WP 控制流混淆
32位,盲猜md5加密,去进行解密,得到符号#,说明第一个字符是#,即知道了s[v19-1],v19=1;.又知道了v18即enc,我们就可以求出第二位,同理得到所有,脚本如下。所以v20本来应该为1,其实为21,不过v20的作用不大。这里是个混淆,无论if跳不跳转,v20都等于s长度,注意s前面加了地址符&,然后再与enc[v19 - 1]比较,然后v19加1。六个大爹干完了,然后再对逻辑进行分析,就是一直变换,就是解方程。然后输入字符串,其中第一个值给s,然后再给v24。就是返回v5低位,就是a2。
2023-05-08 23:15:43 556
原创 GDOUCTF L!s! WP
首先是道二进制文件差异的题目工具下载后将.dll文件复制到plugins文件夹题目的意思是让你找出差异在哪里然后根据这段差异的代码,求出flag.随便打开一个二进制文件,然后关掉保存.i64文件,再打开另外一个文件,ctrl+6打开bindiff插件,选择刚才保存的.i64文件最下面的就是差异最大的地方。分别查看两个文件的这个函数然后就是多了个这一段给出了lmao,然后赋值给V8,再对V7进行异或,这里不知道V7的值,只能爆破,但是提示了V7的类型是BYTE类型。
2023-05-08 17:44:36 140
原创 GDOUCTD NSSCTF2023广东海洋大学比赛WP RE(上) Tea Check_Your_Luck
下载文件是cpp是个解方程的题,用python的z3。
2023-04-18 19:59:14 767
原创 x86汇编
AX累加,算术运算或函数返回值存储基址寄存器(BX),指向数据的指针计数寄存器CX,移位,循环,一些量数据寄存器DX,运算超过16位,高16位放在DX堆栈指针寄存器SP,用于指向栈顶栈基址指针寄存器BP,指向堆栈底部源变址寄存器SI,指向流操作的源的一个指针目标索引寄存器DI,流操作指向目标的指针。
2023-04-15 09:53:07 223
原创 ctfshow 1024杯 抽象的代码WP(梅森素数)
分析函数逻辑,函数x判断是否为素数,若是素数就和c的元素进行异或,但是判断是否为素数的时候,是对2的n次幂进行判断而列表c的长度为29,就是说要判断2**29次幂是否为素数,学过c语言的都知道,数太大了,需要很长很长时间才能循环判断完毕,有两种解决办法,一种就是生成素数表,另外一种方法就是梅森素数。我们知道与c元素异或的在z(K)一定为素数,由梅森素数数可知这个k也一定为素数,我们直接给出梅森素数的k就行了。梅森素数(2k−1)的梅森指数(k 值)必定也是素数。
2023-04-06 19:46:42 114
原创 三个小时手搓字节码(CTFshow 1024杯 抽象的代码)
题目就是python的字节码,其中python内置模块dis可以查看代码对应的字节码。
2023-04-06 19:12:12 94
原创 月饼杯re3_若无月
感觉MSG==1比较有可能,但是问题来了,打开窗口程序是一个全屏的,而且进行任何操作都会触发关闭窗口的指令,我们就要对程序作出修改,首先改掉全屏大小。多么经典的窗口程序的反汇编代码,跟上次华科大比赛的flag自动机简直一模一样,于是我就想想上次一样,通过想窗口发送消息让窗口把flag给我们。在FindCrypto插件里面找到了base64密码表,然后查看引用,发现了是RC4,利用加密后的数字作为base表的索引,然后返回。然后还是我太天真了,直接卡死程序,然后就只能分析窗口处理程序了。
2023-03-21 22:58:26 144 1
原创 月饼杯re2_归心(java反汇编的新知识)
python打包成exe非常常见,然后题目提示让我们猜猜这是什么语言打包成的exe,首先排除python,其次排除C语言(c语言包非常常见),然后我排除了Java,因为Java不像python有打包库,以及C语言的gcc XXX;既然猜不出来那就硬看呗。然后有flag,但是往下继续想,可不可以把ida Strings窗口里面关于JAVA的字符全部屏蔽,然后就是直接进行一个反汇编,然后通过这个反汇编代码,找到Hint这是个JAVA打包的exe程序,然后再对class文件进行分析,这难度就一下子上来了。
2023-03-20 18:45:17 148
原创 月饼杯re1 西北望乡
直接主函数打开,让你输入一个flag,然后对flag进行处理,上面说了flag是45个字符然后全为小写,但是,falg其实有数字。好好数一数多少位,45位,但是dog出题人又在程序里写了句莫名其妙的话。然后发现最后五个爆破不出来,tnnd爆破不出来就对了因为最后五位是。有数字,需要另外爆破,我们知道了最后一位是“}”,就只需要爆破四位。每次循环乘的系数都一样,我们知道了处理后的结果以及前五位。分析k和m循环发现flag每五个字符一处理。,可以先爆破三个系数然后每5个一爆破。然后flag就出来了。
2023-03-19 16:53:30 94
原创 进程重影!!!
正常的删除文件操作,在删除已经被映射到内存的文件时,windows会报错阻止删除。也就是是我们要先删除文件再映射到内存,但是文件都已经被删除了怎么映射呢?首先了解进程创建过程但是,PsSetCreateProcessNotifyRoutineEx并不是在创建进程的瞬间就完成的。在执行这一段代码时不会被调用而是执行了下面代码才会调用这里就出现了时间差,可以在PsSetCreateProcessNotifyRoutineEx之前对文件进行修改,删除,伪装成普通文件。然后来解决开头的问题解决方法是。
2023-03-19 16:39:57 238 1
原创 BJDCTF2020 Easy WP
ida动调发现程序设计的就是不执行这段函数,我们可以通过修改EIP的值来使ida执行这段函数。双击EIP将地址改为que函数的地址401520。然后一个一个函数的找,找到了个输出符号的函数。对处理后的数据进行判断然后输出字符*得到flag{HACKIT4FUN}ida打开,让我找flag。首先再main函数下个断点。
2023-03-17 18:08:41 117
原创 BUUCTF CrackRTFWP
这个往文件里写东西,你写的东西决定了这个文件是什么属性的,第二个参数lpBuffer就是要往文件里写的内容,包括文件的文件头,所以我们的rft文件头就是经过异或加密的资源内容,那么我们让rft文件头的前六位与查找资源的前六位再次异或不就可以得到了18位字符串的前六位。知加密标志是0x8003,MD5加密,前六位的加密的字符有十八位,前六位是我们手动输入进去的,既然是输入的肯定是可显示字符,ASCII的范围是32~126,于是,我开始尝试爆破。前六位出来了,所以我们第一次输入123321,第二次输入~!
2023-03-10 18:41:34 70
原创 如何利用python把16进制的低位和高位拼接起来
在REVERSR中会有加密操作,分别给一个16进制的高位和低位赋值,例如。现在我们假设高位赋值变量为hi,低位赋值变量为lo,python代码如下。把v6高位赋值位v0,低位赋值为v4[2*i-1]
2023-02-24 13:59:06 1493
原创 ctfshow BJDCTF2020 encode wp
进入sub_8048AC2,base加密的代码看多了一眼就认出了这是base加密,蓝色的a0123456789Abcd就是密码表双击进入得到密码表。不知为何我的ida插件Findcrypto识别不出来Base和RC4加密。v5[18]是加密数据,v4是长度,v5是密钥,v3是v5长度。再进入sub_8048E24,是一个rc4加密。密钥v5=Flag{This_a_Flag}根据代码推测函数,鼠标放到函数上N键重命名。然后再base解密得到falg。可知RC4加密后的字符串为。得到了异或后的v5[18]
2023-02-17 18:06:09 335
原创 BUUCTF Youngter-drive
如果是小写字母执行else的操作把该字母替换为off中的字母,小写字母替换的范围是122-96=26,97-96=1,所以flag中的小写字母可以替换为off[1]-off[26],易知。分析替换函数,是从后flag[29]开始替换,然后flag[28]不替换,然后falg[27]替换,说明索引为奇数替换,索引为偶数不替换(索引从0开始)其中dword是29,先把flag和29传入一个函数,然后dword自减1,然后再冻结该线程,去执行第二个线程,就是sub_41119F.栈空间大小,0则为1MB。
2023-02-10 16:24:39 127
原创 【无标题】
然后我们就在bin这个文件夹里右键用终端(cmd)(powershell)打开,使用指令。写完代码会有这几个文件,我们把main.c的文件复制到codeblock路径下的。然后就在bin文件夹里出现了main.exe的文件。
2023-01-03 22:29:55 44
原创 Hackergame 2022 Flag自动机
这里开始给窗口类的属性赋值,其中第一个是窗口类的名称,第二个是给窗口句柄赋值,第三个是背景样式可以忽略,第四个是窗口的处理过程,第五个是光标的位置,不用管。这里是注册一个窗口然后给CreatWindowExW用,由后面的参数可知,所使用的窗口类的名称是“WndClass.lpszClassName”,即。改变窗口的消息队列首先要有窗口,所以第一个参数是窗口的句柄,就是窗口的身份证,后三个就是要改变的参数了,我们要获得这个窗口的句柄。第一个是你要获取句柄的窗口的窗口类的名称,第二个是窗口名称。
2023-01-03 20:49:33 182
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人