Crypto-常用编码(持续更新)
1.凯撒密码凯撒密码(Caesar)加密时会将明文中的 每个字母 都按照其在字母表中的顺序向后(或向前)移动固定数目(循环移动)作为密文。
1.固定密钥:(密钥往往通过遍历获得)
12明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG //密钥为3密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ
2.密钥不定:
1234密文:s0a6u3u1s0bv1a密钥:guangtou //字母对应数字 a-z ~ 1 - 26偏移:6,20,0,13,6,19,14,20 明文:y0u6u3h1y0uj1u
2.Atbash Cipher(移位密码)它使用字母表中的最后一个字母代表第一个字母,倒数第二个字母代表第二个字母。在罗马字母表中,它是这样出现的:
12明文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z密文:Z Y X W V U T S R Q P O N M L K J I H G F E D C B ...
Crypto-初等数论四大定理
初等数论四大定理:1.欧拉定理:
n和a为正整数,且 n,a互素,即 gcd(a,n) = 1 ,则:
证明省略。。。。。
2.威尔逊定理:主要针对大数阶乘在初等数论中,威尔逊定理给出了判定一个自然数是否为素数的充分必要条件。
即:当且仅当p为素数时:( p -1 )! ≡ -1 ( mod p )
因为很少涉及,此处证明省略。。。。。。
例题:求value_p
1234x = 11124440021748127159092076861405454814981575144744508857178576572929321435002942998531420985771090167262256877805902135304112271641074498386662361391760451 y = 1112444002174812715909207686140545481498157514474450885717857657292932143500294299853142098577109016726225687780590213530411 ...
PWN-几个简单栈题
babyof
简单的64位ret2 libc
发现可以通过read函数进行栈溢出,同时在这之前调用了puts函数,因此可以通过puts函数泄露system在libc中的地址并调用system函数。
exp:
1234567891011121314151617181920212223242526272829303132333435from pwn import *io = process("./babyof")elf = ELF("./babyof")libc = ELF("./libc-2.27.so")puts_plt = elf.plt["puts"]puts_got = elf.got["puts"]sub_addr = 0x400632pop_rdi_addr = 0x400743#pop_rsi/r15_addr = 0x400741 #pop_rdx_addr =payload = cyclic(0x40 + 8) + p64(pop_rdi_addr) + p64(pu ...
PWN-堆利用(堆工作介绍/double free)
堆管理器堆概述什么是堆?
是虚拟地址空间的一块连续的线性区域
提供动态分配的内存,允许程序申请大小未知的内存
在用户与操作系统之间,作为动态内存管理的中间人
响应用户的申请内存请求, 向操作系统申请内存,然后将其返回给用户程序
管理用户所释放的内存,适 时归还给操作系统
申请内存的两种系统调用:
1.brk
brk调用为在data段向上延申一段区域作为申请的内存供程序使用,该调用多发生在进程的主线程调用区域,且该方式申请的内存较小,一般用于小内存申请。
2.mmap
mmap为大内存申请,即brk无法满足所需申请内存的大小,需要操作系统从内存中映射一段内存作为申请的内存供程序使用。
Areanaarena为内存的分配区,可以理解为堆管理器所持有的内存池。
图解:
堆管理器与用户的内存交易发生于arena中,可以理解为堆管理器向操作系统批发来的有冗余的内存库存。
arena起着存储从操作系统中借来但还未交给用户内存或存储用户归还但还未交给操作系统的内存的作用。
Chunkchunk为用户申请内存的单位,也是堆管理器管理内存的基本单位 malloc()返回的指针指向一个chunk的数 ...
PWN-格式化字符串漏洞
格式化字符串漏洞原理
对于这样的例子,在进入 printf 函数的之前 (即还没有调用 printf),栈上的布局由高地址到低地址依次如下
12345some value3.14123456addr of "red"addr of format string: Color %s...
假设,此时我们在编写程序时候,写成了下面的样子
1printf("Color %s, Number %d, Float %4.2f");
时我们可以发现我们并没有提供参数,那么程序会如何运行呢?程序照样会运行,会将栈上存储格式化字符串地址上面的三个变量分别解析为
解析其地址对应的字符串
解析其内容对应的整形值
解析其内容对应的浮点值
对于 2,3 来说倒还无妨,但是对于对于 1 来说,如果提供了一个不可访问地址,比如 0,那么程序就会因此而崩溃。
这基本就是格式化字符串漏洞的基本原理了。
注:
如若没有提供参数,printf会继续向上寻找,把父函数的内容当作参数打印出来。
同样:
可以通过printf打印出canary的内容,进而绕过canary防护。
程序 ...
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 ...