首页 > 其他分享 >来自笔记本的移植

来自笔记本的移植

时间:2024-11-18 18:21:43浏览次数:1  
标签:PROT addr 来自 mprotect 笔记本 修改 flag 内存 移植

编译汇编代码到可执行文件并执行步骤
假设文件名字是flag.asm
在linux中,先nasm -f elf flag.asm -o flag.o
然后再ld -m elf_i386 -o flag flag.o
然后就可以了,找个时间看看,nasm的用法

修改aslr参数值:sudo sysctl -w kernel.randomize_va_space=0#这是修改为0

p.sendline(shellcode.ljust(140,b'a')+p32(buf_addr)这也是个合理的输入

p39,
找到/bin/sh,system的字符,思路就明确了
08048750#binsh
0804829D#system
buf到r有22个

编写exp
from pwn import *
p.progress("./pwm1")
payload="a"*22+0x804829D+p32(0)+p32(0x8048750)
p.sendline(payload)
p.interactive()

0x8048758
md,白忙活了,system地址错了,而且想复杂了,但好歹解决了

signal(11, (__sighandler_t)sigsegv_handler);注意这东西,当发生对存储的无效访问时,会把stderr打印输出,也就是flag

哦,对了,有点要记住,在开头要用(context.log_level='debug')来把模式设定为调试

呃,到pwn49了,碰到个新东西= =,叫做mprotect,看不懂这玩意,百度!
mprotect()函数可以修改调用进程内存页的保护属性,如果调用进程尝试以违反保护属性的方式访问该内存,则内核会发出一个SIGSEGV信号给该进程。

include <sys/mman.h>

int mprotect(void *addr, size_t len, int prot);
addr:修改保护属性区域的起始地址,addr必须是一个内存页的起始地址,简而言之为页大小(一般是 4KB == 4096字节)整数倍。
len:被修改保护属性区域的长度,最好为页大小整数倍。修改区域范围[addr, addr+len-1]。
prot:可以取以下几个值,并可以用“|”将几个属性结合起来使用:
1)PROT_READ:内存段可读;
2)PROT_WRITE:内存段可写;
3)PROT_EXEC:内存段可执行;
4)PROT_NONE:内存段不可访问。
返回值:0;成功,-1;失败(并且errno被设置)
1)EACCES:无法设置内存段的保护属性。当通过 mmap(2) 映射一个文件为只读权限时,接着使用 mprotect() 标志为 PROT_WRITE这种情况就会发生。
2)EINVAL:addr不是有效指针,或者不是系统页大小的倍数。
3)ENOMEM:内核内部的结构体无法分配。
呃,有点泛啊,但是倒是了解了这个干嘛用的,就是用来修改某个内存的权限,但是发现感觉还是不太懂,干脆去看wp了= =
在wp找到了这个,让我明白了用法如下:

嗯,然后开始写了,题目就是让我先溢出到这个函数,然后修改某个地方的内存的权限,然后执行。
我突然就想到了shellcode,试试能不能修改read的函数内读入参数的内存的权限,然后输入机械码不就得了,开始尝试,呃,mprotect好像要3个参数,开找寄存器,找到合适的0x8056794,然后按照需要填写的参数填入,emmmm应该是,先是目标地址,再是长度,再是权限,根据之前那张图,找段表,找到开始地址0x80da000
然后1000,然后是改为7
然后是返回到read地址,呃,read又有三个参数,再次调用之前那个,然后第一个是0,后面随便填上刚刚修改过内存的参数。再按照shellcode里面那样写个机械码。ok完事,运行,得到shell。

标签:PROT,addr,来自,mprotect,笔记本,修改,flag,内存,移植
From: https://www.cnblogs.com/C0nceal/p/18552363

