PWN-栈溢出(ROP利用)
一:ret2syscall什么是系统调用?
操作系统提供给用户的编程接口
是提供访问操作系统所管理的底层硬件的接口
本质上是一些内核函数代码,以规范的方式驱动硬件
x86 通过int 0x80指令进行系统调用、amd64 通过 syscall 指令进行系统调用
举例:
my_puts() -> write() -> sys_write()
my_puts(“Hello world!”);
程序 ELF 中的用户代码
write(1, &”Hello world!”, 12);
libc 中的用户代码
[ eax = 4; ebx = 1; ecx = &”Hello world!”; edx = 12; ] + int 0x80; => sys_write()
Linux 内核中的内核代码
问题:
可是在程序中没有已存在的一段代码是:(汇编指令为寄存器赋值)
123456mov eax, 0xbmov ebx, [“/bin/sh”] mov ecx, 0mov edx, 0int 0 ...
PWN-栈溢出(ret2something)
一:C语言函数调用栈知识介绍:
函数状态主要涉及三个寄存器 —— esp,ebp,eip。esp 用来存储函数调用栈的栈顶地址,在压栈和退栈时发生变化。ebp 用来存储当前函数状态的基地址,在函数运行时不变,可以用来索引确定函数参数或局部变量的位置。eip 用来存储即将执行的程序指令的地址
调用图解:
1 .将被调用函数的参数压入栈内(逆序压入arg , 与调用函数传参顺序相反)
2 .将被调用函数的返回地址压入栈内 , 这样调用函数(caller)的 eip(指令)信息得以保存。
3 .将当前的ebp 寄存器的值(也就是调用函数的基地址)压入栈内,并将 ebp 寄存器的值更新为当前栈顶的地址。这样调用函数(caller)的 ebp(基地址)信息得以保存。同时,ebp 被更新为被调用函数(caller)的基地址。
4 .将被调用函数(caller)的局部变量压入栈内
5 .首先将局部变量释放(弹出栈外),然后将调用函数(caller)的基地址(ebp)弹出栈外,并存到 ebp 寄存器内,这样调用函数(caller)的 ebp(基地址)信息得以恢复。此时栈顶会指向返回地 ...
PWN-栈堆结构介绍及函数调用
一.什么是栈?1.基本栈介绍:栈(又名堆栈)是一种具有特殊的访问方式的存储空间,是一种典型的先进后出(Last in First Out)的数据结构,其操作主要有压栈(push)和出栈(pup)两种操作
2.cpu中栈及栈顶的应用(汇编):详细操作跳转至函数调用以push指令入栈元素时,sp(指向栈顶的堆栈寄存器)自增2到达目前栈顶,pop指令出栈时,sp自减2到达新栈顶,当五元素时为空栈,当满元素时为满栈(注:cpu无法判断栈段长度,须程序员自行定义栈段长度)
二.函数调用栈(一):一.程序的执行过程可看作连续的函数调用,当一个函数执行完毕时,程序要回到调用指令的下一条指令(紧接着call指令)处继续执行函数。调用过程通常使用堆栈实现,每个用户态进程对应一个调用栈结构(call stack)。编译器使用堆栈传递函数参数、保存返回地址、临时保存寄存器原有值(即函数调用的上下文)以备恢复以及存储本地局部变量。
1.寄存器(寄存器是处理器加工数据或运行程序的重要载体,用于存放程序执行中用到的数据和指令。)
寄存器分配最基本的种类大致 ...
PWN-二进制基础
二进制基础1.程序的编译与链接从C源代码到可执行文件的生成过程为:
编译由C语言代码生成汇编代码
汇编由汇编代码生成机器码
链接将多个机器码的目标文件链接成一个可执行文件
补充:
大端序与小端序区分图解:
2.Linux下的可执行文件格式ELF可执行文件的分类:
123456789101112131415Windows:PE(Portable Executable)可执行程序.exe动态链接库.dll静态链接库.libLinux:ELF(Executable and Linkable Format)可执行程序.out动态链接库.so静态链接库.a
重点:
Linux下的可执行文件格式ELF结构图:
磁盘中的ELF(可执行文件)与内存中的ELF(进程内存映像)
在ELF由磁盘向内存映射的过程中,rodata、text、init 以及 ELF Header 合并成 Code段,而data、bss、got.plt 合并为Date段。
3.进程虚拟地址空间基础知识:
地址以字节编码 ...
Web前端-JavaScript
JavaScript:一:JavaScript基础:一 书写:😋 javscript代码书写在< script > < /script > 中 ,
😜 其中 < script >可放在head,body 标签中或 script.js文件下
123456789101112131415161718<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>W3Cschool教程(w3cschool.cn)</title></head><body> <p></p> <script> 代码部分 </script> <p> </p> </body></html>
二 变量:1.命名:
12345678Int ...
Web前端-CSS
CSS:一.基础修饰1.id和class选择器。
id:用#id名声明,作用于所有该id
123456<style>#aa{ //设置}</style><p id = 'aa'>
class:用.类名声明,作用于所有该类
123456<style>.aa{ //设置}</style><p class = 'aa'>
标签:用标签名声明,作用于所有该标签
2.背景background
background-color: 设置背景颜色
1{background-color:#6495ed;}
颜色表示方法:
十六进制 - 如:”#ff0000”
RGB - 如:”rgb(255,0,0)”
颜色名称 - 如:”red”
background-image:设置背景图
1background-image:url('test.jpg');
background-repeat:设置水 ...
Web前端-html5
「学习笔记」HTML基础
一、认识WEBWeb标准「构成」👉 结构标准,表现标准和行为标准
结构标准用于对网页元素进行整理和分类(HTML)
表现标准用于设置网页元素的版式、颜色、大小等外观属性(CSS)
行为标准用于对网页模型的定义及交互的编写(JavaScript)
二、HTML简介HTML初识「HTML」:超文本标记语言
「所谓超文本,有2层含义:」
因为它可以加入图片、声音、动画、多媒体等内容(超越文本限制 )
不仅如此,它还可以从一个文件跳转到另一个文件,与世界各地主机的文件连接(超级链接文本)。
「HTML骨架格式」
1234567891011<!-- 页面中最大的标签 根标签 --><html> <!-- 头部标签 --> <head> <!-- 标题标签 --> <title></title> </head> <!-- 文档的主体 --> <body> </b ...