CSAPP-第一章 计算机系统漫游(笔记)
这个第一章,主要是介绍了计算机上的一些专业术语,以及一些最基础的概念(并没有深入讲解,不过会在后面的章节进行探究)。不过这些概念彼此之间联系不大,并不是循序渐进的,因此这一章,我单独介绍里面出现的术语。
这个第一章,主要是介绍了计算机上的一些专业术语,以及一些最基础的概念(并没有深入讲解,不过会在后面的章节进行探究)。不过这些概念彼此之间联系不大,并不是循序渐进的,因此这一章,我单独介绍里面出现的术语。
在pwntools中,sendline和send都是发送数据,但是sendline是发送一行数据,换句话说就是sendline会在发送的数据末尾加一个回车。而这个回车所造成的影响,是跟对应的输入函数有关系,在做pwn题中,碰见的输入函数有scanf(”%s”),gets(),read(),fgets(),这四个函数。我感觉最常见的应该是read函数。我们分别讨论一下这前三个函数在读取内容上的具体细节以及sendline所造成的影响。
ret2syscall需要寻找的指令的思路和构造shellcode的思路是一样的,只不过ret2syscall获取的指令算是就地取材,而ret2shellcode创造指令算是无中生有。
通过这道题的学习与收获有:
1、bss段的格式化字符串,需要找一条栈链,需要用栈地址->栈地址->栈地址->值,用第二个栈地址来控制第三个栈地址,将第三个栈地址当做跳板,最终去通过跳板的不断移动,去不断写入一或两字节的数据。
这里稍稍总结两句。
利用格式化字符漏洞来达到写的目的,分为两种情况。
如果输入直接是在栈中,那就可以去利用距栈顶偏移加我们构造地址,去达到任意地址任意写的目的。
如果输入是在bss段,那么要利用栈链,来进行任意地址任意写。2、这道题的思路是一边利用格式化字符串漏洞去不断执行printf和read,一边在栈里写入bss段地址,为之后的栈迁移做打算。最后将布置好的rop链发送过去,让执行流迁移到rop链上,利用magic gadget来获取shell。
3、又收集到了一个新的magic gadget。adc DWORD PTR [rbp+0x48],edx 机器码搜11554889
4、第一次遇见格式化字符函数自己修改自己的返回地址去执行自己… 另外就是格式化字符并不需要对齐,格式化字符后面的地址才需要对齐。
5、多注意栈里的数据,是否有特殊的存在。没思路的时候,就调试一下看看能不能找到有用的信息。
题确实不难,但确实比赛没写出来,可惜差了一点,要是再给半个小时或者一个小时应该就出了,最后卡在一个奇奇怪怪的点(就是 global_max_fast
为了避免写进去 0xdeadbeef
有点大,就用了 global_max_fast - 1
这个地址写入的,结果不知道为啥后面 free
掉堆块后,里面的数据直接没了)浪费了很多时间
赛题WP