- 博客(12)
- 收藏
- 关注
原创 MCU常见通信协议
应答位(ACK/NACK):如果接受端正确接收了8bit数据,则回复一个bit的“0”信号,如果未正确接收8bit数据,或者接收端不再接受数据,则回复一个bit的“1”信号。I2C发送数据:主机发送起始信号——>输入从机地址——>输入读或写——>从机产生ACK信号——>发送要写或读的地址——>ACK——>发送数据——>停止信号。在使用UART通信之前,通信双方要保证波特率一致,也就是信息传递的速率,常见的波特率有4800,9600,115200等。SPI中包含一个且只能有一个主设备,一个或多个从设备。
2025-04-10 23:42:15
453
原创 关于堆的一些数据结构(个人笔记
unsort bin链表中的大小可以是不一样的,部分在chunk被free时,在进入small bin和large bin 前会先进入unsort bin,在下一次malloc检查bins时会分配给small bin和large bin。例如,一个0x20大小的free chunk紧邻着一个malloc_chunk,malloc(0x28),便可以将这个malloc_chunk的prev size作为free chunk的一部分分配出去。新进入的chunk插入尾端,分配出去的chunk从链表头部取。
2024-06-07 20:14:07
453
2
原创 第六周周报
通过off by one漏洞将自定义1的chunk跟0x10的chunk倒过来,并修改chunk的大小,使其可以覆盖0x10的chunk。我们再add一个0x100的chunk,堆管理器就会从top chunk中重新划出一个新的0x80的chunk来,这样add出来的0x100的chunk就可以堆溢出了。add函数先malloc一个0x8大小的chunk,将puts函数的地址和自定义chunk的地址存放在其中,再malloc自定义的chunk。申请两个chunk并释放,再申请一个0x8大小的chunk。
2024-06-02 21:49:39
762
原创 第五周周报
然后将fakechunk申请出来,在0x6020E0处写入freegot,此时chunk0的指针便修改为了freegot,我们editchunk0也就是在对freegot的内容进行修改,于是写入systemplt,此时调用free就是调用system。先创建三个堆块,为了方便使用off by one 漏洞,第一个chunk的大小设置位0x18,,随后通过off by one 漏洞将下一个chunk的大小改为0x81,然后free掉,再申请回来,这样就可以对其他堆块读写了。
2024-05-27 12:39:12
1009
原创 第四周周报(NSS刷题记录)
使用fork()函数开启了子进程,所以我们可以使用爆破的方式泄露canary,爆破过程漫长,耐心等待,我不小心又开了一道题,然后这个靶机自动关了,又要重新来,哭死。show函数非常关键,它将prev size处的数据作为函数指针使用,将prev size+0x10处的数据作为参数,而prevsize处存放了puts函数。将exit的got改为vuln函数,然后泄露puts函数的got,获得libc_base,然后将puts改为system。用mmap函数开辟了一段可读可写可执行的地址,并read数据。
2024-05-19 21:34:44
1137
1
原创 第三周周报(XYCTF,NSS)
思路是:先通过srop调用read函数,接下来用read函数读入用srop写的open和sendfile函数的调用,输出flag。所以我们的解题思路就是,先利用格式化字符串泄露canary,再通过栈溢出泄露libcbase,构造rop链获得shell。在卖东西时会创建一个新的线程,,我们可以快速卖出东西,在程序反应过来之前,我们就可以拥有大量的钱了。根据程序可知,我们需要用格式化字符串漏洞将key改为102,然后进入存在栈溢出的read函数。64位,题目给出的提示是shellcode,但保护全部打开了。
2024-05-05 19:20:16
1117
原创 第二周周报(BUU)
但不能直接返回到shell函数,需要调用system函数再传参,由于给出的溢出空间很小,所以我们不能调用systemplt,但是已经给出了system函数的话,直接找到call system即可。可以看到,选择1后,会直接将我们的输入作为system的参数,所以直接传入cat flag即可,要注意使用||或&分割,不然会传入其他数据,导致命令无法执行。直接给出了shell,但是关闭了标准输出和标准错误,所以我们无法看到flag,可以使用exec 1>&0命令打开标准输出。
2024-04-28 17:16:21
946
1
原创 周报(校赛复盘与学长题目的复现)
给出了可以修改任意地址八字节的函数存在栈溢出可以将 ___stack_chk_fail改为ret,直接绕过canary,进行ret2libc。exppthread通过栈溢出修改canary的值来绕过canary。exp以上方法由于保护机制不同要在ubuntu18的环境下操作。pie栈溢出一个字节将返回地址改为backdoor的地址。exppie_two栈溢出修改ret最后一字节返回到put函数,打印出 funlockfile函数地址,获得libcbase。再构造ROP链获得shell。
2024-04-20 23:12:22
1131
2
原创 BUU第二页wp(除堆题)
可以看到,选择1后,会直接将我们的输入作为system的参数,所以直接传入cat flag即可,要注意使用||或&分割,不然会传入其他数据,导致命令无法执行。vuln函数中存在栈溢出,接下来就是ret2libc了。32位,开了canary,下载这个附件居然有病毒,离谱。gift中存在格式化字符串漏洞,可泄露canary。存在后门函数,直接栈溢出返回到后门函数即可。64位开启了NX保护和canary保护。存在栈溢出,典型的ret2libc。64位RELRO全开,开启了pie。直接写入shellcode即可。
2024-03-15 18:48:04
339
1
原创 BUU第一页wp
注意strlen()函数,使用\x00截断,接着使用ret2libc的方法解决。func函数中存在栈溢出且存在system函数,可直接获取flag。vuln函数中,会将输入的I转化为三字节的you可以实现栈溢出。checksec发现为64位文件,开启了NX保护。存在system函数,/bin/sh字符串与栈溢出。发现后门函数,直接栈溢出到后门函数获取shell。观察主函数,发现system("/bin/sh")checksec发现为64位文件,开启了NX保护。栈溢出到后门函数,直接将flag打印出来了。
2024-03-09 17:49:55
606
3
原创 PWN学习笔记 NSS
payload1=b'a'*(0x10)+p64(rdi)+p64(0)+p64(rsi)+p64(buf/*写入/bin/sh的地址,如bss段*/)+p64(rdx)+p64(8)+p64(elf.sym['read'])#调用read函数,将/bin/sh写入buf。syscall:ROPgadget --binary 文件名 | grep syscall。在gdb中 i r fs_base #得到fs_base 十六进制数据 十进制数据。关闭canary:-fno-stack-protector。
2024-02-19 11:03:47
377
1
原创 pwn学习笔记 BUU
本来配完20和22以后以为自己已经会配基本的环境了,结果18又让我看到了很多新的问题。搜出来的文章大部分都没用,找到有用的文章也忘记保存了,以后如果有缘要重新配环境应该会吃很多亏。之前一直没有做笔记,现在开始正式进入寒假学习。这Ubuntu18的问题比20和22多好多,不停的报错,报错方式不停地变,已经麻了。刚回家,一堆事要搞,没学什么,主要还是配环境。
2024-01-11 16:47:39
618
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人