你想有多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 函数的进入与返回 要想理解栈溢出,首先必须 ...
随机推荐
- Linux (Debian) 安装MySQL 后如何获取登录密码
树莓派安装MySQL后获取登录密码 树莓派基于Debian系统. 成功安装MySQL后 su root vim /etc/mysql/debian.cnf 其中 user 和 password 就是你 ...
- pycharm批量注释
pycharm批量注释不像是spyder可以鼠标右键选择,pycharm是要用快捷键的,选中要注释的代码,然后快捷键就可以了. 注释代码和取消注释代码的快捷键都一样ctrl + /
- ToCom:一次训练随意使用,华为提出通用的ViT标记压缩器 | ECCV 2024
标记压缩通过减少冗余标记的数量(例如,修剪不重要的标记或合并相似的标记)来加快视觉变换器(ViTs)的训练和推理.然而,当这些方法应用于下游任务时,如果训练和推理阶段的压缩程度不匹配,会导致显著的性能 ...
- 支付宝携手HarmonyOS SDK打造高效便捷的扫码支付体验
背景 在日常的购物转账.生活缴费等在线支付中,用户在正式拉起支付界面前,均需要至少经历一次"识别"+两次"寻找",即识别归属应用.寻找应用.寻找扫码入口,才能完 ...
- CSS & JS Effect – 用 wheel 模拟 scroll
前言 在 用 JavaScript 实现 position sticky 文章中,我提到了用 wheel 来模拟 scroll 效果. 这篇来说说具体怎么实现,挺简单的哦. Preparation t ...
- Servlet—— urlPattern配置
Servlet urlPattern配置 Servlet要想被访问,必须配置其访问路径(urlPattern) 1.一个Servlet可以配置多个 urlPattern 2.ur ...
- Blazor开发框架Known-V2.0.11
Known今天发布了V2.0.11版本,本次版本添加了系统WebApi在线测试,系统菜单样式配置,表格支持用户设置栏位显隐和顺序,系统上下文支持静态组件与后端交互,以及对PgSQL进行了详细的测试,修 ...
- [namespace hdk] ordered_vector
功能: 已重载[]运算符 已重载+运算符(合并) 已重载+=运算符 已重载构造函数 clear() it() 以std::vector形式返回自身 print(char=' ',char='\n') ...
- 【赵渝强老师】Weblogic域和域的组成
一.什么是Weblogic WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于Java EE架构的中间件,WebLogic是用于开发.集成.部署和 ...
- 智能化IT运维平台建设方案,基于智和信通运维体系的高敏捷二次开发
随着企业信息进程不断加速,运维人员需要面对越来越复杂的业务和越来越多样化的用户需求,不断扩展的应用需要越来越合理的模式.越来越智能的工具来保障运维能灵活便捷.安全稳定地开展.企业网络规模的不断扩大,从 ...