相关文章

  • 笔记本(2)
    汇编代码的一些前置知识:;立即寻址方式moveax,11;将11赋值给eaxaddeax,114504;eax加上114504subeax,1;eax减去1;寄存器寻址方式movebx,0x36d;将0x36d赋值给ebxmovedx,ebx;将ebx的值赋值给edx;直接寻址方式movec......
  • 笔记本(3)
    我记得当初有写这个在某个地方啊==找不到了...就是一些二进制文件知识和exp中一些代码在libc中,就开始很常见的使用elf=ELF('/pwn')write_plt=elf.plt['write']......got.....got.........这两是用来查询[]内函数的plt和got的地址并赋值给左边变量,还有相似的main=elf.sym['mai......
  • STM32移植u8g2图形库
    1.从GitHub上下载源代码,https://github.com/olikraus/u8g22.复制csrc文件夹(这是u8g2库在C语言环境下的源文件)到工程文件中,在所有的驱动文件(即u8x8_d_开头的文件)中只保留u8x8_d_ssd1306_128x64_noname.c(这是与以ssd1306为驱动芯片的0.96/1.3寸OLED屏幕进行通讯的实现函数),然后将......
  • 小米笔记本Pro15锐龙版(R7 5800H/15G RAM/512G SSD)拆机单固态硬盘SSD扩容,无损迁移Win
    1.准备工作1.1梅花头螺丝刀2.72米 1.2新的固态硬盘三星980nvmem2固态硬盘,官方说读取速度能到3.5G,实测能到3.3G。小米笔记本Pro15锐龙版的M.2插槽支持的是PCIE3.0,三星980支持的就是PCIE3.0,够用了。三星980Pro支持的是PCIE4.0,读取能到7G,但接口不支持,只能降到PCIE......
  • 基于STM32通过TM1637驱动4位数码管详细解析(可直接移植使用)
    目录1. 单位数码管概述2. 对应编码2.1 共阳数码管2.2 共阴数码管3. TM1637驱动数码管3.1 工作原理3.1.1 读键扫数据3.1.2 显示器寄存器地址和显示模式3.2 时序3.2.1 指令数据传输过程(读案件数据时序)3.2.2 写SRAM数据地址自动加1模式3.2.3 ......
  • 系统移植操作
    系统移植是linux驱动开发工程师必备的技能。移植linux系统,linux驱动开发:基于linux内核提供的各种API接口实现硬件驱动代码。linux系统的启动流程:    系统上电----u-boot----linux内核----挂载根文件系统----应用程序tftp服务:基于UDP协议的简单文本文件传输协议,它的......
  • Lenovo笔记本F1-F12功能键作用简介
        在现代笔记本电脑的使用中,快捷键扮演着提高效率和便捷性的重要角色。Lenovo笔记本作为市场上的主流品牌之一,其F1-F12功能键集成了多种实用的快捷操作,这些功能键可以帮助用户快速执行常用任务,从而提升工作效率和用户体验。然而,许多用户可能并不完全了解这些功能键的......
  • hostapd移植到RK356X
    1.简介开发环境:Ubuntu20.04目标平台:RK356X,内核版本:4.19.234hostapd版本:2.10,依赖特定版本的openssl和libnlopsnssl版本:3.0.15libnl版本:3.2.32.openssl移植hostapd依赖openssl,需要先移植openssl获取openssl源码,选择使用3.0.15版本,链接如下http......
  • 爱科微AIC8800D80P Wi-Fi6模块驱动移植
    1.简介开发环境Ubuntu20.04目标平台:瑞芯微RK356X目标平台内核版本:4.19.234wifi模块型号:AIC8800D80PWi-Fi6/BT5.02.硬件wifi模块的PID:VID=a69c:8d80此模块挂在RK356X的PCIE接口上01:00.0Class0280:a69c:8d80Class0280:表示网络控制器(通常是......
  • FreeModbus RTU 从机Hal库裸机移植避坑指南
    首先说明:FreeModbus有很多个库!!!!不同库的实现方法是略有不同的!!!本次FreeModbusRTU移植主要依据这个网友分享的工程他人移植的库你可能会在csdn看到他的文章,但是完全跟着那个文章走很混乱而且跟库的文件不一样.故而我重新整理了工程,并写了一个详细的移植教......