你想有多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 函数的进入与返回 要想理解栈溢出,首先必须 ...
随机推荐
- Go runtime 调度器精讲(十一):总览全局
原创文章,欢迎转载,转载请注明出处,谢谢. 0. 前言 前面用了十讲介绍了 Go runtime 调度器,这一讲结合一些图在总览下 Go runtime 调度器. 1. 状态转换图 首先是 Gorou ...
- MyBatis——使用Mapper代理开发
使用 Mapper 代理开发方式完成入门案例 1.定义与SQL映射文件同名的Mapper接口,并将 Mapper 接口和SQL映射文件放置在同一目录下 (企业开发中,通常是将配置文件统 ...
- 优化 Go 语言数据打包:性能基准测试与分析
优化 Go 语言数据打包:性能基准测试与分析 场景:在局域网内,需要将多个机器网卡上抓到的数据包同步到一个机器上. 原有方案:tcpdump -w 写入文件,然后定时调用 rsync 进行同步. 改造 ...
- redisson内存泄漏问题排查
问题描述 最近生产有个服务突然出现频繁告警,接口P99响应时间变长,运维同学观察到相应的pod cpu飙升,内存占用很高. cpu升高问题排查是老生常谈的话题了,一般可以使用top -p pid -H ...
- IP地址集中管控:从分配规划、现网管理到合规性监测、准入控制全周期监管
当前,网络已成为企业必不可少的资源,企业网络系统也在不断扩展,IP地址数量不断增长,随之而来的是IP地址管理问题凸显.如何高效集中地管理网络中的IP地址,IP如何有效划分,成为影响企业网络可用性和质量 ...
- Nuxt.js 应用中的 app:redirected 钩子详解
title: Nuxt.js 应用中的 app:redirected 钩子详解 date: 2024/10/3 updated: 2024/10/3 author: cmdragon excerpt: ...
- 单Master节点的k8s集群部署-完整版
K8S 安装步骤 一.准备工作 1.准备三台主机(一台Master节点,两台Node节点)如下: 角色 IP 内存 核心 磁盘 Master 192.168.116.131 4G 4个 55G Nod ...
- union联合体的缺陷
传统的 union 联合体在 C++ 中虽然提供了一种能够在相同的内存空间内存储多种不同类型的方式,但它也有一些显著的缺陷和限制.这些缺陷让 union 的使用不太安全,尤其是在复杂的程序中.以下是传 ...
- Java日期时间API系列14-----Jdk8中java.time包中的新的日期时间API类,java日期计算1,获取年月日时分秒等
通过Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析 ,可以看出java8设计非常好,实现接口Temporal, Tempora ...
- Vue3中的新的内置组件
在vue2中的内置组件: 动态路由中的 component :作用:动态显示路由的挂载点,使用 is 属性动态显示组件 : keep-alive :作用:使被包裹的组件保留状态,避免被重新渲染 : 路 ...