whctf2017 pwn题wp
今天做题的时候无意做了一道buu上的whctf2017 stackoverflow,做完之后发现另外几道whctf2017的题目也很不错,就打算全做了都学习一下,题目全部在buu上都可以找到
总结
简单总结一下这四道题,它们分别考察了如下的知识点:
第一题考察了scanf函数最终的输入是在内部的count = _IO_SYSREAD(fp, fp->_IO_buf_base, fp->_IO_buf_end - fp->_IO_buf_base);
这行代码,只要能控制这几个字段并且对其他一些字段进行绕过,就可以实现IO的任意地址写
第二题考察了条件竞争漏洞,在多线程的操作中访问同一个全局变量没有加锁,在delete函数中让全局指针被减到了位于got表的位置,从而malloc申请堆块的地址写入了got表里,没有开NX导致堆可执行,从而劫持got表跳转到堆的shellcode上
第三题考察的是snprintf执行中的格式化字符串漏洞,snprintf是一个字符一个字符来处理的,可能是采取了一种循环遍历的方式,所以即使最初调用snprintf的时候format是%s,但后续的操作中format被改变了,然后再取格式化字符的时候触发了漏洞。snprintf拷贝字符的时候可能存在溢出
第四题考察的是未初始化漏洞,在打印之前,没有对操作的指针进行初始化,从而使用了栈里的残留数据,泄露出了canary,配合gets的栈溢出漏洞,ret2libc获取shell
GKCTF 2021_checkin
用python来自定义gdb命令
gdb
是一款 linux
下常用的程序调试器,有时可能我们会根据自己的需求来尝试写一些自定义的 gdb
命令,而通过 python
语言来编写的话,是再好不过了,下面记录一下如何用 python
语言编写自己的 gdb
命令
CSAPP-第二章 信息的表示和处理(笔记)
虎符CTF2022 babygame
总结:
通过这道题的学习与收获有:
1、第一次尝试用爆破的方式来对抗PIE保护
2、重新温习了下猜数游戏这种类型的题目(思路就是想办法覆盖种子,自己跑个脚本)
3、%s顺带打印出来canary并且泄露栈中数据(权当复习了)
4、做题没思路的时候,就先写个半成品脚本,动态调试一下,总能得到一些有用的信息。
5、格式化字符串这道题考察了一个payload里面,同时写和同时读。