你想有多pwn
第一章
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的更多相关文章
- 见微知著(一):解析ctf中的pwn--Fast bin里的UAF
在网上关于ctf pwn的入门资料和writeup还是不少的,但是一些过渡的相关知识就比较少了,大部分赛棍都是在不断刷题中总结和进阶的.所以我觉得可以把学习过程中的遇到的一些问题和技巧总结成文,供大家 ...
- iscc2016 pwn部分writeup
一.pwn1 简单的32位栈溢出,定位溢出点后即可写exp gdb-peda$ r Starting program: /usr/iscc/pwn1 C'mon pwn me : AAA%AAsAAB ...
- pwn学习(1)
0x00 简介 入职之后,公司发布任务主搞pwn和re方向,re之前还有一定的了解,pwn我可真是个弟弟,百度了一番找到了蒸米大佬的帖子,现在开始学习. 0x01 保护方式 NX (DEP):堆栈不可 ...
- pwn with glibc heap(堆利用手册)
前言 对一些有趣的堆相关的漏洞的利用做一个记录,如有差错,请见谅. 文中未做说明 均是指 glibc 2.23 相关引用已在文中进行了标注,如有遗漏,请提醒. 简单源码分析 本节只是简 ...
- 我的pwn笔记
0.64位程序参数一次保存在RDI,RSI,RDX,RCX,R8和 R9,具体见图 windows64位调用约定 1.<_libc_csu_init>有一些万能gadget,汇编如下 #! ...
- Linux pwn入门教程(10)——针对函数重定位流程的几种攻击
作者:Tangerine@SAINTSEC 本系列的最后一篇 感谢各位看客的支持 感谢原作者的付出一直以来都有读者向笔者咨询教程系列问题,奈何该系列并非笔者所写[笔者仅为代发]且笔者功底薄弱,故无法解 ...
- Linux pwn入门教程(6)——格式化字符串漏洞
作者:Tangerine@SAINTSEC 0x00 printf函数中的漏洞 printf函数族是一个在C编程中比较常用的函数族.通常来说,我们会使用printf([格式化字符串],参数)的形式来进 ...
- Linux pwn入门教程——格式化字符串漏洞
本文作者:Tangerine@SAINTSEC 原文来自:https://bbs.ichunqiu.com/thread-42943-1-1.html 0×00 printf函数中的漏洞printf函 ...
- Linux pwn入门教程(2)——shellcode的使用,原理与变形
作者:Tangerine@SAINTSEC 0×00 shellcode的使用 在上一篇文章中我们学习了怎么使用栈溢出劫持程序的执行流程.为了减少难度,演示和作业题程序里都带有很明显的后门.然而在现实 ...
- Linux pwn入门教程(1)——栈溢出基础
作者:Tangerine@SAINTSEC 原文来自:https://bbs.ichunqiu.com/thread-42241-1-1.html 0×00 函数的进入与返回 要想理解栈溢出,首先必须 ...
随机推荐
- Mmdetection dataset pipline
数据的加载顺序是上图(来自mmdetection官网)中的顺序进行,上图中只有一次padding,但是其实dataloader一共有两次padding,一次是pad,另外一次就是collect后,给模 ...
- Pytorch数据加载与使用
前言 在训练的时候通常使用Dataset来处理数据集. Dataset的作用 提供一个方式获取数据内容和标签(label). 实战 from torch.utils.data import Datas ...
- SQL 高级语法 MERGE INTO
根据与源表相联接的结果,对目标表进行插入.更新.删除等操作. 例如,对目标表,如果源表存在的数据则更新,没有的则插入,就可以使用MEREG进行同步. 基本语法 MERGE INTO target_ta ...
- Angular 18+ 高级教程 – NgModule
前言 NgModule 在 Angular v14 以前是一门必修课.然而,自 Angular v14 推出 Standalone Component 以后,它的地位变得越来越边缘化了. 本教程从开篇 ...
- SQL Server CTE (Common Table Expression) 公用表表达式
参考: Sql - CTE公用表表达式和With用法总结 YouTube – SQL WITH Clause | How to write SQL Queries using WITH Clause ...
- k8s 中的 Ingress 简介
〇.前言 前边已经介绍了 k8s 中的相关概念和 Service,本文继续看下什么是 Ingress. Ingress 的重要性不言而喻,它不仅统一了集群对外访问的入口,还提供了高级路由.七层负载均衡 ...
- GZY.Quartz.MUI(基于Quartz的UI可视化操作组件) 2.7.0发布 新增各项优化与BUG修复
前言 时隔大半年,终于抽出空来可以更新这个组件了 (边缘化了,大概要被裁员了) 2.7.0终于发布了~ 更新内容: 1.添加API类任务的超时时间,可以通过全局配置也可以单个任务设置 2.设置定时任务 ...
- MySQL事务理论及实现
理论大多引自<高性能MySQL>一书,不过在自测的过程中不知道是不是SQL版本的问题,还是操作有问题,在设置事务隔离级别的时候 按书上讲SET TRANSACTION ISOLATION ...
- windows 下搭php环境
windows 下搭php环境(php7.2+mysql5.7+apache2.4) 1. 先下载需要的软件 1) 先去微软官网下载vc,我下载的是2017版中文简体的.网址为https://www. ...
- spring上 -基于Xml配置bean笔记
4,Spring 内容 7,快速入门 需求:通过 Spring 的方式[配置文件], 获取 JavaBean: Monster 的对象, 并给该的对象属性赋值, 输出该对象信息. 代码结构: lib ...