pwn学习(2)】的更多相关文章

目录 PWN学习之格式化字符串漏洞 格式化输出函数 格式化字符串漏洞 漏洞利用 使程序崩溃 栈数据泄露 任意地址内存泄漏 栈数据覆盖 任意地址内存覆盖 PWN学习之格式化字符串漏洞 格式化输出函数 可变参数:https://blog.csdn.net/smstong/article/details/50751121 (C语言可变参函数的实现) 首先我们了解格式化字符串漏洞前,需要对格式化输出的函数进行一个了解,在C中格式化输出函数一共有如下: fprintf() "按照格式字符串将输出写入流中.…
目录 PWN学习之整数溢出 整数溢出 溢出和回绕 漏洞多发函数 整数溢出例子 PWN学习之整数溢出 整数溢出 如果一个整数用来计算一些敏感数值,如缓冲区大小或数值索引,就会产生潜在的危险.通常情况下,整数溢出并没有改写额外的内存,不会直接导致任意代码执行,但是它会导致栈溢出和堆溢出,而后两者都会导致任意代码执行.由于整数溢出发生之后,很难被立即察觉,比较难用一个有效的方法去判断是否出现或者可能出现整数溢出. 关于整数的异常情况主要有三种: (1)溢出,只有有符号数才会发生溢出.有符号数的最高位表…
目录 PWN学习之栈溢出 前言 写bug bug.cpp源码 OD动态调试bug.exe OD调试观察溢出 栈溢出攻击之突破密码验证 x64位栈溢出 PWN学习之栈溢出 前言 我记得我在最开始学编程的时候,经常会听到老师说输入的时候要注意大小,不要超过数组大小否则会造成缓冲区溢出导致程序崩溃的. 当时就觉得溢出就溢出咯,崩溃就崩溃咯,难不成还能导致电脑被攻击吗?就偏偏不控制输入长度. 写bug 先让我们来写个bug体验一下,下面这段程序要求用户输入字符串并且把数据给buffer数组,如果超过12…
目录 [二进制漏洞]PWN学习之格式化字符串漏洞 Linux篇 格式化输出函数 printf函数族功能介绍 printf参数 type(类型) flags(标志) number(宽度) precision(精度) length(类型长度) n$(参数字段) 格式化字符串漏洞 格式化字符串漏洞原因: 漏洞利用 使程序崩溃(测试) 栈数据泄露(堆栈读) 获取栈变量数值 获取栈变量字符串 堆栈读总结 栈数据覆盖(堆栈写) 覆盖变量 任意地址内存泄漏(任意读) 任意地址内存覆盖(任意写) 覆盖小数(小于…
0x00 简介 入职之后,公司发布任务主搞pwn和re方向,re之前还有一定的了解,pwn我可真是个弟弟,百度了一番找到了蒸米大佬的帖子,现在开始学习. 0x01 保护方式 NX (DEP):堆栈不可执行 ASLR:内存地址随机化,在linux和pie相结合,aslr是系统是否开启,有0.1.2三个等级,而pie是程序自身是否开启,两者共同作用有不同的效果,如下图. Canary(GS):栈保护,栈被溢出时,会触发异常 RELRO:GOT不可更改 0x02 栈溢出 额外说一句,gcc如何对各种保…
刚刚开始学习pwn,记录一下自己学习的过程. 今天get了第二道pwn题目的解答,做的题目是2017年TSCTF的easy fsb,通过这道题了解了一种漏洞和使用该漏洞获取shell的方法:即格式化字符串漏洞,通过找到printf的got表改为system的got表,从而让执行printf函数变成执行system函数再传入/bin/sh参数,从而让程序执行system('/bin/sh')获取shell. 打开ida查看: 程序逻辑就是执行getname()函数. 进入getname()函数:…
刚刚开始学习pwn,记录一下自己学习的过程. 今天完成了第一道pwn题目的解答,做的题目是2017年TSCTF的bad egg,通过这道题学习到了一种getshell的方法:通过在大小不够存储shellcode的空间内写入egg_hunter使其去找到真正的shellcode所在的地址执行拿到shell. 首先拿到题目用ida去查看: 题目首先通过sub_8B0()生成了一个1000以内的随机数用来给dword_305C申请地址,这里用的malloc申请的地址是存在在堆中的,然后题目会把申请到的…
知识杂项 strncpy(char s1,const char s2,int n); 其中有三个参数分别表示目标字符串s1,源字符串s2,拷贝长度.意思是将s2指向的字符串的前n个长度的字符放到s1指向的字符串中,并将s1原有的前n个字符覆盖. sys_execve() 在真正的开始执行系统调用函数之前,系统调用服务程序已经将一些系统调用的函数的参数传递给了相应的寄存器,比如这里的ebx,ecx,edx都分别保存了系统调用的参数,ebx保存的是第一个参数,依次类推(当然最多传递的参数个数不能大于…
知识杂项 int mprotect(const void *start, size_t len, int prot); mprotect()函数把自start开始的.长度为len的内存区的保护属性修改为prot指定的值. int fflush(FILE *stream) fflush():会强迫将缓冲区内的数据写回参数stream 指定的文件中. 如果参数stream 为NULL,fflush()会将所有打开的文件数据更新. DEP:可帮助防止数据页当作代码执行,从而有效分离数据与代码.通常情况…
本文首发于“合天智汇”公众号 作者:s0xzOrln 声明:笔者初衷用于分享与普及网络知识,若读者因此作出任何危害网络安全行为后果自负,与合天智汇及原作者无关! 刚刚开始学习ARM pwn,下面如有错误,希望各位大佬多多包han,多多包涵. 先介绍下 Arm的一些常见指令 那就先来 Arm 三操作数指令 LDRB R0, [R1, #-] # 把R1-1的地址的值给R0 立即数前面加个 `#` 看看函数开始时 PUSH {R4,R5,R7,LR} STMFD SP!, {R4-R11,LR} 这…
0x00 序 ​ 之前学了蒸米大佬的ropx86,本次学习 ropx64 0x01 Leak Memory & Dynelf ​ 蒸米大佬使用pwntools的Dynelf模块来获取函数地址,Dynelf模块的原理是,定义的leak函数至少可以泄漏出一个字节的数据,并且这个函数可以执行无数次(每次执行完 都会返回到函数起始继续执行 )然后经过Dynelf调用N次,pwntools经过对泄漏的数据进行求特征值这样一个操作,比较之后得到system函数地址. ​ 使用方法: 定义leak函数 def…
本来以为应该能出一两道ctf的pwn了,结果又被sctf打击了一波. bufoverflow_a 做这题时libc和堆地址都泄露完成了,卡在了unsorted bin attack上,由于delete会清0变量导致无法写,一直没构造出unsorted bin attack,后面根据wp发现只要修改一下free的顺序就行了. 这题的主要功能如下: 正常的堆题模板,1是申请堆,2是删除堆,3是写刚申请的堆,4是输出刚申请的堆的内容,5结束. 首先泄露libc的地址,申请堆只能申请0x7f到0x100…
whctf2017的一道pwn题sandbox,这道题提供了两个可执行文件加一个libc,两个可执行文件是一个vuln,一个sandbox,这是一道通过沙盒去保护vuln不被攻击的题目. 用ida打开vuln: 进入80485CB函数: 这里s给的空间是48但是输入是直到换行停止,这里就存在了栈溢出.但是这道题目开了CANARY,所以不能直接覆盖到返回地址.注意到这题,s的空间下面就是v5,而v5是控制写到s的位置,所以可以通过覆盖v5到返回地址而绕过修改那段Cookie,在不开sandbox的…
知识杂项 msfVENOM:Msfvenom是msf框架配套的攻击载荷生成器. payload:有效载荷. payload:目标系统上渗透成功后执行的代码. Metasploit:一款开源的安全漏洞检测工具. BufferRegister:缓冲寄存器 shellcode的变形 "\x31\xc9\xf7\xe1\xb0\x0b\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xcd\x80"显然含有大量的非base64编码字符,甚…
windows PE/COFF章总结 本章学习了windows下的可执行文件和目标文件格式PE/COFF.PE/COFF文件与ELF文件非常相似,它们都是基于段的结构的二进制文件格式.Windows下最常见的目标文件格式就是COFF文件格式,微软的编译器产生的目标文件都是这种格式.COFF文件有一个很有意思的段叫".drectve段",这个段中保存的是编译器传递给链接器的命令行参数,可以通过这个段实现指定运行库等功能.Windows下的可执行文件.动态链接库等都使用PE文件格式,PE文…
静态链接章小结 本章首先学习了静态链接的第一步骤,即目标文件在被链接成最终可执行文件时,输入目标文件中的各段是如何被合并到输出文件中的,链接器如何为它们分配在输出文件中的空间和地址.一旦输入段中的最终地址被确定,接下来就可以进行符号解析与重定位,链接器会把各个输入目标文件中对外部符号的引用进行解析,把每个段中须重定位的指令和数据进行"修补",使它们都指向正确的位置. 本章还对几个静态链接中的问题进行了分析,比如为什么未初始化的全局/静态变量要使用COMMON块,C++会对链接器和目标文…
CTF-Pwn入门及栈溢出原理解释 CTF pwn 中最通俗易懂的堆入坑指南 看雪论坛…
知识杂项 libc是Linux下的ANSI C的函数库. LOOKUP函数 数组形式:公式为= LOOKUP(lookup_value,array) 式中 array-包含文本.数字或逻辑值的单元格区域或数组它的值用于与 lookup_value 进行比较. str.ljust(width[, fillchar]) 1.width -- 指定字符串长度. 2.fillchar -- 填充字符,默认为空格. 返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串.如果指定的长度小于原字符串的长…
知识杂项 aslr:是一种针对缓冲区溢出的安全保护技术,通过对堆.栈.共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的的一种技术. str.strip([chars]); 用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列. chars -- 移除字符串头尾指定的字符序列. 返回移除字符串头尾指定的字符生成的新字符串. 调整栈帧技巧 在存在栈溢出的程序中,有时候我们会碰到一些栈相关的问题,例如溢出的字节数太小,AS…
知识杂项 ELF:在计算机科学中,是一种用于二进制文件.可执行文件.目标代码.共享库和核心转储格式文件. char fgets(char buf, int bufsize, FILE stream); buf: 字符型指针,指向用来存储所得数据的地址. bufsize: 整型数据,指明存储数据的大小. *stream: 文件结构体指针,将要读取的文件流. 从文件结构体指针stream中读取数据,每次读取一行.读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufs…
总是一会儿切到那里,一会儿切到那里,要明确一条主线,就是buu的题,而不是按着什么视频教程还有linux和python教程去学习.那样效率比较低. 一切为了写wp为本,不胡乱点击就是提高效率的最好办法.…
环境清单 系统环境 Ubuntu22.04 编写脚本 pwntools ZIO 调试 IDA PRO gdb pwndbg ROP工具 checksec ROPgadget one_gadget LibcSearcher main_arana_offset IDA PRO(运行于windows) IDA主要用于反汇编,静态调试,也可以将部分程序以伪代码的形式给出 IDA Pro 有何用处? 一分钟安装IDA pro7.0 pwntools(python库) pwntools是一个ctf框架和漏洞…
Pwn题做题流程 使用checksec检查ELF文件保护开启的状态 IDApro逆向分析程序漏洞(逻辑复杂的可以使用动态调试) 编写python的exp脚本进行攻击 (若攻击不成功)进行GDB动态调试,查找原因 (若攻击成功)获取flag,编写Writeup 一般都会在C代码开头设置setbuf(stdout, 0)表示设置printf缓冲区为0,有就输出而不是等到输出\n时一块输出 ebp + 0x4 存放函数中第一个局部变量, ebp - 0x4是返回地址 ebp - 0x8 存放函数第一个…
一:首先来了解一下linux下常见的攻击缓解机制: CANARY:(金丝雀值,指的是矿工曾利用金丝雀来确认是否有气体泄漏,如果金丝雀因为气体泄漏而中毒死亡,可以给矿工预警),类似于windows GS技术,当栈溢出发生时,canary值将在已保存的指令指针被重写前先改变.系统检测这个值是否改变,栈溢出发生了,保存的指令指针可能也被修改了,因此不能安全返回,函数会调用__stack_chk_fail函数.这个函数会丢出一个错误然后退出进程.缺点:仅保护了sip,未保护应用变量,覆写GOT绕过. F…
知识杂项 shell-storm.org的shellcode数据库 使用pwntools库把shellcode作为输入传递给程序,尝试使用io.interactive()与程序进行交互,发现可以执行shell命令. shellcode:是一段可以执行特定功能的神秘代码. shell-storm:上还有可以执行其他功能如关机,进程炸弹,读取/etc/passwd等的shellcode. EAX 是"累加器"(accumulator), 它是很多加法乘法指令的缺省寄存器. EBX 是&qu…
ida / od 窗口(针对od操作) 反汇编窗口:显示被调试程序的反汇编代码,标题栏上的地址.HEX 数据.反汇编.注释可以通过在窗口中右击出现的菜单 界面选项->隐藏标题 或 显示标题 来进行切换是否显示.用鼠标左键点击注释标签可以切换注释显示的方式. 寄存器窗口:显示当前所选线程的 CPU 寄存器内容.同样点击标签 寄存器 (FPU) 可以切换显示寄存器的方式.重点关注ESP .EBP.EIP EBP寄存器:存放函数栈底指针. ESP寄存器:存放函数栈顶指针. EIP寄存器:下一条指令的地…
知识杂项 *:字符串重复 空指令NOP:\x90 cmp:是比较指令,cmp的功能相当于减法指令.它不保存结果,只是影响相应的标志位. xor:将两个操作数进行异或运算,并将结果存放到操作数1中. shr:带进位的右移 shellcode的变形 函数代码在栈中保存顺序(直观理解,已省略其他细节): buffer 前栈帧EBP 返回地址 ESP 溢出原理 正常情况下函数在返回过程中,最后会执行返回地址中保存的内容,通常是跳到下一条指令的地址如果buffer长度过长,长到覆盖了返回地址的值,那么函数…
知识杂项 软连接 命令: ln -s 原文件 目标文件 特征: 1.相当于windows的快捷方式 2.只是一个符号连接,所以软连接文件大小都很小 3.当运行软连接的时候,会根据连接指向找到真正的文件,然后执行 4.所有软连接文件的权限是777,而真正的权限是由指向的那个文件决定的 5.原文件丢失,软连接无法访问,会报找不到的错误 6.ls -al以后,软连接后面箭头指向的是原文件 硬连接 命令: ln 原文件 目标文件 特征: 1.原文件和连接文件的属性完全一样 2.连接文件和原文件的关系类似…
Linux内核装载ELF过程 (1)bash进程调用fork()系统调用创建一个新的进程 (2)新的进程调用execve()系统调用执行指定的ELF文件,原先的bash进程继续返回等待刚才启动的新进程结束,然后继续等待用户输入命令. (3)execve()系统调用相应的入口是sys_execve(),sys_execve()进行一些参数的检查复制后,调用do_execve(). (4)do_execve()读取128个字节的文件头部,调用search_binary_handle(). (5)se…
可执行文件的装载与进程 覆盖装入和页映射是两种典型的动态装载方法 进程建立的三步 1.创建一个独立的虚拟地址空间 2.读取可执行文件头,并且建立虚拟空间与可执行文件的映射关系. 3.将CPU的指令寄存器设置成可执行文件的入口地址,启动运行. 常见段权限组合: 以代码段为代表的权限为可读可执行段 以数据段和BSS段为代表的权限为可读可写段 以只读数据段为段表的权限为只读的段 操作系统通过给进程空间划分出一个个VMA来管理进程的虚拟空间: 基本原则就是将相同权限属性的.有相同映像文件的映射成一个VM…