下面分享的资源包含国内9套教程教程1-CTF从入门到提升四周学习视频教程教程2-信息安全CTF比赛培训教程教程3-CTF从入门到提升教程4-CTF培训web网络安全基础入门渗透测试教程教程5-CTF入门课程教程6-CTF夺旗全套视频教程教程7-网络安全课程新手入门必看教程8-bugku_CTF_Web视频教程网络安全预科班课程CTF入门国外3套教程国外教程1套-GoogleCTF2018BeginnersQuest(中文字幕)国外教程2套-RefrainCTFtask(0CTFTCTF2019Quals)(中文字幕)国外教程3套-DragonCTF2018(中文字幕)除了教程,还有一些CTF挑
0x00:背景最近在为社团新生赛出pwn题,发现网上关于出题方面的文章资料特别少,所以打算记录下自己出题的过程,便于网友们参考学习。本次出题采用了ctf_xinetd与pwn_deploy_chroot项目。0x01:Docker介绍Docker将应用程序与该程序的依赖,打包在一个文件里面。只要运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了Docker,大大缓解了程序分布时的环境问题。docker的安装:#本人系统环境:Ubuntu22.04#更新软件包sudoapt-getupdate#安装dockersudoapt-getinstalld
0x00:背景最近在为社团新生赛出pwn题,发现网上关于出题方面的文章资料特别少,所以打算记录下自己出题的过程,便于网友们参考学习。本次出题采用了ctf_xinetd与pwn_deploy_chroot项目。0x01:Docker介绍Docker将应用程序与该程序的依赖,打包在一个文件里面。只要运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了Docker,大大缓解了程序分布时的环境问题。docker的安装:#本人系统环境:Ubuntu22.04#更新软件包sudoapt-getupdate#安装dockersudoapt-getinstalld
0x00:介绍利用手法的背景:houseofstorm是一种结合了unsortedbinattack和Largebinattack的攻击技术,其基本原理和Largebinattack类似。但不同的是,Largebinattack只可以在任意地址写入堆地址,而houseofstorm则可以导致任意地址分配chunk,也就是说可以造成任意地址写的后果,危害性大。不过,houseofstorm虽然危害大,但其利用条件也是十分苛刻的。该利用手法适用于glibc2.28及以下的版本,因为unsortedbinattack在glibc2.29中已失效。 利用条件:1.需要unsortedbin中的bk指针
0x00:介绍利用手法的背景:houseofstorm是一种结合了unsortedbinattack和Largebinattack的攻击技术,其基本原理和Largebinattack类似。但不同的是,Largebinattack只可以在任意地址写入堆地址,而houseofstorm则可以导致任意地址分配chunk,也就是说可以造成任意地址写的后果,危害性大。不过,houseofstorm虽然危害大,但其利用条件也是十分苛刻的。该利用手法适用于glibc2.28及以下的版本,因为unsortedbinattack在glibc2.29中已失效。 利用条件:1.需要unsortedbin中的bk指针
攻防世界pwn1题解下载附件,file命令识别文件为64位,checksec命令查看程序保护情况,如图,有Canary和NX保护。在ida64中打开程序,程序的主要功能有两个:存储用户输入的字符串内容打印用户输入的字符串内容特别的注意到,字符串数组大小为136(0x88),而read运行的最大输入大小为0x100,如图中红色框标注,因此可能存在栈溢出。同时puts可以将输入打出,因此可以想到借此泄露出canary值。在汇编程序40091C地址处,可以看到canary值保存在rbp上8字节处(即紧邻rbp)。GCC的canary,x86_64下从fs:0x28偏移处获取,32位下从gs:0x14
攻防世界pwn1题解下载附件,file命令识别文件为64位,checksec命令查看程序保护情况,如图,有Canary和NX保护。在ida64中打开程序,程序的主要功能有两个:存储用户输入的字符串内容打印用户输入的字符串内容特别的注意到,字符串数组大小为136(0x88),而read运行的最大输入大小为0x100,如图中红色框标注,因此可能存在栈溢出。同时puts可以将输入打出,因此可以想到借此泄露出canary值。在汇编程序40091C地址处,可以看到canary值保存在rbp上8字节处(即紧邻rbp)。GCC的canary,x86_64下从fs:0x28偏移处获取,32位下从gs:0x14
ReverseROP解析data的ROP,一点一点还原frompwnimport*opcode=open('data','rb').read()opcode_gadget=opcode[0x30+8:]foroffsetinrange(0,len(opcode_gadget),8):print(f'{hex(u64(opcode_gadget[offset:offset+8]))}') 提取出来密文,转成64位的cipher=[0x98,0x7A,0xDF,0x57,0xC6,0xE3,0x18,0xC7,0x11,0x07,0xC7,0xD4,0x02,0xD2,0x9E,0x43,0x3A
ReverseROP解析data的ROP,一点一点还原frompwnimport*opcode=open('data','rb').read()opcode_gadget=opcode[0x30+8:]foroffsetinrange(0,len(opcode_gadget),8):print(f'{hex(u64(opcode_gadget[offset:offset+8]))}') 提取出来密文,转成64位的cipher=[0x98,0x7A,0xDF,0x57,0xC6,0xE3,0x18,0xC7,0x11,0x07,0xC7,0xD4,0x02,0xD2,0x9E,0x43,0x3A
Pwn题做题流程使用checksec检查ELF文件保护开启的状态IDApro逆向分析程序漏洞(逻辑复杂的可以使用动态调试)编写python的exp脚本进行攻击(若攻击不成功)进行GDB动态调试,查找原因(若攻击成功)获取flag,编写Writeup一般都会在C代码开头设置setbuf(stdout,0)表示设置printf缓冲区为0,有就输出而不是等到输出\n时一块输出ebp+0x4存放函数中第一个局部变量,ebp-0x4是返回地址ebp-0x8存放函数第一个参数栈帧基本知识下面解释一下下面的汇编代码(AT&T格式),首先push%ebp,保存调用者的调用者的ebp寄存器,move%esp,%