第一章

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. Mmdetection dataset pipline

    数据的加载顺序是上图(来自mmdetection官网)中的顺序进行,上图中只有一次padding,但是其实dataloader一共有两次padding,一次是pad,另外一次就是collect后,给模 ...

  2. Pytorch数据加载与使用

    前言 在训练的时候通常使用Dataset来处理数据集. Dataset的作用 提供一个方式获取数据内容和标签(label). 实战 from torch.utils.data import Datas ...

  3. SQL 高级语法 MERGE INTO

    根据与源表相联接的结果,对目标表进行插入.更新.删除等操作. 例如,对目标表,如果源表存在的数据则更新,没有的则插入,就可以使用MEREG进行同步. 基本语法 MERGE INTO target_ta ...

  4. Angular 18+ 高级教程 – NgModule

    前言 NgModule 在 Angular v14 以前是一门必修课.然而,自 Angular v14 推出 Standalone Component 以后,它的地位变得越来越边缘化了. 本教程从开篇 ...

  5. SQL Server CTE (Common Table Expression) 公用表表达式

    参考: Sql - CTE公用表表达式和With用法总结 YouTube – SQL WITH Clause | How to write SQL Queries using WITH Clause ...

  6. k8s 中的 Ingress 简介

    〇.前言 前边已经介绍了 k8s 中的相关概念和 Service,本文继续看下什么是 Ingress. Ingress 的重要性不言而喻,它不仅统一了集群对外访问的入口,还提供了高级路由.七层负载均衡 ...

  7. GZY.Quartz.MUI(基于Quartz的UI可视化操作组件) 2.7.0发布 新增各项优化与BUG修复

    前言 时隔大半年,终于抽出空来可以更新这个组件了 (边缘化了,大概要被裁员了) 2.7.0终于发布了~ 更新内容: 1.添加API类任务的超时时间,可以通过全局配置也可以单个任务设置 2.设置定时任务 ...

  8. MySQL事务理论及实现

    理论大多引自<高性能MySQL>一书,不过在自测的过程中不知道是不是SQL版本的问题,还是操作有问题,在设置事务隔离级别的时候 按书上讲SET TRANSACTION ISOLATION ...

  9. windows 下搭php环境

    windows 下搭php环境(php7.2+mysql5.7+apache2.4) 1. 先下载需要的软件 1) 先去微软官网下载vc,我下载的是2017版中文简体的.网址为https://www. ...

  10. spring上 -基于Xml配置bean笔记

    4,Spring 内容 7,快速入门 需求:通过 Spring 的方式[配置文件], 获取 JavaBean: Monster 的对象, 并给该的对象属性赋值, 输出该对象信息. 代码结构: lib ...