2.1k2 分钟

# 7. 编写程序,测试 1~50 的阶乘所消耗的毫米级时间 # 1. 计算阶乘:用 while 循环即可 awhile(i<n)&#123; //n 即为想要算阶乘的数s*=i //s 为阶乘计算的结果i=i+1;&#125;# 2. 计算毫时间差 需要头文件 import java.util.Date; 1. 计算毫米级时间 用时间戳:System.currentTimemillis (); 这是一个长整型数 along startMillis = System.curren
1.3k1 分钟

这里用来记录 java 课程从 0 开始学习 # 1. 题目:编写程序,测试字符串 “你好,欢送来到 ava 世界” 的长度,将字符串的长度转换成字符串进行输出,并对其中的 “Java " 四个字母进行截取,输出截取字母以及它在字符串中的位置。 # 首先要定义一个 string 类型的字符串: String str="你好,欢迎来到java世界 " String 首字母要大写 # 计算长度: 变量名.length () str.length() 不用加引号 # 将长度转化成字符串类型 使用 String 类的 valueOf() 方法 aint nu
6.2k6 分钟

# 一。系统调用 系统调用也是一个函数,但是系统调用运行在内核态,用户自定义的函数在用户态。而我们想要调用在内核态的指令(如关闭 / 打开中断,I/O 操作等),就需要利用系统调用作为接口,让用户进入内核态。 系统调用是 Linux 内核提供的一段代码(也可以理解为函数)用来实现特定的功能,**32 位程序(x86 CPU)利用 int 0x80 ** 来进行系统调用,64 位程序 (X64 CPU) 提供调用 syscall 来进行系统调用。Linux 内核提供用户空间程序与内核空间进行交互的接口(接口让用户态程序能受限访问硬件设备,比如申请系统资源,操作设备读写,创建新
1.3k1 分钟

# 概述 由于在 pwn 题中有时候不给 libc,那么需要我们自己通过泄露函数地址来获得 libc 的基地址,而往往 LibcSearcher 无法准确的得到 libc 版本,那么我们就需要利用 DynELF,这是 pwntools 在早期版本就提供了一个解决方案 ——DynELF 类;利用方式与 ret2libc 类似,都是泄露函数地址来计算得到 libc 基址,通俗地讲,DynELF 就是通过程序漏洞泄露出任意地址内容,结合 ELF 文件的结构特征获取对应版本文件并计算对比出目标符号在内存中的地址 并且: write 函数是最理想的,因为 write 函数的特点在于其输出完全由其参数 s
7k6 分钟

# 概述 沙盒机制也就是我们常说的沙箱,英文名 sandbox ,是计算机领域的虚拟技术,常见于安全方向。一般说来,我们会将不受信任的软件放在沙箱中运行,一旦该软件有恶意行为,则禁止该程序的进一步运行,不会对真实系统造成任何危害。 在 ctf 比赛中,pwn 题中的沙盒一般都会限制 execve 的系统调用,这样一来 one_gadget 和 system 调用都不好使,只能采取 open/read/write 的组合方式来读取 flag。当然有些题目可能还会将上面三个系统调用砍掉一个,进一步限制我们获取到 flag. # 1.prctl 函数调用 prctl 是进
871 分钟

chunk 的 p 位设为 1 即上一个 chunk 被使用并且上一个 chunk 可以使用 pre_size 的空间 (用来储存前一个物理相邻的 chunk 的数据 ,(两个都空闲才合并)
22k20 分钟

# <center>PWN 小技巧 </center> # 1.64 位程序与 32 位程序 payload ​ 64 位程序 payload 要先用 pop_rdi 覆盖 ret 然后依次是 调用函数的参数,调用函数本身,最后是返回地址(32 位程序传参不需要用寄存器) ​ 32 位程序是调用函数 先函数本身 ,然后是函数返回地址,再是参数,然后接着是函数本身再是返回地址,最后是参数.... 这种循环(返回地址可以用 pop_ret 这种代替) npayload=b"\x00"*(0x50+8)+p64(rdi_ret)+p64
17k15 分钟

这里用来记录在 pwn 题中一些 C 语言函数的作用和一些函数的漏洞 # 1. atol、 atoi、atoq cint atoi(const char *nptr);long atol(const char *nptr);long long atoll(const char *nptr);long long atoq(const char *nptr);atoi: 把字符串nptr转换为int atol: 把字符串nptr转换为 long int/long long int atoq: # 2.__readfsqword(0x28u) 这段代码是通常用于 alarm 函数
3.4k3 分钟

# ret2csu # 原理 64 位程序中,函数的前 6 个参数是通过寄存器传递的,但是大多数时候我们很难找到每个寄存器对应的 gadges。这时候,我们可以利用 x64 下的__libc_csu_init 中的 gadgets。 这个函数是用来对 libc 进行初始化操作的,而一般的程序都会调用 libc 函数,所以这个函数一定会存在。 # 下面借用别人在 IDA 摘出来的__libc_csu_init 函数的汇编指令 .text:00000000004011B0 ; void _libc_csu_init(void) .text:00000000004011B0
6.8k6 分钟

# 1. 前置知识 # 2. 环境搭建 这里有个坑,在 php8.1.12 版本有些代码行不通,应该是版本问题,后来改成 php7.2.24 后就可以了,所以下面的配置最好按照 7.2.24 来进行 # 1.PHP 拓展安装 下面是是 PHP 拓展模块的安装流程,我这个是在 ubuntu22.04 下安装的 首先是安装 php,以及 php 开发包 hsudo apt install php php-dev安装完后利用 php --version 查看当前 php 版本 我这里是 PHP 8.1.12-1ubuntu4.3 (cli) , 所以从下面的链接找到 8.1.12 的源码下载下来,