第一章

1.1 认识程序

file、ldd

1.2 gdb调试

一、指令
1、start、run 2、断点
设置断点 b mian、b *0x123456
查看断点 info b、i b
让断点失效 disable b 序号
恢复断点 enable b 序号
删除断点 d 序号
步过、步进、步出 n、s、finish 3、info r查看寄存器
· RIP存放当前执行的指令地址
· RBP存放当前栈帧的栈底地址
· RSP存放当前栈帧的栈顶地址
· RAX通用寄存器,存放函数返回值 4、打印(可做加减)
· print、p $rbp-0x10 5、查看内存、设置内存(重要!!!)
· x/20gx 0x123456
· 查看内存: g查看8字节、w查看4字节、b查看2字节
· x显示16进制、d显示10进制
· x/20s 以字符串的形式显示
· x/20i $rip 从rip开始编译20行的汇编代码
· disassemble $rip
· x/20b $rbp-0x10 逐字节查看值 · set *0x123456 = 0x61
· set *((unsigned int)$ebp) = 0x62

第二章

2.1 ret2csu_x1

一、原理(看汇编语言)
满足 rbp = rbx + 1 则不会跳转,程序会继续往下到retn
· 要能够控制rbp和rbx
· rbx要等于0,且要能够控制r15(call [r15+rbx*8])
· r15控制func
· 三个参数(r12控制rdi、r13控制rsi、r14控制rdx) 二、步骤
1、先跳转到pop pop pop处
2、然后ret到上面mov mov mov处
3、参数设置完之后,控制到call函数
4、控制程序不跳转继续往下执行add pop pop pop

1、先控制程序到pop_rbx_addr然后
2、rbx=0、rbp=1、r12=arg1、r13=arg2、r14=arg3、r15=call func(GOT表地址)
3、然后,ret到mov_rdx_r14_addr
4、加上7*p64(0xdeadbeef),最后在加上一个返回地址
5、!!!注意 !!!
· 由于是直接call,所以函数地址r12必须是got表地址,不能是plt或栈上地址
· 所以有必要调用一次read_got,把泄露的system和/bin/sh\00写到bss段
· 最后再(注意sleep(1))

2.2 总结+杂项

一、防护(NX、Canary、PIE、RELRO)

二、栈迁移(自学)

栈迁移(自学)

    · 用法:栈溢出空间不足以布置栈
· 步骤:
1、动态调式泄露s的真实地址
· 把s字段数据填满,由于没有\00截断符,所以print会打印ebp
· 再通过动态调试用ebp-0x38得到s_addr起始地址

        2、接下来通过第二个read,在s的内存中布置payload
· bin_sh_addr = s_addr + 16(system_addr+12)
· fake_ebp = s_addr - 4

        3、

