pwn的基础题目1
一.ret2textret2text(返回至程序自身代码段)是栈溢出攻击中常用的技术,核心是利用程序自身已存在的有用代码(如 system("/bin/sh") 相关逻辑),通过覆盖返回地址跳转到这些代码,从而获取权限.获取offset的方法(64位);1.在pwndbg命令行里面输入cyclic 200,复制结果2.调试在栈溢出命令行(输入行)设置断点(b * $pc)3.执行 c 命令,进入可输入状态,把复制的200个字符输入进去4.找到RSP对应的值(假设为0x7fffffffde18),执行 x/1xg 0x7fffffffde18,复制结果5.执行命令cyclic -l 0x6161616161616166(假设第4步得到结果为此),输出即为offset exp: 1234567891011121314151617181920212223242526from pwn import *# 配置环境(32位)context(os='linux', arch='i386', log_level=...
ret2libc
1. ret2libc10x01 利用思路 ret2libc这种攻击方式主要是针对 动态链接(Dynamic linking) 编译的程序,因为正常情况下是无法在程序中找到像 system() 、execve() 这种系统级函数(如果程序中直接包含了这种函数就可以直接控制返回地址指向他们,而不用通过这种麻烦的方式)。因为程序是动态链接生成的,所以在程序运行时会调用 libc.so (程序被装载时,动态链接器会将程序所有所需的动态链接库加载至进程空间,libc.so 就是其中最基本的一个),libc.so 是 linux 下 C 语言库中的运行库glibc 的动态链接版,并且 libc.so 中包含了大量的可以利用的函数,包括 system() 、execve() 等系统级函数,我们可以通过找到这些函数在内存中的地址覆盖掉返回地址来获得当前进程的控制权。通常情况下,我们会选择执行 system("/bin/sh") 来打开 shell, 如此就只剩下两个问题: 1 . 找到system()函数的地址; 2 . 在内存中找到/bin/sh这个字符串的地址 0x02...
ROP链介绍
重中之重!!!!链里参数顺序必须按 gadget 的弹栈顺序放 32 位 Linux 系统: 1234eax: 系统调用号ebx: 第 1 个参数ecx: 第 2 个参数edx: 第 3 个参数 常见函数及其构造 12345678910111213141516171819202122232425262728293031323334351. read,一般用于 bss 段写入 /bin/sh read(0, BSS, 8)eax = 3含义: 调用 readebx = 0含义: 文件描述符 0,即标准输入 stdinecx = BSS含义: 把读到的数据写到 BSS 地址edx = 8含义: 最多读取 8 字节,一般是 /bin/sh\x002. execve , 用于getshell!execve(BSS, 0, 0)eax = 11(0xb)含义: 调用 execveebx = BSS含义: filename 指针,指向字符串 /bin/sh\x00ecx = 0含义: argv = NULLedx = 0含义: envp = NULL执行结果: 等价于 execve(...
三种基础题型
1.ret2text原理:顾名思义,ret2text指的是漏洞利用点就在原文件中,即进程存在危险函数如system("/bin")或execve("/bin/sh")的片段,可以直接劫持返回地址到目标函数地址上。从而getshell。 利用前提:程序开启了NX,栈上无法写入shellcode。 代码:12345678void test(){ system("/bin/sh");} int main(){ char buf[20]; gets(buf); return 0;} 利用思路:1.checksec和file 查看文件信息和文件保护。2.把文件丢进ida中查看源码(如上)。3.确认是ret2text在pwndbg中找偏移量4.编写脚本。 脚本exp:123456789101112from pwn import *p = process('./ret2text')address = 0x804863apayload = ('A' * (3...
二进制基础
编译 汇编 1. C语言代码 ——> 汇编代码 ——> 机器码 之后可以得到可执行文件(在内存中的样子)字长一个字长 = CPU 单次能处理的二进制位数 字长不固定,由 CPU 架构决定 8 位机:一个字长 = 8 bit 16 位机:一个字长 = 16 bit 32 位机:一个字长 = 32 bit 64 位机:一个字长 = 64 bit 和字节不一样 1 字节(Byte)永远 = 8 bit 1 字长(Word)= 多少 bit 看 CPU 2 可执行文件:1. 广义:文件中的数据是可执行代码的文件 `.out、.exe、.sh、.py` 2. 狭义:文件中的数据是机器码的文件 如`.out、.exe、.dll、.so` 3. 可执行文件的分类: Windows:PE(Portable Executable) 1. 可执行程序 .exe 2. 动态链接库 .dll 3. 静态链接库 .lib Linux: ...
文件保护措施
ELF 文件保护机制与 ROP 构造详解 - bae-ace - 博客园【PWN学习】ELF保护机制_partial relro-CSDN博客ELF文件保护策略及应对技巧-先知社区










