- 博客(20)
- 收藏
- 关注
原创 2025hgame pwn全解
这里我们先把tcache塞满,之后能得到进入unsortdbin堆块,控制好堆布局,将下一个堆块的pr_size和pr_inuse位修改,释放触发堆块合并,之后将第一个堆块申请出来,libc地址就会进入第二个堆块中,这个堆块还没有释放,泄露得到libc。其次是泄露libc地址,释放大于0x88的堆块,先将tcachebin添慢,中间0x30的堆块如果满的话没办法free,我们可以申请0x20的堆块再次释放,就可以拿到libc地址。同时给出gift,可以任意地址free,触发条件是malloc(0)
2025-02-20 19:57:07
1078
原创 记一次linux下syslog日志文件暴涨
想要记录的时候已经解决好了,所以没办法截图,我的问题主要是syslog文件暴涨要及时解决,后续磁盘爆的话虚拟机就不好修了,不过也不是没办法,参考这里给出一些基础的命令,查询和删除日志文件。
2025-01-21 16:31:53
933
1
原创 国城杯pwn
存在属于数组越界,可以输入负数,got表可打,先修改exit为main,后续计算偏移泄露libc地址,最后攻击printf的为system,返回后门获取shell。可见字符shellcode,并且开启沙盒,用openat+sendlife的shellcode,并用ae64转为可见字符。格式化字符串漏洞,线程题,并且给出libc地址,后续栈溢出直接打system的rop链。2.23,uaf+堆溢出,攻击malloc_hook。
2024-12-11 08:19:11
237
原创 2024蜀道山高校联合公益赛
大致是说,当我们从small bin拿出来chunk的时候,程序会检查当前small bin链上是否还有剩余堆块,如果有的话并且tcache bin的链上还有空余位置(前提是不能为空,不然即使有空余也不行),就会把剩下的堆块链进tcachebin里面,但是链进去的时候没有进行链表的检查,所以我们可以在这个时候攻击这个即将链进tcachebin的堆块的bk指针,就可以达到任意地址写一个main_arena的效果。只有add,free两个功能,add大小,free存在uaf,给出堆块地址,有后门地址。
2024-12-05 19:14:52
936
原创 2024金盾线上pwn全解
但会将读入字节最后一位填上\x00,这样show的时候会直接截断,但这道题got表可打,并且没开pie保护,选择of by null攻击造成uaf,攻击heap_list,之后利用heap_list攻击got表,先泄露出libc_base后攻击atoi为system,读入$0获取shell。将0号堆块申请出去,这时候libc地址就会进入1号堆块,但1号堆块没有被free,直接show,就可以得到libc地址。给出一个栈地址,可以溢出0x10个字节,正好打栈迁移,去执行system(/bin/sh)
2024-12-05 19:10:52
456
原创 堆利用(uaf)
use after free,释放后使用UAF漏洞全称为use after free ,即利用已经被free掉的堆块被再次利用,该漏洞的存在是因为程序编写者在free堆块部分没有将该堆块的fd指针改为0,进而导致该堆块可以被申请回来,那么被free的堆块有下面三种情况:1. 堆块free后,其对应指针被设置为NULL,即再次被调用该堆块时就会发生错误;2.堆块free后,对应指针没有被设置为NULL,即还可以调用会该堆块,当我们申请一个比该堆块小于等于的size时。
2024-03-08 20:44:25
1751
1
原创 爆破canary+pie
canary,pie保护前面我都有说到,主要是利用格式化字符串漏洞去泄露canary或绕过pie,但如果没有格式化字符串漏洞,我们应该怎么去绕过canary和pie呢?通过以上内容我们可知,前边的数是相同的,我们又知道后三位是确定的,准确来说是只差半个字节4位,只要我们得到这半个字节,就可以利用IDA中的地址。read存在栈溢出,并且具有后门,这道题的思路就很明确了,爆破出来canary和后门地址,直接用栈溢出来做。博主也通过以上文章进行的学习,接下来详细讲一下canary,pie的爆破原理。
2024-03-02 17:09:38
1647
原创 沙盒中栈迁移的利用
主函数没什么,但栈溢出只能溢出0x10个字节,这里我们就非常熟悉了,我在之前的文章也讲到过,0x10个字节正好覆盖rbp和返回地址,直接用栈迁移,但我们按照正常思路进行到最后也只能在bss段读入0x50个字节,这里就需要简绍一下一种新的利用方式,我们之前的利用read控制的很少,但我们只要有pop_rdi,pop_rsi,pop_rdx就可以去控制read函数读入的位置和大小。在hame week1中第一次遇到沙盒中利用栈迁移,这两天做题也遇到了类似的,题很简单,主要通过两道例题来讲一下具体的做法。
2024-02-25 17:56:29
981
1
原创 非栈上格式化字符串漏洞
如图,红色框为a-b-c,我们可以利用格式化字符串漏洞更改c为蓝色框的第一个地址,这样我们就得到a-b-c-d,有这个我们一定可以找到b-c-d,这样我们就可以把d改成one_gadget的地址,d正好是main函数的返回地址,我们一般修改的也是这个。但这样实际是行不通的,通过调试我们可以看到三次更改的都是尾字节,为什么呢,原因就在于非栈上,每一次更改都要有对应的返回地址,这是第一次的,第二次要修改的是中间两字节,在原本基础上+2就可以了,第三次原理相似(想学堆上的可以自己去搜索,我目前也没学到。
2024-02-21 21:22:58
1192
原创 手动构造格式化字符串payload
pay=(b'%'+str(要改成的数).encode()+b'c%13(要改的栈地址的偏移)$hn').ljust(0x28,b'\x00')+p64(stack)#stack是要修改的栈地址。,明显存在格式化字符串漏洞,我们首先想到用格式化字符串漏洞去泄露函数地址利用libc,之后多次利用格式化字符串漏洞去更改地址为one_gadget。一般可修改的返回地址:printf的返回地址,fmt的返回地址,main函数的返回地址(libc_start_main),但当溢出字节不够时,或者p,s被禁用(
2024-02-21 20:04:45
1471
原创 Hgame2024week1:pwn wp
通过题目就可以看出来这是一道随机数的题,并且第一次read可以覆盖种子,覆盖了种子我们就知道随机数是怎样生成的了,一般我们直接覆盖成0。我们需要进入到这个函数让后去输入特定的shellcode,因为过滤了一些字符,这里有一个新的知识点,//gcc 1.c -o 1 ###终端名称生成1程序,运行1得到我们要的数组。主函数也没什么,这个可以结合调试去看,会让我们输入一个数字。随机数绕过后就进入myread函数,没有后门直接libc。vuln函数有栈溢出,但溢出字节不够需要用到栈迁移。
2024-02-18 14:47:05
1002
原创 ret2dlresolve,ret2srop
那么如果我们可以控制相应的参数及其对应地址的内容是不是就可以控制解析的函数了呢?没有一个函数,也不是我们经常利用的read,write函数,这里只有一次发送机会,但我们要发送两次,第一次先将返回地址再改成vuln函数,第二次发送我们的rop链。主要是2,这个过程会rt_sigreturn函数进行还原,而且是根据栈中内容去还原,之后我们可以利用工具去伪造我们想要rop链。一般,我们也称其为软中断信号,或者软中断。首先,32位的 标志特别突出,只有read函数能栈溢出。的机制,我们可以构造一个假的。
2024-02-06 12:20:21
1205
1
原创 栈上格式化字符串漏洞:泄露canary,修改got表,stack check fail,one_gadget
此时就存在格式化字符串漏洞。%c为单个字符形式%s为多个字符形式%d为数字形式%f是转为浮点型%x是转为十六进制形式,不带0x%p是转为十六进制,但是带0x%n 将%n之前打印出来的字符的个数存入到参数中接下通过例题来讲解利用方法。
2024-02-05 19:55:22
1147
2
原创 栈迁移:三种利用方法
栈迁移一般用于溢出字节不够,但至少溢出0x10个字节,也就是用来覆盖rbp及返回地址,一般有两种方向:迁向原来的的栈,迁移到bss段。在学习栈迁移之前,需要了解一下一个汇编指令:leave ret,他的作用可以拆分成两部分:mov rsp rbp pop rbp。leave ret的作用是用来清空栈的,在主函数最后都会有,但如果用两次会有怎样的效果呢借用了这篇。
2024-02-03 12:15:25
2390
1
原创 沙盒绕过:orw的两种利用方式
接下来借一道例题来讲一下orw(open,read,write)的两种利用方式,open(打开)flag文件,将他read(读入)该有的位置,并(write)写出来,一般选取的都是bss段,但这里一般没有那么大的权限,就需要mprotect去该权限(前边已经讲过了,这个也是沙箱的基础),再利用orw。2直接进行计算,通过脚本可以知道,我们payload链读入到bss+0x28的位置,p64()打包为八个字节,中间有个*2要注意,再算上返回地址本身,一共是0x48,也就计算出来了。
2024-02-02 18:53:02
2629
2
原创 CTFpwn常见保护及绕过:pie,canary
这道题没有后门,我们还需要libc去做,这样我们需要泄露出一个正常的函数地址,来计算出libc_base,但是我们发现泄露的地址没有函数,libc_start_call_main(下称libc_call),这个函数我们不可以使用,因为找不到它的偏移(这里是因为虚拟机版本问题,一般libc_start_main(下称libc_main)可以被泄露出来)跟libc利用很像。之后跟进ctfshow函数,进行代码审计,第一个while循环没什么用,我们随便发送个数据就可以绕过,重点!
2024-01-27 19:28:10
4626
2
原创 CTFpwn:ret2text,mprotece,shellcode,自动化rop链
text:0000000000401324 75 EA jnz short loc_401310 #对比rbp里的值与rbx里的值,如果相同就继续运行程序,如果不同就返回0x401310。先将栈溢出的返回地址填成0x40132A,将需要的数据依次填入栈顶,依次弹入寄存器中,随后在执行到0x401334,retn返回的时候将返回地址填成0x401310,这样,我们就可以控制edi,rsi,rdx里的值,并调用write函数泄露基址。
2024-01-25 19:47:22
1186
1
原创 基础ROP
栈溢出指的是程序向栈中某个变量中写入的字节数超过了这个变量本身所申请的字节数,因而导致与其相邻的栈中的变量的值被改变。这种问题是一种特定的缓冲区溢出漏洞,类似的还有堆溢出,bss 段溢出等溢出方式。栈溢出漏洞轻则可以使程序崩溃,重则可以使攻击者控制程序执行流程。此外,我们也不难发现,发生栈溢出的基本前提是。
2024-01-23 12:43:20
1183
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