你想有多pwn的更多相关文章

  1. 见微知著(一):解析ctf中的pwn--Fast bin里的UAF

    在网上关于ctf pwn的入门资料和writeup还是不少的,但是一些过渡的相关知识就比较少了,大部分赛棍都是在不断刷题中总结和进阶的.所以我觉得可以把学习过程中的遇到的一些问题和技巧总结成文,供大家 ...

  2. iscc2016 pwn部分writeup

    一.pwn1 简单的32位栈溢出,定位溢出点后即可写exp gdb-peda$ r Starting program: /usr/iscc/pwn1 C'mon pwn me : AAA%AAsAAB ...

  3. pwn学习(1)

    0x00 简介 入职之后,公司发布任务主搞pwn和re方向,re之前还有一定的了解,pwn我可真是个弟弟,百度了一番找到了蒸米大佬的帖子,现在开始学习. 0x01 保护方式 NX (DEP):堆栈不可 ...

  4. pwn with glibc heap(堆利用手册)

    前言 ​ 对一些有趣的堆相关的漏洞的利用做一个记录,如有差错,请见谅. ​ 文中未做说明 均是指 glibc 2.23 ​ 相关引用已在文中进行了标注,如有遗漏,请提醒. 简单源码分析 ​ 本节只是简 ...

  5. 我的pwn笔记

    0.64位程序参数一次保存在RDI,RSI,RDX,RCX,R8和 R9,具体见图 windows64位调用约定 1.<_libc_csu_init>有一些万能gadget,汇编如下 #! ...

  6. Linux pwn入门教程(10)——针对函数重定位流程的几种攻击

    作者:Tangerine@SAINTSEC 本系列的最后一篇 感谢各位看客的支持 感谢原作者的付出一直以来都有读者向笔者咨询教程系列问题,奈何该系列并非笔者所写[笔者仅为代发]且笔者功底薄弱,故无法解 ...

  7. Linux pwn入门教程(6)——格式化字符串漏洞

    作者:Tangerine@SAINTSEC 0x00 printf函数中的漏洞 printf函数族是一个在C编程中比较常用的函数族.通常来说,我们会使用printf([格式化字符串],参数)的形式来进 ...

  8. Linux pwn入门教程——格式化字符串漏洞

    本文作者:Tangerine@SAINTSEC 原文来自:https://bbs.ichunqiu.com/thread-42943-1-1.html 0×00 printf函数中的漏洞printf函 ...

  9. Linux pwn入门教程(2)——shellcode的使用,原理与变形

    作者:Tangerine@SAINTSEC 0×00 shellcode的使用 在上一篇文章中我们学习了怎么使用栈溢出劫持程序的执行流程.为了减少难度,演示和作业题程序里都带有很明显的后门.然而在现实 ...

  10. Linux pwn入门教程(1)——栈溢出基础

    作者:Tangerine@SAINTSEC 原文来自:https://bbs.ichunqiu.com/thread-42241-1-1.html 0×00 函数的进入与返回 要想理解栈溢出,首先必须 ...

随机推荐

  1. Redis、Nginx、SQLite、Elasticsearch等开源软件成功的原因及他们对IT技术人员的启示

    引言 这些年在自研产品,对于如何做好产品进行了一些思考.随着开源软件的蓬勃发展,许多开源项目已经成为IT行业的核心组成部分.像Redis.Nginx.SQLite.Elasticsearch这些知名的 ...

  2. Figma 学习笔记 – Image

    参考: Figma Tutorial: Images 3 Ways to Insert Image 1. rectangle / frame + fill 画一个 rectangle / frame ...

  3. java基础 -IO流笔记

    610,文件的基础知识 文件流 输入流和输出流都是相对 java程序内存 而言 611,创建文件 在D盘下创建文件. package com.hspedu.file; import org.junit ...

  4. C++ string类型常用操作

    string类型操作 字符串切割 str.substr(索引,切割的个数)  ->  返回字符串 注意:第二个参数为切割的个数 string buf = "abcdefg"; ...

  5. Web核心

    JavaWeb 技术栈   

  6. Python实现多维傅里叶变换

    技术背景 在前面一篇文章中,我们介绍了一维离散傅里叶变换和快速傅里叶变换的基本原理和简单的代码实现.本文补充一个多维傅里叶变换的场景,以及简单的Python实现. 二维傅里叶变换 首先回顾一下上一篇文 ...

  7. Win11本地部署FaceFusion3最强AI换脸,集成Tensorrt10.4推理加速,让甜品显卡也能发挥生产力

    FaceFusion3.0.0大抵是现在最强的AI换脸项目,分享一下如何在Win11系统,基于最新的cuda12.6配合最新的cudnn9.4本地部署FaceFusion3.0.0项目,并且搭配Ten ...

  8. 【赵渝强老师】什么是Oracle的数据字典?

    数据字典是oracle存放有关数据库信息的地方,几乎所有的系统信息和对象信息都可在数据字典中进行查询.数据字典是oracle数据库系统的信息核心,它是一组提供有关数据库信息的表和视图的集合,这些表和视 ...

  9. Windows 笔记本 WiFi 功能消失问题解决

    背景说明 许多 Windows 笔记本用户可能会遇到 WiFi 功能突然消失的问题.虽然网上有各种说法,但实际上,这个问题通常并非由病毒引起.大多数情况下,问题的根源是驱动程序丢失或笔记本静电干扰导致 ...

  10. Android Qcom USB Driver学习(八)

    因为要看usb charging的问题,所以需要补充一下battery的相关知识,算是入门吧 BAT SCH (1)VBATT_VSNS_P (2)BAT_THERM (3)I2C_SDA (4)I2 ...