# Web # Please_RCE_Me GET传参输入?moran=flag,之后获取源码: 123456789101112131415<?phpif($_GET['moran'] === 'flag'){ highlight_file(__FILE__); if(isset($_POST['task'])&&isset($_POST['flag'])){...

比赛时间:2024-05-06 # Re-easyre 基本的 base64 换表,用 CyberChef 解密 # # Re-babyre 进入主函数,发现输入四次 看一下就知道是大数求解 (当初写的时候差不多 不知道为什么第四个总是算错…) 1234567891011121314151617181920212223242526272829303132333435363738394041from z3 import *s = Solver() #...

# 简述: ​ 首先说一下什么是无参数 RCE,对于很多时候,我们通常遇到 PHP 中存在 eval 函数的时候,一般是通过构造: 1system("cat /flag"); ​ 的 payload 来实行攻击的,大不了就出现了一些 waf 需要绕过。但是,有的时候,他们相关的 waf 特别奇葩,像是过滤了所有的字母以及数字什么的,另外,就是这篇博客最主要说明的题目,就是无参数 RCE: ​ 像是下面的这一个正则: 123if(';' ===...

# 相关源码: # 1. chunk 相关源码: ​ 对于用户来说,只需要确保 malloc () 函数返回的内存不会发生溢出,并且在不用的时候使用 free () 函数将其释放,以后也不再做任何操作即可。而对于 glibc 来说’它要在用户第一次调用 malloc () 函数之前对堆进行初始化;在用户频繁申请和释放时维护堆的结构’保证时间和空间上的效率;同时还要检测过程中可能产生的错误,并及时终止程序。 ​ 首先,先稍微说下几个相关的宏定义。 # request2size(): 1234567#define request2size(req) \(((req) +...

# glibc 堆概述: # 1. 内存管理与堆: # 概述: ​ 内存管理是堆计算机的内存资源进行管理,这要求在程序请求时能够动态分配内存的一部分,并在程序不需要时释放分配的内存。CTF 竞赛中常见的 ptmalloc2 就是 glibc 实现的内存管理机制,它继承了 dlmalloc,并提供了对多线程的支持。 ​ 堆是程序虚拟内存中由低地址向高地址增长的线性区域。一般只有当用户向操作系统申请内存时,这片区域才会被内核分配出来,并且处于效率和页对齐的考虑,通常会分配相当大的连续内存。程序再次申请时便会从这片内存中分配,直到堆空间不能满足时才会再次增长。堆的位置一般在 BSS 段高地址处。 #...

# pwn 学习笔记(5)–格式化字符串漏洞 ​ 前言:由于条件有限,因此对于该漏洞的学习不算很多, # 格式化字符串漏洞基础: # 格式化字符串介绍: ​ 格式化字符串函数可以接收可变数量的参数,并将第一个参数作为格式化字符串,根据其来解析之后的参数,格式化字符串的利用一般分为三个部分: 格式化字符串函数 格式化字符串 [后续参数] # 格式化字符串函数: ​ 常见的格式化字符串有: 输入: scanf() 输出: 函数 基本介绍 printf 输出到 stdout fprintf 输出到指定 FILE 流 vprintf 根据参数列表格式化输出到...

# SQL 无列名注入 ​ 前段时间,队里某位大佬发了一个关于 sql 注入无列名的文章,感觉好像很有用,特地研究下。 # 关于 information_schema 数据库: ​ 对于这一个库,我所知晓的内容并不多,并且之前总结 SQL 注入的时候忘记说这个数据库了,在这里补充一下,简单点儿来说,就是这个数据库中的某些表存放着数据库的一些信息,例如,我电脑中所有的数据库中存在如下的几个数据库: 12345678910111213mysql> show databases;+--------------------+| Database...

# pwn 学习笔记(4) # 静态链接: ​ 静态链接是由链接器在链接时将库的内容加入到可执行程序中的做法。链接器是一个独立程序,将一个或多个库或目标文件(先前由编译器或汇编器生成)链接到一块生成可执行程序。这里的库指的是静态链接库,Windows 下以.lib 为后缀,Linux 下以.a 为后缀。 ​ 也就是说将静态链接库中的所有的函数都写入这个 ELF 文件中,所以会造成该二进制文件极为庞大,因此也会存在很多的可供利用来 ret2syscall 的 gadgets。但是,使用静态链接生成的可执行文件体积较大,包含相同的公共代码,造成浪费。 ​ 对于 ret2syscall...

# pwn 学习笔记(3) # ROP 原理: ​ ROP (Return Oriented Programming) 返回导向编程,主要思想是通过在程序中已有的小片段(gadgets)来改变某些寄存器或者变量的值,从而控制程序的执行流程。 # 栈溢出–ret2syscall: # 1. 系统调用: ​ 对于一个已经存在于标准库中的函数,例如 printf (),我们编写某个程序的时候,这个函数仅仅只用了 printf (参数); 这么一行,但是,其工作可是很复杂的,printf () 调用了函数库当中的其他更加底层的函数,然后被调用的函数肯定会调用再底层的函数,知道调用到系统调用中的...

# pwn 学习笔记(2) # 1. 三种常见的寄存器: ​ ax 寄存器:通用寄存器,可用于存放多种数据 ​ bp 寄存器:存放的是栈帧的栈底地址 ​ sp 寄存器:存放的是栈顶的地址 # 2. 栈帧与栈工作的简介: ​ 栈帧是存储函数的一些信息的地方,栈帧存储有函数的局部变量,传递给子函数的实际参数,父函数的地址以及上一个栈帧栈底的地址,大致情况如下: ​ 在函数调用的过程中,首先会讲 bp 寄存器的值进行压栈,以方便在恢复的时候恢复栈底寄存器的值,再之后,会按顺序将局部变量压栈,最后是子函数的实际参数,会按照先入栈的后出栈,从最后一个实际参数先入栈再到第一个实际参数,比如函数 a...