pwn
p0inter
生而自由,爱而无畏,保持热爱奔赴山海
展开
-
ropgadgets与ret2syscall技术原理
程序:#include <stdio.h>#include <string.h>#include <sys/types.h>#include <unistd.h>#include <sys/syscall.h>void exploit(){system("/bin/sh");}void func(){char st...原创 2020-04-24 11:08:59 · 678 阅读 · 1 评论 -
ret2libc过地址随机化
程序:#include<stdio.h>char buf2[10] = "this is buf2";void vul(){ char buf1[10]; gets(buf1);}void main(){ write(1,"sinxx",5); vul();}很明显,gets函数存在溢出编译:gcc -no-pie -fno-stack-protect...原创 2020-04-18 10:47:39 · 358 阅读 · 0 评论 -
一步一步学pwntools(适合新手)
序pwntools是一个二进制利用框架。官方文档提供了详细的api规范。然而目前并没有一个很好的新手教程。因此我用了我过去的几篇writeup。由于本文只是用来介绍pwntools使用方法,我不会过于详细的讲解各种二进制漏洞攻击技术。Pwntools的“Hello World”栈溢出无疑是二进制攻击的“Hello World”。这里,我们用pwnable.kr的bof来进行展示。#incl...转载 2020-04-09 18:56:16 · 5110 阅读 · 2 评论 -
gbd调试64位程序关键
程序:4.c:#include<stdio.h>void exploit(){ system("/bin/sh");}void main(){ char buf[20]; gets(buf); }编译:gcc -no-pie -fno-stack-protector -m64 -o 4.exe 4.cNX保护,栈数据不可执行使用命令,...原创 2020-03-26 18:43:32 · 345 阅读 · 0 评论 -
ret2shellcdoe
ret2shellcode的关键是找到一个缓冲区,这个缓冲区是可读写写可执行的,我们要想办法把我们的shellcdoe放到这个缓冲区,然后跳转到我们的shellcode处执行。例子:#include <stdio.h>#include <string.h>char str1[0x40];void func(){ char str[0x40]; read(0...原创 2020-03-28 17:10:37 · 180 阅读 · 0 评论 -
借助格式化输出过canary保护
0x01 canary保护机制栈溢出保护是一种缓冲区溢出攻击缓解手段,当函数存在缓冲区溢出攻击漏洞时,攻击者可以覆盖栈上的返回地址来让shellcode能够得到执行。当启用栈保护后,函数开始执行的时候会先往栈里插入cookie信息,当函数真正返回的时候会验证cookie信息是否合法,如果不合法就停止程序运行。攻击者在覆盖返回地址的时候往往也会将cookie信息给覆盖掉,导致栈保护检查失败而阻止s...原创 2020-03-28 15:49:56 · 245 阅读 · 0 评论 -
NX机制及绕过策略-ret2libc
程序:1.c#include <stdio.h>void exploit(){ system("/bin/sh");}void func(){ char str[0x20]; read(0,str,0x50);}int main(){ func(); return 0;}0x01 NX介绍溢出攻击的本质在于冯·诺依曼计算机模型对数据和代码没有...原创 2020-03-24 17:44:31 · 591 阅读 · 0 评论 -
如何定位溢出点位置
程序:#include <stdio.h>void exploit(){ system("/bin/sh");}void func(){ char str[20]; read(0,str,50); printf("the str is:%s\n",str);}int main(){ func(); return 0;}关掉保护机制...原创 2020-03-24 09:55:39 · 1534 阅读 · 0 评论 -
一个简单的pwn例子---read函数
内容:#include<stdio.h>void exploit(){ system("/bin/sh");}void func(){ char str[0x20]; read(0, str, 0x50);}int main(){ func(); return 0;}我们要做的是利用溢出执行exploit函数分析:先...原创 2020-03-21 20:21:43 · 4057 阅读 · 0 评论 -
gdb调试
gcc编译方法1:gcc -m32 -g -o test test.c-m32:32位编译-g:增加调试信息方法二:gcc test.c -o test默认为64位编译一般CTF都使用32位,下面我们使用32位来调试格式registers是寄存器,code是代码,stack是栈命令1、增加断点break 函数名break 行号break 文件名...原创 2020-03-21 17:38:22 · 459 阅读 · 0 评论 -
保护机制
0x01 概述操作系统提供了许多安全机制来尝试降低或阻止缓冲区溢出攻击带来的安全风险,包括DEP、ASLR等。在编写漏洞利用代码的时候,需要特别注意目标进程是否开启了DEP(Linux下对应NX)、ASLR(Linux下对应PIE)等机制,例如存在DEP(NX)的话就不能直接执行栈上的数据,存在ASLR的话各个系统调用的地址就是随机化的。下面是常见的linux保护机制0x02 canary (...原创 2020-03-21 16:14:54 · 1533 阅读 · 0 评论